{"version":3,"file":"gfn-client-sdk.js","mappings":"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AY,YACnEA,EAAe,UAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,WAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,WACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,UAAY,WACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,WAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,WACnEA,EAAe,WAAY,YAAaA,EAAe,WAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,YACnEA,EAAe,UAAY,YAAaA,EAAe,UAAY,WACnEA,EAAe,UAAY,WAAaA,EAAe,UAAY,YACnEA,EAAe,WAAY,WAAaA,EAAe,WAAY,YACnEA,EA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AAU,SACV,QAAU,SACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,MACV,SAAU,EACV,SAAU,IACV,OAAS,SACT,QAAU,SACV,QAAU,EACV,QAAU,SACV,QAAU,SACV,QAAU,MACV,QAAU,MACV,QAAU,IACV,QAAU,EACV,QAAU,IACV,SAAU,SACV,SAAU,MACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAW,SACX,SAAW,MACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,MACX,SAAW,SACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,EACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,MACX,SAAW,SACX,SAAW,MACX,SAAW,SACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,OAEf,CACI,EAAK,WACL,MAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,EACT,OAAS,QACT,OAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,QACT,OAAS,GACT,OAAS,WACT,OAAS,WACT,OAAS,KACT,OAAS,KACT,OAAS,WACT,MAAQ,WACR,MAAS,GACT,OAAS,WACT,OAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,EACT,OAAS,WACT,OAAS,KACT,OAAS,WACT,OAAS,QACT,OAAS,KACT,OAAS,WACT,OAAS,QACT,OAAS,QACT,QAAS,WACT,QAAU,QACV,QAAU,QACV,QAAU,WACV,QAAU,EACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,QACV,QAAU,WACV,QAAU,QACV,QAAU,GACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,EACV,QAAU,QACV,QAAU,QACV,QAAU,WACV,QAAU,WACV,QAAU,GACV,QAAU,WACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,KACV,QAAU,WACV,QAAU,QACV,QAAU,S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","sources":["webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/universalModuleDefinition","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/cancellablewait.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/enumnames.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/eventemitter.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/extensions.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/genversion.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/interfaces.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/internaltypes.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/legacylogemitter.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/logger.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/observablearray.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/platform.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/settings.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/telemetry.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/tracingmanager.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/translateplatform.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/types.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/version.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/rtcutils-core/src/workerutils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/internal.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/dependencies.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/gridserver.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/indexgridserver.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/indexsessioncontrol.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/interfaces.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/sessioncontrol.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/sessioncontrolimpl.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/sessioncontrolutils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/settings.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/telemetryhandler.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/gridserver/dist/sessioncontrol/src/tracing.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream-stable/ragnarok/dist/ragnarok.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream/core/dist/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@gamestream/core/dist/src/logger.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/platform/browser/globalThis.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/version.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/internal/semver.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/internal/global-utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/diag/types.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/api/diag.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/baggage/internal/baggage-impl.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/baggage/internal/symbol.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/baggage/utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/context/context.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/metrics/NoopMeter.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/metrics/Metric.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/diag/consoleLogger.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/propagation/TextMapPropagator.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/api/context.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/context-utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/SamplingResult.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/span_kind.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/status.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/internal/tracestate-validators.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/internal/tracestate-impl.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace/internal/utils.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/context-api.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/diag-api.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/metrics/NoopMeterProvider.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/api/metrics.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/metrics-api.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/propagation/NoopTextMapPropagator.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/baggage/context-helpers.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/api/propagation.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/propagation-api.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/api/trace.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/trace-api.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@opentelemetry/api/build/esm/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/aes.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/cipher-core.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/core.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/enc-base64.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/enc-base64url.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/enc-utf16.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/evpkdf.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/format-hex.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/hmac.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/lib-typedarrays.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/md5.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/mode-cfb.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/mode-ctr-gladman.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/mode-ctr.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/mode-ecb.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/mode-ofb.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pad-ansix923.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pad-iso10126.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pad-iso97971.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pad-nopadding.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pad-zeropadding.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/pbkdf2.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/rabbit-legacy.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/rabbit.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/rc4.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/ripemd160.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha1.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha224.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha256.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha3.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha384.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/sha512.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/tripledes.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/crypto-js/x64-core.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/lightstep-tracer/browser.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/lightstep-tracer/dist/lightstep-tracer.min.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/binary_carrier.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/constants.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/ext/tags.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/functions.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/global_tracer.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/mock_tracer/index.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/mock_tracer/mock_context.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/mock_tracer/mock_report.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/mock_tracer/mock_span.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/mock_tracer/mock_tracer.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/noop.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/reference.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/span.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/span_context.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/opentracing/lib/tracer.js","webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/bootstrap","webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/runtime/define property getters","webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/runtime/global","webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@gfn-sdk/nv-gfn-client-sdk/webpack/runtime/make namespace object","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/utils.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/api-error.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/api-error.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/auth.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/http-client.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/starfleet/starfleet.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/event-emitter.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/user.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/user.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/authorized-user.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/platform/platform.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/logging/logging.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/logging/console-log-writer.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/logging/logging.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/rest/rest-client.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/configuration/configuration.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/version/version.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/guest-user.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/auth.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/configuration/configuration.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/input/keycode.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/xhr-http-client.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/http-client.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/xhr-http-client.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/http-client-factory.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/server/server.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/device/device.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/platform/platform-mappings.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/rate-limiter.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/jwt.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/rest/rest-client.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/storage/local-storage.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/storage/storage-factory.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/storage/idb-storage.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/entitlement/entitlement.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/settings/settings.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/catalog-filters.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/catalog.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/catalog-queries.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/account-provider.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/catalog.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/server/server.entities.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/streamer.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/networktest/network-test.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/api-base.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/device/android/android-device.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/input/gesture.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/base/base-streamer.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/android/android-streamer.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/device/device.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/device/android/android-device.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/util.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/streamer-errors.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/mock/mock-grid-server.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/telemetry.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/entitlement/entitlement.entities.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/catalog/catalog-utils.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/entitlement/entitlement-utils.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/networktest/network-test.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/custom-message.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/editable-region.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/streamer.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/android/android-streamer.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/core/message-handler.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/mock/mock-ragnarok.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/streamer-errors-ragnarok.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/input/gamepad-handler.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/ui/virtual-keyboard-qwerty.layout.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/ui/virtual-keyboard.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/ui/on-screen-control.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/web/web-streamer-touch-osc.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/input/gesture-helper.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/web/web-streamer.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/streamer/null/null-streamer.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/platform/platform-base.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/telemetry-helper.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/android/android-telemetry-helper.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/null/null-telemetry-helper.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/logging/remote-logger.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/logging/browser-remote-logger.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/platform/platform.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/i18n/i18n.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/server/server.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./node_modules/@kodiak/telemetry-sdk/dist/telemetry-sdk.esm.js","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/telemetry.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/overrides/overrides.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/overrides/overrides.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/idm/consent.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/gxt.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/feedback.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/distributed-tracing.constants.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/telemetry/distributed-tracing.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/gxtarget/remote-configuration.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/gxtarget/cloud-variable.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/gxtarget/cloud-variable-service.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/input/gamepad-handler.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/guestmode/guestmode.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/guestmode/guestmode.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/gxtarget/cloud-feature-configs.types.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/gxtarget/cloud-feature-configs.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/api.ts","webpack://@gfn-sdk/nv-gfn-client-sdk/./src/client/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 {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, () => {\nreturn ","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TracingManager = exports.PackageVersion = void 0;\nwindow[\"RtcUtils\"] = window[\"RtcUtils\"] || {};\n/* Typings to be exposed to library user */\n__exportStar(require(\"./src/interfaces\"), exports);\n__exportStar(require(\"./src/version\"), exports);\nvar genversion_1 = require(\"./src/genversion\");\nObject.defineProperty(exports, \"PackageVersion\", { enumerable: true, get: function () { return genversion_1.version; } });\n__exportStar(require(\"./src/utils\"), exports);\n__exportStar(require(\"./src/settings\"), exports);\n__exportStar(require(\"./src/eventemitter\"), exports);\n__exportStar(require(\"./src/logger\"), exports);\n__exportStar(require(\"./src/platform\"), exports);\n__exportStar(require(\"./src/enumnames\"), exports);\n__exportStar(require(\"./src/legacylogemitter\"), exports);\n__exportStar(require(\"./src/workerutils\"), exports);\n__exportStar(require(\"./src/translateplatform\"), exports);\n__exportStar(require(\"./src/extensions\"), exports);\nvar tracingmanager_1 = require(\"./src/tracingmanager\");\nObject.defineProperty(exports, \"TracingManager\", { enumerable: true, get: function () { return tracingmanager_1.TracingManager; } });\n__exportStar(require(\"./src/observablearray\"), exports);\n__exportStar(require(\"./src/cancellablewait\"), exports);\n__exportStar(require(\"./src/types\"), exports);\n__exportStar(require(\"./src/internaltypes\"), exports);\n__exportStar(require(\"./src/telemetry\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellableWait = void 0;\n/**\n * This class is a wrapper for a promise which waits for a timeout or abort on the signal.\n * The promise stored in the class can be obtained through getPromise function.\n * The constructor accepts the waitTime (in milliseconds) and an optional AbortSignal.\n * When the signal is aborted, the promise is rejected.\n * When the waitTime is met, the promise will be resolved.\n * The cancel function provides option to cancel the timeout and prevent rejection upon abort.\n * After cancel, once the reference to this object is removed then GarbageCollector will free the promise.\n *\n * Note: In signal abort cases the promise rejection doesn't return the signal reason.\n * Reasons:\n * 1. Even though AbortSignal.reason is introduced in node 17.2.0, the node version 18.12.1 still doesn't support plumbing of reason from AbortController to AbortSignal.\n * 2. AbortSignal.reason was introduced in chrome/edge -98, safari 15.4.\n * 3. Relying on the reason of AbortSignal for business logic will be erroneous.\n * 4. The previous implementation of setTimeoutPromise was providing a AbortError message created by our module, unit tests were passing because of this reason, this creates more confusion.\n */\nclass CancellableWait {\n constructor(waitTimeInMS, signal) {\n var _a;\n this.timerId = 0;\n this.timedOut = false;\n this.aborted = false;\n this.promise = new Promise((resolve, reject) => {\n this.promiseResolve = resolve;\n this.promiseReject = reject;\n });\n if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n // signal is already aborted, just reject the promise, nothing else required.\n // Note: If users attach the handlers to the promise after getting promise from getPromise() then catch/reject handler will get executed.\n this.aborted = true;\n this.promiseReject();\n }\n else {\n this.abortSignal = signal;\n this.onAbortFunc = this.onAbort.bind(this);\n (_a = this.abortSignal) === null || _a === void 0 ? void 0 : _a.addEventListener(\"abort\", this.onAbortFunc);\n this.timerId = window.setTimeout(this.onTimeout.bind(this), waitTimeInMS);\n }\n }\n /** Cancels the promise, the promise will never resolve or reject after this call.\n * If the promise needs to be rejected then perform abort on the signal passed in constructor instead of calling this function.\n * This is a no op function if promise was already resolved/rejected. */\n cancel() {\n var _a;\n (_a = this.abortSignal) === null || _a === void 0 ? void 0 : _a.removeEventListener(\"abort\", this.onAbortFunc);\n if (this.timerId) {\n window.clearTimeout(this.timerId);\n this.timerId = 0;\n }\n this.abortSignal = undefined;\n }\n /** Returns the actual promise which can be used in promise race or for adding .then/.catch handlers. */\n getPromise() {\n return this.promise;\n }\n /** Returns true if wait timedout and promise was resolved. */\n isTimedOut() {\n return this.timedOut;\n }\n /** Returns true if signal was aborted and promise was rejected.\n * Note: If cancel was invoked before signal abort, then this value will be false.\n */\n isAborted() {\n return this.aborted;\n }\n onAbort() {\n this.aborted = true;\n this.promiseReject();\n this.cancel();\n }\n onTimeout() {\n this.timedOut = true;\n this.promiseResolve();\n this.timerId = 0;\n this.cancel();\n }\n}\nexports.CancellableWait = CancellableWait;\n//# sourceMappingURL=cancellablewait.js.map","\"use strict\";\n// Constant enum values for certain names used by the RTC Utils:\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=enumnames.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EventEmitter = void 0;\n/**\n * Implements a custom event emitter pattern.\n * a. Provides option for adding and removing listeners for an event type.\n * b. Exposes function to emit events with variable argument.\n **/\nclass EventEmitter {\n constructor(emitSynchronously) {\n this.handlers = new Map();\n this.emitSynchronously = emitSynchronously;\n }\n /**\n * Adds a function for to be invoked for a particular event.\n * Any number of handlers can be registered for an event.\n * @param eventname - the event type for which the corresponding handler to be invoked.\n * @param handler - listener function to be invoked when the event is emitted.\n **/\n addListener(eventname, handler) {\n const handles = this.handlers.get(eventname);\n if (handles !== undefined) {\n handles.add(handler);\n }\n else {\n const newHandles = new Set();\n newHandles.add(handler);\n this.handlers.set(eventname, newHandles);\n }\n }\n /**\n * Removes an handler for a particular event.\n * @param eventname - the event type for which the corresponding handler has to be removed.\n * @param handler - listener function to be removed.\n * Note: Removes only on instance of the function in each call, if a function is added as listener for X times\n * then this function needs to be invoked X times to remove all instances.\n **/\n removeListener(eventname, handler) {\n let handles = this.handlers.get(eventname);\n handles === null || handles === void 0 ? void 0 : handles.delete(handler);\n }\n removeAllListenersOfEvent(eventname) {\n this.handlers.delete(eventname);\n }\n removeAllListeners() {\n this.handlers.clear();\n }\n hasListener(eventname) {\n const handles = this.handlers.get(eventname);\n return handles !== undefined && handles.size > 0;\n }\n /**\n * Emits an event. The corresponding listeners will be executed.\n * @param eventname - the event type.\n * @param args - variable number of args for this event. These parameters are passed to registered listeners.\n * Note: If there are no listener for input event type then this function is no op.\n **/\n emit(eventname, ...args) {\n try {\n let handles = this.handlers.get(eventname);\n if (handles) {\n for (const handler of handles) {\n if (this.emitSynchronously) {\n handler(...args);\n }\n else {\n window.setTimeout(handler, 0, ...args);\n }\n }\n }\n }\n catch (err) {\n //Can't send this log to UI due to circular calls emit->Log.i->emit\n console.log(\"Exception in emit: \" + err);\n }\n }\n}\nexports.EventEmitter = EventEmitter;\n//# sourceMappingURL=eventemitter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=extensions.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\n// generated by genversion\nexports.version = '0.66.9';\n//# sourceMappingURL=genversion.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\n// This file contains the interfaces used by the GameStream typescript libraries which are not exposed from library.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GS_CodecError_EventDef = exports.GS_PropertyChange_EventDef = exports.GS_HttpCallResultDef = exports.GS_WsCallResultDef = exports.GS_Sleep_EventDef = exports.GS_ConnectivityCheckDef = exports.GS_ClientMetricEventDef = exports.GS_ExceptionInfoDef = exports.GS_DebugInfoDef = exports.GS_SystemAPICallResultDef = exports.GS_FeatureDef = exports.TelemetryEventBase = void 0;\n/////// Event Type Declarations ////////\nconst GSEventTypes = {\n GridServer_GameLaunch_Request: {\n name: \"GridServer_GameLaunch_Request\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_Feature: {\n name: \"GS_Feature\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_SystemAPICallResult: {\n name: \"GS_SystemAPICallResult\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_DebugInfo: {\n name: \"GS_DebugInfo\",\n gdprLevel: \"technical\" /* GdprLevel.Technical */\n },\n GS_ExceptionInfo: {\n name: \"GS_ExceptionInfo\",\n gdprLevel: \"technical\" /* GdprLevel.Technical */\n },\n GS_ClientMetricEvent: {\n name: \"GS_ClientMetricEvent\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_ConnectivityCheck: {\n name: \"GS_ConnectivityCheck\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_Sleep_Event: {\n name: \"GS_Sleep_Event\",\n gdprLevel: \"technical\" /* GdprLevel.Technical */\n },\n GS_WsCallResult: {\n name: \"GS_WsCallResult\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_HttpCallResult: {\n name: \"GS_HttpCallResult\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_PropertyChange_Event: {\n name: \"GS_PropertyChange_Event\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n },\n GS_CodecError_Event: {\n name: \"GS_CodecError_Event\",\n gdprLevel: \"functional\" /* GdprLevel.Functional */\n }\n};\nclass TelemetryEventBase {\n constructor(info) {\n this.name = \"\";\n this.gdprLevel = \"behavioral\" /* GdprLevel.Behavioral */;\n this.parameters = info;\n this.ts = new Date().toISOString();\n }\n}\nexports.TelemetryEventBase = TelemetryEventBase;\nclass GS_FeatureDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_Feature.name;\n this.gdprLevel = GSEventTypes.GS_Feature.gdprLevel;\n }\n}\nexports.GS_FeatureDef = GS_FeatureDef;\nclass GS_SystemAPICallResultDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_SystemAPICallResult.name;\n this.gdprLevel = GSEventTypes.GS_SystemAPICallResult.gdprLevel;\n }\n}\nexports.GS_SystemAPICallResultDef = GS_SystemAPICallResultDef;\nclass GS_DebugInfoDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_DebugInfo.name;\n this.gdprLevel = GSEventTypes.GS_DebugInfo.gdprLevel;\n }\n}\nexports.GS_DebugInfoDef = GS_DebugInfoDef;\nclass GS_ExceptionInfoDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_ExceptionInfo.name;\n this.gdprLevel = GSEventTypes.GS_ExceptionInfo.gdprLevel;\n }\n}\nexports.GS_ExceptionInfoDef = GS_ExceptionInfoDef;\nclass GS_ClientMetricEventDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_ClientMetricEvent.name;\n this.gdprLevel = GSEventTypes.GS_ClientMetricEvent.gdprLevel;\n }\n}\nexports.GS_ClientMetricEventDef = GS_ClientMetricEventDef;\nclass GS_ConnectivityCheckDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_ConnectivityCheck.name;\n this.gdprLevel = GSEventTypes.GS_ConnectivityCheck.gdprLevel;\n }\n}\nexports.GS_ConnectivityCheckDef = GS_ConnectivityCheckDef;\nclass GS_Sleep_EventDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_Sleep_Event.name;\n this.gdprLevel = GSEventTypes.GS_Sleep_Event.gdprLevel;\n }\n}\nexports.GS_Sleep_EventDef = GS_Sleep_EventDef;\nclass GS_WsCallResultDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_WsCallResult.name;\n this.gdprLevel = GSEventTypes.GS_WsCallResult.gdprLevel;\n }\n}\nexports.GS_WsCallResultDef = GS_WsCallResultDef;\nclass GS_HttpCallResultDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_HttpCallResult.name;\n this.gdprLevel = GSEventTypes.GS_HttpCallResult.gdprLevel;\n }\n}\nexports.GS_HttpCallResultDef = GS_HttpCallResultDef;\nclass GS_PropertyChange_EventDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_PropertyChange_Event.name;\n this.gdprLevel = GSEventTypes.GS_PropertyChange_Event.gdprLevel;\n }\n}\nexports.GS_PropertyChange_EventDef = GS_PropertyChange_EventDef;\nclass GS_CodecError_EventDef extends TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = GSEventTypes.GS_CodecError_Event.name;\n this.gdprLevel = GSEventTypes.GS_CodecError_Event.gdprLevel;\n }\n}\nexports.GS_CodecError_EventDef = GS_CodecError_EventDef;\n//#endregion\n//# sourceMappingURL=internaltypes.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LegacyLogEmitter = void 0;\nconst eventemitter_1 = require(\"./eventemitter\");\nclass LegacyLogEmitter extends eventemitter_1.EventEmitter {\n constructor(logEventName, emitSynchronously) {\n super(emitSynchronously);\n this.logQueue = [];\n this.logEventName = logEventName;\n }\n onLogEvent(logData) {\n // Convert the new LogData structure to legacy LogEvent for backward compatibility with 1.0 libraries.\n const logEvent = {\n logModule: \"R\",\n timeStamp: logData.timestamp,\n logLevel: logData.level,\n logtag: logData.tag,\n logstr: logData.message\n };\n if (this.hasListener(this.logEventName)) {\n this.emit(this.logEventName, logEvent);\n }\n else {\n this.logQueue.push(logEvent);\n }\n }\n addListener(eventname, handler) {\n super.addListener(eventname, handler);\n if (eventname == this.logEventName && this.logQueue.length > 0) {\n for (const logEvent of this.logQueue) {\n this.emit(this.logEventName, logEvent);\n }\n this.logQueue = [];\n }\n }\n}\nexports.LegacyLogEmitter = LegacyLogEmitter;\n//# sourceMappingURL=legacylogemitter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerLogCallback = exports.Log = void 0;\nconst settings_1 = require(\"./settings\");\nconst core_1 = require(\"@gamestream/core\");\n// Singleton LogImpl instance. All users of LogImpl should use this instead.\nexports.Log = new core_1.LogImpl(\"R\", {\n enable: settings_1.RtcUtilsSettings.loggingEnabled,\n enableConsoleLogging: settings_1.RtcUtilsSettings.consoleLoggingEnabled\n});\n/**\n * Registers a callback to deliver the log messages.\n * This API should be invoked before executing any functions of SessionControl/StreamKit library.\n * Clients can invoke registerLogCallback() to clear the registered callback(If needed).\n * @param callback - function to be executed to deliver log.\n */\nfunction registerLogCallback(callback) {\n exports.Log.setLogCallback(callback);\n}\nexports.registerLogCallback = registerLogCallback;\n//# sourceMappingURL=logger.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObservableArray = void 0;\n/**\n * This class is an extension of Javascript's Array class.\n * Provides option to listen to the execution of selected Array functions.\n *\n * The implementation supports single callback and not event listeners.\n * Users can set the callback for \"push\" function by invoking setCallback(\"push\", callbackFunction),\n * after push execution of the array the callback will be executed in the same context.\n * Callback can be reset by invoking setCallback(\"push\", undefined)\n *\n * Right now only \"push\" function is supported, based on the need other functions can be supported.\n * Note: the callbacks are executed only for push function execution and not for other array insert functions like unshift.\n */\nclass ObservableArray extends Array {\n constructor() {\n super();\n this.push = this.customPush;\n }\n /** Sets the callback for an array action like \"push\".\n * passing undefined in callback will result in this function behaving like removeCallback */\n setCallback(action, callback) {\n this.pushCallback = callback;\n }\n /** removes all the elements in the array. */\n clear() {\n this.splice(0, this.length);\n }\n customPush(...args) {\n let retValue = Array.prototype.push.apply(this, args);\n if (this.pushCallback) {\n this.pushCallback();\n }\n return retValue;\n }\n}\nexports.ObservableArray = ObservableArray;\n//# sourceMappingURL=observablearray.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AddPlatformTelemetry = exports.getPlatformDetails = void 0;\nconst logger_1 = require(\"./logger\");\nconst workerutils_1 = require(\"./workerutils\");\nconst LOGTAG = \"platform\";\nfunction getDeviceOS(platformName) {\n let os = undefined;\n switch (platformName) {\n case \"ChromeOS\" /* PlatformName.CHROME_OS */:\n os = \"CHROMEOS\" /* DeviceOS.CHROMEOS */;\n break;\n case \"Windows\" /* PlatformName.WINDOWS */:\n os = \"WINDOWS\" /* DeviceOS.WINDOWS */;\n break;\n case \"macOS\" /* PlatformName.MAC */:\n os = \"MACOS\" /* DeviceOS.MACOS */;\n break;\n case \"Linux\" /* PlatformName.LINUX */:\n os = \"LINUX\" /* DeviceOS.LINUX */;\n break;\n case \"iOS\" /* PlatformName.IOS */:\n os = \"IOS\" /* DeviceOS.IOS */;\n break;\n case \"iPadOS\" /* PlatformName.IPADOS */:\n os = \"IPADOS\" /* DeviceOS.IPADOS */;\n break;\n case \"Tizen\" /* PlatformName.TIZEN */:\n os = \"TIZEN\" /* DeviceOS.TIZEN */;\n break;\n case \"WebOS\" /* PlatformName.WEBOS */:\n os = \"WEBOS\" /* DeviceOS.WEBOS */;\n break;\n case \"Android\" /* PlatformName.ANDROID */:\n os = \"ANDROID\" /* DeviceOS.ANDROID */;\n break;\n case \"Xbox\" /* PlatformName.XBOX */:\n os = \"XBOX\" /* DeviceOS.XBOX */;\n break;\n case \"SteamOS\" /* PlatformName.STEAMOS */:\n os = \"STEAMOS\" /* DeviceOS.STEAMOS */;\n break;\n case \"ccOS\" /* PlatformName.CCOS */:\n os = \"CCOS\" /* DeviceOS.CCOS */;\n break;\n }\n // @todo Fix for platforms: \"SHIELD\", \"TVOS\"\n return os;\n}\nfunction getDeviceType(platformName, deviceModel) {\n switch (deviceModel) {\n case \"STEAMDECK\" /* DeviceModel.STEAMDECK */:\n return \"CONSOLE\" /* DeviceType.CONSOLE */;\n default:\n break;\n }\n switch (platformName) {\n case \"iOS\" /* PlatformName.IOS */:\n return \"PHONE\" /* DeviceType.PHONE */;\n case \"iPadOS\" /* PlatformName.IPADOS */:\n return \"TABLET\" /* DeviceType.TABLET */;\n case \"Xbox\" /* PlatformName.XBOX */:\n return \"CONSOLE\" /* DeviceType.CONSOLE */;\n case \"WebOS\" /* PlatformName.WEBOS */:\n case \"Tizen\" /* PlatformName.TIZEN */: // can we have phones too ?\n return \"TV\" /* DeviceType.TV */;\n default:\n return \"DESKTOP\" /* DeviceType.DESKTOP */;\n }\n // @todo Fix for all device types: \"DESKTOP\", \"LAPTOP\", \"TV\", \"PHONE\", \"TABLET\"\n}\nconst UNKNOWN_VERSION = \"0\";\nconst INSTANT_TIMEOUT = 0;\nconst FALLBACK_TIMEOUT = 150;\nconst LONG_FALLBACK_TIMEOUT = FALLBACK_TIMEOUT * 2;\nconst MAX_VOICE_CHECK_TOTAL_TIME = 600;\nconst INVALID_TIMER_ID = 0;\n// A class to try to detect the browser, operating system, device type, device vendor and certain version information.\n// Much of the code is asynchronous, either intrinsically or due to running in timer callbacks.\n// This class gets instantiated early on, but some clients run a lot of code on the main thread during their first\n// initialization. Ensure that any timers with important timeouts are started after that 'heavy' initialization,\n// otherwise the timeouts will always be exceeded prior to any work being able to be executed.\nclass Platform {\n constructor() {\n this.start = 0;\n this.finish = 0;\n this.voiceIsChromeOS = false;\n this.voiceIsChrome = false;\n this.voiceIsFirefox = false;\n this.voiceIsFirefoxAndroid = false;\n this.voiceIsAndroid = false;\n this.voiceIsMicrosoft = false;\n this.voiceIsApple = false;\n this.voiceIsEdge = false;\n this.voiceIsWindows = false;\n this.voiceIsAppleEllen = true;\n this.voiceWasKnown = false;\n this.isBrowserEdge = false;\n this.isBrowserEdgeLegacy = false;\n this.isBrowserEdgeiOS = false;\n this.isBrowserSafari = false;\n this.isBrowserChrome = false;\n this.isBrowserChromeiOS = false;\n this.isBrowserNetscape = false;\n this.isBrowserFirefoxiOS = false;\n this.isBrowserFirefoxTV = false;\n this.isBrowserOpera = false;\n this.isBrowserOperaiOS = false;\n this.isBrowserOperaTouch = false;\n this.isBrowserBrave = false;\n this.isBrowserYandex = false;\n this.isBrowserSamsungChromium = false;\n this.isBrowserReactBased = false;\n this.isPlatformMacIntel = false;\n this.isPlatformiPhone = false;\n this.isPlatformWin = false;\n this.isPlatformiPad = false;\n this.isPlatformLinux = false;\n this.isPlatformFreeBsdX86 = false;\n this.isPlatAndroid = false;\n this.isPlatWebOS = false;\n this.isPlatTizen = false;\n this.isPlatCcOS = false;\n this.isPluginChromeNative = false;\n this.isPluginChromePDF = false;\n this.isPluginChromiumPDF = false;\n this.isPluginEdgePDF = false;\n this.isPluginSamsungHealth = false;\n this.isBrandChrome = false;\n this.isBrandEdge = false;\n this.isBrandOpera = false;\n this.isBrandYandex = false;\n this.isBrandChromium = false;\n this.isBrandWebview = false;\n this.isBrandUnknown = false;\n this.isMobileUAD = false;\n this.isMobileHE = false;\n this.isMobileUAD_HE = false;\n this.isMobileNavigator = false;\n this.isGLXbox = false;\n this.isGLXboxSeries = false;\n this.isGLSteamDeck = false;\n this.isHEModelXbox = false;\n this.isHEModelFireTV = false;\n this.isHEModelBraviaTV = false;\n this.isHEModelChromecastTV = false;\n this.isHEModelShieldTV = false;\n this.isHEModelMiTV = false;\n this.isHEModelTVision = false;\n this.isHEPlatformWindows = false;\n this.isHEPlatformMac = false;\n this.isHEPlatformChromeOS = false;\n this.isHEPlatformChromiumOS = false;\n this.isHEPlatformAndroid = false;\n this.isHEPlatformLinux = false;\n this.isHEPlatformOverridden = false;\n this.isHEKnownTVDevice = false;\n this.isKnownTVDeviceUA = false;\n this.supportsAvif = false;\n this.supportsBigInt = false;\n this.supportsBigInt64Array = false;\n // private supportsCorrect8bitCollationOrderName = false;\n this.supportsDecodingInfo = false;\n this.supportsPerformanceNavigationTiming = false;\n this.supportsWebAssemblyExceptions = false;\n this.supportsBroadcastChannel = false;\n this.supportsGpuBuffer = false;\n this.supportsMediaRecorder = false;\n this.supportsDeviceLightEvent = false;\n this.supportsAbortSignalAbort = false;\n this.supportsBeforeInputEvent = false;\n this.supportsIntlDisplayNames = false;\n this.supportsIntlCollationOptions = false;\n this.supportsApplePay = false;\n this.supportsCredential = false;\n this.supportsBrowserRuntime = false;\n this.supportsSharedWorker = false;\n this.supportsCSSCounterStyleRule = false;\n this.supportsArrayBufferTransfer = false;\n this.supportsLargestContentfulPaint = false;\n this.supportsCSSregisterProperty = false;\n this.supportsGlobalAutofocus = false;\n this.supportsContactsPicker = false;\n this.supportsTrustedHtml = false;\n this.supportsWakeLock = false;\n this.supportsPromiseAny = false;\n this.supportsFileSystemHandle = false;\n this.supportsAtomicsWaitAsync = false;\n this.supportsCSSaspectRatio = false;\n this.supportsReadableStreamBYOBReader = false;\n this.supportsOverflowClip = false;\n this.supportsWebkitSupportsPresentationMode = false;\n this.supportsIsComposing = false;\n this.mediaPrimaryHover = false;\n //private mediaAnyHover = false;\n this.mediaPrimaryNonHover = false;\n //private mediaAnyNonHover = false;\n this.mediaPrimaryCoarsePointer = false;\n //private mediaAnyPointer = false;\n this.mediaPrimaryFinePointer = false;\n //private mediaAnyFinePointer = false;\n this.hasGL = false;\n this.hasUaData = false;\n this.isUaDataSpoofed = false;\n this.useUaData = false;\n this.ignoreUaData = false;\n this.wereHeChecksLate = false;\n this.performedChecks = false;\n this.performedVoiceChecks = false;\n this.performedGlChecks = false;\n this.performedHEChecks = false;\n this.performedNavigatorPlatformChecks = false;\n this.voiceCheckTimer = INVALID_TIMER_ID;\n this.glCheckTimer = INVALID_TIMER_ID;\n this.heCheckTimer = INVALID_TIMER_ID;\n this.smartTvCheckTimer = INVALID_TIMER_ID;\n this.platCheckTimer = INVALID_TIMER_ID;\n this.glCheckFallbackTime = 0;\n this.platCheckFallbackTime = 0;\n this.gpuDetail = \"\";\n this.platformDetails = {\n os: \"Unknown\" /* PlatformName.UNKNOWN */,\n osRawVer: UNKNOWN_VERSION,\n osVer: UNKNOWN_VERSION,\n browser: \"Unknown\" /* BrowserName.UNKNOWN */,\n browserVer: UNKNOWN_VERSION,\n browserFullVer: UNKNOWN_VERSION,\n browserBestVer: UNKNOWN_VERSION,\n forging: true,\n spoofing: true,\n confidence: 0,\n totalTime: 0,\n vendor: \"\" /* DeviceVendor.UNKNOWN */,\n gpuDetail: \"\"\n };\n this.queuedTelemetry = [];\n this.chromeRe = /Chrome\\/(([0-9]+)\\.[0-9]+\\.[0-9]+\\.[0-9]+)/;\n }\n detectPlatformDetails() {\n if (!this.detector) {\n this.detector = this.getDetectorPromise();\n }\n return this.detector;\n }\n getDetectorPromise() {\n this.start = performance.now();\n return new Promise((resolve, reject) => {\n if (this.performedChecks) {\n resolve(this.platformDetails);\n return;\n }\n this.beginChecking().then(() => {\n this.performedChecks = true;\n resolve(this.platformDetails);\n });\n });\n }\n // Need to handle four cases:\n // 1. No speechSynthesis object at al, so just check immediately (voice check is no-op)\n // 2. No onvoiceschanged event, so just check immediately\n // 3. onvoiceschanged event but voices already changed, so process immediately\n // 4. onvoiceschanged event and voices not changed yet, so wait for event to fire\n //\n // However, browsers can block detection of voices but leave the onvoiceschanged event present.\n // The event will then never fire.\n // This could conceivably happen if a user denies permission for voice detection.\n //\n // To accommodate that, a setTimeout() call is made to perform the checking, as well as the event handler.\n // The first time the checks are run, resolve() will be called and 'finish' the Promise.\n // Subsequent attempts to run the checks will return early, and not update the results.\n // This avoids running the checking code multiple times.\n //\n // The checks will only be run if there are voices to check (unless the overall voice checking\n // timeout has passed). If there aren't and the overall voice checking timeout hasn't been reached,\n // a new timeout callback is scheduled, and the voiceschanged event continues to be listened for.\n // This means that multiple events or timeout callbacks may be needed before the voice checking completes.\n checkVoices() {\n const synthesis = window[\"speechSynthesis\"];\n if (!synthesis) {\n // No speech synthesis, so no voices\n return new Promise(resolve => {\n resolve();\n });\n }\n else {\n const getVoices = synthesis[\"getVoices\"];\n let curVoices = (getVoices === null || getVoices === void 0 ? void 0 : getVoices.call(synthesis)) || [];\n return new Promise((resolve, reject) => {\n if (!getVoices || curVoices.length) {\n this.checkVoicesInternal(curVoices);\n resolve();\n }\n else {\n let startedVoiceChecking = 0;\n const checkVoicesLambda = () => {\n curVoices = getVoices.call(synthesis);\n const now = performance.now();\n // If there are no voices, and the overall timeout hasn't been reached (or even started),\n // wait some more and try again.\n if (curVoices.length == 0 &&\n (startedVoiceChecking == 0 ||\n now - startedVoiceChecking < MAX_VOICE_CHECK_TOTAL_TIME)) {\n // Don't use empty voice lists for checking. Wait for another event callback,\n // or for the timer check to fire again.\n // Voices should be available in all normal cases and should appear within a\n // few hundred milliseconds at worst; the MAX_VOICE_CHECK_TOTAL_TIME is the\n // maximum total delay time that can be introduced, but the delay won't be\n // that large unless someone has spoofed the speech synthesis voices to be empty.\n // Reset the fallback timeout.\n if (this.voiceCheckTimer) {\n clearTimeout(this.voiceCheckTimer);\n }\n this.voiceCheckTimer = window.setTimeout(checkVoicesLambda, FALLBACK_TIMEOUT);\n return;\n }\n // Clear any pending fallback/timer check.\n if (this.voiceCheckTimer) {\n clearTimeout(this.voiceCheckTimer);\n this.voiceCheckTimer = INVALID_TIMER_ID;\n }\n // Check the current set of voices.\n this.checkVoicesInternal(curVoices);\n resolve();\n };\n // Listen for voiceschanged events.\n // These can (potentially) fire prior to the 'instant' timeout callback being executed,\n // and thus in theory can run the voice checking sooner than would otherwise happen.\n if (synthesis[\"onvoiceschanged\"] !== undefined) {\n synthesis[\"onvoiceschanged\"] = checkVoicesLambda;\n }\n // Run the remainder of the code fully asynchronously.\n // This firstly allows time for the voices to be loaded, and secondly allows\n // the timeouts to be relative to when there's actual processing time available.\n // That is, don't start the timeouts until after the first 'heavy' initialization\n // some clients do.\n this.runAfterStartup(() => {\n // Short-circuit the fallback timeout if voice information has become available.\n // Otherwise, it takes at least FALLBACK_TIMEOUT milliseconds (or another\n // voiceschanged event) before the new voices are checked.\n curVoices = getVoices.call(synthesis);\n if (curVoices.length) {\n checkVoicesLambda();\n return;\n }\n this.voiceCheckTimer = window.setTimeout(checkVoicesLambda, FALLBACK_TIMEOUT);\n startedVoiceChecking = performance.now();\n });\n }\n });\n }\n }\n checkVoicesInternal(voices) {\n if (this.performedVoiceChecks) {\n return;\n }\n for (const voice of voices) {\n const voiceID = voice[\"voiceURI\"] || \"\";\n // First, check exclusive patterns.\n if (voiceID.startsWith(\"Chrome OS\")) {\n this.voiceIsChromeOS = true;\n }\n else if (voiceID.startsWith(\"Google\")) {\n this.voiceIsChrome = true;\n }\n else if (voiceID.includes(\"moz-tts\")) {\n if (voiceID.includes(\"android\")) {\n this.voiceIsFirefoxAndroid = true;\n this.isPlatAndroid = true;\n }\n this.voiceIsFirefox = true;\n }\n else if (voiceID == \"English United States\") {\n this.voiceIsAndroid = true;\n }\n // Now check for patterns that can be shared with the above.\n if (voiceID.includes(\"Microsoft\")) {\n this.voiceIsMicrosoft = true;\n // NB - Lots of Windows-based browsers use Microsoft voices\n // However, only Edge has the Microsoft Online voices\n if (voiceID.includes(\"Online\")) {\n this.voiceIsEdge = true;\n }\n else {\n this.voiceIsWindows = true;\n }\n }\n else if (voiceID.includes(\"com.apple\")) {\n this.voiceIsApple = true;\n if (voiceID.includes(\"Ellen\")) {\n this.voiceIsAppleEllen = true;\n }\n }\n else if (voiceID == \"Zuzana\") {\n // Apple voices on macOS running Chrome don't start with 'com.apple'\n // Luckily, 'Zuzana' is always present AFAICS.\n this.voiceIsApple = true;\n }\n }\n this.voiceWasKnown =\n this.voiceIsApple ||\n this.voiceIsMicrosoft ||\n this.voiceIsChrome ||\n this.voiceIsChromeOS ||\n this.voiceIsFirefox ||\n this.voiceIsAndroid;\n this.performedVoiceChecks = true;\n }\n async beginChecking() {\n // Perform checks\n await Promise\n .all([\n this.checkGlDebugInfo(),\n this.checkHighEntropy(),\n this.checkAvif(),\n this.checkVoices(),\n this.checkUserAgentVersion(),\n this.checkWindowProperties(),\n this.checkWebOsBrowserVersion(),\n this.checkPlatform(),\n this.checkApplePay(),\n this.checkPlugins(),\n this.checkMobile(),\n this.checkMediaQueries(),\n this.checkTvDevices()\n ])\n .then(() => {\n this.validateChecks();\n this.createPlatformDetails();\n });\n }\n checkWindowProperties() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;\n const w = window;\n const ownProp = w[\"hasOwnProperty\"];\n const navi = w[\"navigator\"];\n // Browser checks\n if (ownProp.call(w, \"MSMediaKeys\")) {\n this.isBrowserEdgeLegacy = true;\n }\n else if (ownProp.call(w, \"_firefoxTV_cachedScrollPosition\")) {\n // Firefox on FireTV has _firefoxTV_cachedScrollPosition, but frequently with value undefined\n this.isBrowserFirefoxTV = true;\n }\n else if (w[\"__edgeActiveElement\"] !== undefined ||\n w[\"__edgeTrackingPreventionStatistics\"]) {\n // These are injected by Edge on iOS in different circumstances\n this.isBrowserEdgeiOS = true;\n }\n else if (w[\"safari\"]) {\n this.isBrowserSafari = true;\n }\n else if (w[\"opr\"]) {\n this.isBrowserOpera = true;\n }\n else if (w[\"oprt\"]) {\n // oprt is from iOS\n this.isBrowserOperaiOS = true;\n }\n else if (navi[\"brave\"]) {\n this.isBrowserBrave = true;\n }\n else if (w[\"OperaTouch\"] !== undefined || w[\"ethereum\"]) {\n // We know we haven't injected MetaMask's crypto wallet, so if\n // window.ethereum is present this must be Opera on mobile.\n // NB window.ethereum is also present in some Brave browsers, so check those before this.\n // OperaTouch is from some versions on Android\n this.isBrowserOperaTouch = true;\n this.isPlatAndroid = true;\n }\n else if (w[\"yandex\"]) {\n this.isBrowserYandex = true;\n }\n else if (w[\"QuickAccess\"]) {\n this.isBrowserSamsungChromium = true;\n }\n else if (w[\"chrome\"]) {\n // Lots of Chromium-based browsers have this property; check them before this!\n this.isBrowserChrome = true;\n }\n else if (w[\"netscape\"]) {\n this.isBrowserNetscape = true;\n }\n else if (w[\"__firefox__\"]) {\n // window.__firefox__ is injected by older Firefox on iOS.\n // Newer Firefox on iOS runs that script in a different \"content world\".\n // TODO Find a new way to detect Firefox on iOS\n this.isBrowserFirefoxiOS = true;\n }\n else if (w[\"__gCrWeb\"]) {\n // Specially injected by Chrome on iOS platforms\n this.isBrowserChromeiOS = true;\n }\n else if (w[\"ReactNativeWebView\"]) {\n this.isBrowserReactBased = true;\n }\n // Special platform checks\n if (w[\"contacts\"] !== undefined || w[\"ContactsManager\"] !== undefined) {\n this.isPlatAndroid = true;\n }\n else if (ownProp.call(w, \"onwebOSAccessibilityAlertDone\") ||\n w[\"webOSSystem\"] ||\n ownProp.call(w, \"onwebosaccessibilityalertdone\")) {\n this.isPlatWebOS = true;\n }\n else if (w[\"tizen\"] ||\n w[\"TizenTVApiInfo\"] ||\n w[\"addEdgeEffectONSCROLLTizenUIF\"] ||\n w[\"tizentvwasm\"]) {\n this.isPlatTizen = true;\n }\n else if (w[\"HardkeyEvent\"]) {\n this.isPlatCcOS = true;\n }\n // Feature checks, for checking rendering engine version based on its capabilities.\n const intl = w[\"Intl\"];\n // On iOS, the rendering engine (WebKit) is only updated when the OS updates, so these\n // checks can proxy for the OS version.\n if ((_a = navi[\"mediaCapabilities\"]) === null || _a === void 0 ? void 0 : _a[\"decodingInfo\"]) {\n this.supportsDecodingInfo = true;\n }\n if (w[\"BigInt\"]) {\n this.supportsBigInt = true;\n if (w[\"BigInt64Array\"]) {\n this.supportsBigInt64Array = true;\n }\n }\n if (w[\"PerformanceNavigationTiming\"]) {\n this.supportsPerformanceNavigationTiming = true;\n }\n if (w[\"WebAssembly\"] && w[\"WebAssembly\"][\"Exception\"]) {\n this.supportsWebAssemblyExceptions = true;\n }\n if (w[\"BroadcastChannel\"]) {\n this.supportsBroadcastChannel = true;\n }\n if (w[\"GPUBuffer\"]) {\n this.supportsGpuBuffer = true;\n }\n if (w[\"SharedWorker\"]) {\n this.supportsSharedWorker = true;\n }\n if (w[\"MediaRecorder\"]) {\n this.supportsMediaRecorder = true;\n }\n if (w[\"CSSCounterStyleRule\"]) {\n this.supportsCSSCounterStyleRule = true;\n }\n const arrayBufferProto = (_b = w[\"ArrayBuffer\"]) === null || _b === void 0 ? void 0 : _b.prototype;\n if (arrayBufferProto === null || arrayBufferProto === void 0 ? void 0 : arrayBufferProto.hasOwnProperty(\"transfer\")) {\n this.supportsArrayBufferTransfer = true;\n }\n // Firefox version updates tend to improve/modify JavaScript in some fashion.\n if (ownProp.call(w, \"ondevicelight\")) {\n this.supportsDeviceLightEvent = true;\n }\n if ((_c = w[\"AbortSignal\"]) === null || _c === void 0 ? void 0 : _c[\"abort\"]) {\n this.supportsAbortSignalAbort = true;\n }\n if (ownProp.call(w, \"onbeforeinput\")) {\n this.supportsBeforeInputEvent = true;\n }\n if (intl) {\n if (intl[\"DisplayNames\"]) {\n this.supportsIntlDisplayNames = true;\n }\n const col = new intl[\"Collator\"](\"zh\", { collation: \"pinyin\" });\n this.supportsIntlCollationOptions = ((_d = col.resolvedOptions()) === null || _d === void 0 ? void 0 : _d.collation) == \"pinyin\";\n }\n // Features that can be useful to distinguish different browsers.\n if (w[\"Credential\"]) {\n this.supportsCredential = true;\n }\n if ((_e = w[\"browser\"]) === null || _e === void 0 ? void 0 : _e[\"runtime\"]) {\n this.supportsBrowserRuntime = true;\n }\n // Chrome version detection for older Chrome versions, where\n // User Agent Client Hints are not supported, requires feature detection.\n if (w[\"LargestContentfulPaint\"]) {\n this.supportsLargestContentfulPaint = true;\n }\n if ((_f = w[\"CSS\"]) === null || _f === void 0 ? void 0 : _f[\"registerProperty\"]) {\n this.supportsCSSregisterProperty = true;\n }\n const elementProto = (_g = w[\"HTMLElement\"]) === null || _g === void 0 ? void 0 : _g.prototype;\n if (elementProto === null || elementProto === void 0 ? void 0 : elementProto.hasOwnProperty(\"autofocus\")) {\n this.supportsGlobalAutofocus = true;\n }\n if (navi[\"contacts\"]) {\n this.supportsContactsPicker = true;\n }\n if (w[\"TrustedHTML\"]) {\n this.supportsTrustedHtml = true;\n }\n if (w[\"WakeLock\"]) {\n this.supportsWakeLock = true;\n }\n if ((_h = w[\"Promise\"]) === null || _h === void 0 ? void 0 : _h[\"any\"]) {\n this.supportsPromiseAny = true;\n }\n if (w[\"FileSystemHandle\"]) {\n this.supportsFileSystemHandle = true;\n }\n if ((_j = w[\"Atomics\"]) === null || _j === void 0 ? void 0 : _j[\"waitAsync\"]) {\n this.supportsAtomicsWaitAsync = true;\n }\n if ((_l = (_k = w[\"CSS\"]) === null || _k === void 0 ? void 0 : _k[\"supports\"]) === null || _l === void 0 ? void 0 : _l.call(_k, \"aspect-ratio: auto\")) {\n this.supportsCSSaspectRatio = true;\n }\n if (w[\"ReadableStreamBYOBReader\"]) {\n this.supportsReadableStreamBYOBReader = true;\n }\n if ((_o = (_m = w[\"CSS\"]) === null || _m === void 0 ? void 0 : _m[\"supports\"]) === null || _o === void 0 ? void 0 : _o.call(_m, \"overflow: clip\")) {\n this.supportsOverflowClip = true;\n }\n // Detection of Safari on macOS features\n const inputEventProto = (_p = w[\"InputEvent\"]) === null || _p === void 0 ? void 0 : _p.prototype;\n if (inputEventProto === null || inputEventProto === void 0 ? void 0 : inputEventProto.hasOwnProperty(\"isComposing\")) {\n this.supportsIsComposing = true;\n }\n // Detection of Vision Pro features\n //\n // Vision Pro is intentionally very similar to iPad.\n // WebKit does not provide any direct way to tell the two apart, however\n // there are a few capabilities iPads have that Vision Pros do not\n // (the reverse is generally not true, or at least is not easily detected).\n // Searching the WebKit codebase for PLATFORM(VISION) allows finding things\n // that are special cased for that platform.\n //\n // See https://github.com/WebKit/WebKit/blob/f82b26d2a0b7a540106b0bf407999ead4bba426c/Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml#L7377\n const videoElementProto = (_q = w[\"HTMLVideoElement\"]) === null || _q === void 0 ? void 0 : _q.prototype;\n this.supportsWebkitSupportsPresentationMode = videoElementProto === null || videoElementProto === void 0 ? void 0 : videoElementProto.hasOwnProperty(\"webkitSupportsPresentationMode\");\n }\n checkPlatform() {\n return new Promise((resolve, reject) => {\n const workerName = \"Plat\";\n const setPlatBasedFlags = (platInfo) => {\n if (this.performedNavigatorPlatformChecks) {\n return;\n }\n const platform = platInfo.platform;\n if (platform === \"MacIntel\") {\n this.isPlatformMacIntel = true;\n }\n else if (platform === \"iPhone\") {\n this.isPlatformiPhone = true;\n }\n else if (platform === \"Win32\") {\n this.isPlatformWin = true;\n }\n else if (platform === \"iPad\") {\n this.isPlatformiPad = true;\n }\n else if (platform === \"FreeBSD amd64\") {\n this.isPlatformFreeBsdX86 = true;\n }\n else if (platform === \"Windows\") {\n // Not used by major browsers, so likely a forged value\n this.isPlatformWin = true;\n this.isForged = true;\n }\n if (platform.startsWith(\"Linux\")) {\n this.isPlatformLinux = true;\n }\n this.performedNavigatorPlatformChecks = true;\n };\n let platCheckFallbackCompleted = false;\n const handlePlatInfo = (platInfo) => {\n if (this.platCheckTimer) {\n // Fallback initialized but not yet executed.\n clearTimeout(this.platCheckTimer);\n this.platCheckTimer = INVALID_TIMER_ID;\n }\n else if (platCheckFallbackCompleted) {\n // Fallback initialized, but timer is no longer set - ergo fallback has already run.\n // No point in handling this; the fallback timer has already fired, and will set flags itself.\n logger_1.Log.w(LOGTAG, `navigator.platform checks in Worker returned too late`);\n this.emitWorkerOverlongTelemetry(workerName, this.platCheckFallbackTime - performance.now());\n // No point in calling resolve() either; that will have been done by the fallback code.\n return;\n }\n else {\n // We've been called by the Worker code before the fallback had a chance to be initialized.\n // We *must* set this.performedNavigatorPlatformChecks in setPlatBasedFlags() to avoid the fallback being started.\n }\n setPlatBasedFlags(platInfo);\n resolve();\n };\n let platCheckWithWorker = false;\n let platCheckWithWorkerFailed = false;\n const handlePlatError = (error) => {\n if (typeof error == \"string\") {\n this.emitWorkerErrorStringTelemetry(workerName, error);\n }\n else if (\"data\" in error) {\n // MessageEvent. Message deserialization error on Worker instance in main thread.\n this.emitWorkerMessageErrorTelemetry(workerName, error);\n }\n else {\n // ErrorEvent. Either onerror in WorkerGlobalScope, or onerror on Worker instance in main thread.\n this.emitWorkerErrorTelemetry(workerName, error);\n }\n platCheckWithWorkerFailed = true;\n logger_1.Log.e(LOGTAG, `navigator.platform checks failed in Worker: ${error}`);\n };\n let timeoutDelay = INSTANT_TIMEOUT;\n let worker;\n try {\n platCheckWithWorker = true;\n worker = (0, workerutils_1.makeWorkerFromInterface)(NavigatorPlatformWorker, handlePlatInfo, handlePlatError);\n // Set the fallback timeout delay to be non-instant; this will call the fallback\n // processing after a short timeout in case the Worker doesn't work.\n timeoutDelay = FALLBACK_TIMEOUT;\n }\n catch (ex) {\n platCheckWithWorkerFailed = true;\n this.emitWorkerCreationErrorTelemetry(workerName, ex);\n logger_1.Log.w(LOGTAG, `Failed to read navigator.platform through Worker: ${ex}`);\n // The fallback code will execute, with INSTANT_TIMEOUT.\n }\n // Run the remainder of the code fully asynchronously.\n // The Worker will run in its separate thread (if available), and can run in parallel with the main\n // thread whilst that is executing the client's first initialization.\n // Use window.setTimeout() to run the rest of the code (that sets up the fallback timer) on the\n // next 'event cycle', which will be after the client's first initialization.\n // This ensures the fallback timeout is counted from when there's actual processing time available.\n this.runAfterStartup(() => {\n if (this.performedNavigatorPlatformChecks) {\n return;\n }\n // Use setTiemout to call the platform checking code asynchronously, both for fallback and for non-Worker.\n //\n // Note that a 0 delay to setTimeout() means \"immediately, after current event cycle\" - or, for us,\n // when the main thread becomes free. We want the GL checking to happen in 'dead time' - when the\n // main thread is otherwise blocked - rather than fully synchronously with the rest of the main thread.\n // That should reduce any delays caused by GL checking to the absolute minimum.\n // Using a timeout of 0 (INSTANT_TIMEOUT) will give a greater chance of that happening.\n //\n // Hence, always use setTimeout() - both for the fallback checks (in case the Worker fails) or for the\n // non-Worker case.\n this.platCheckTimer = window.setTimeout(() => {\n this.platCheckTimer = INVALID_TIMER_ID;\n this.platCheckFallbackTime = performance.now();\n if (platCheckWithWorkerFailed) {\n // Worker creation failed\n logger_1.Log.w(LOGTAG, \"navigator.platform checks with Worker failed\");\n }\n else if (platCheckWithWorker) {\n // Worker took too long\n logger_1.Log.w(LOGTAG, \"navigator.platform checks with Worker superseded by timeout\");\n this.emitWorkerTimeoutTelemetry(workerName);\n // Do *NOT* stop the worker here. Instead, allow it to complete and then raise\n // telemetry / log that fact.\n }\n else {\n // No Worker in use\n logger_1.Log.i(LOGTAG, `navigator.platform checks not using Worker`);\n this.emitWorkerUnusedTelemetry(workerName);\n }\n const platInfo = new NavigatorPlatformWorker().doWork();\n handlePlatInfo(platInfo);\n platCheckFallbackCompleted = true;\n }, timeoutDelay);\n });\n });\n }\n checkApplePay() {\n const w = window;\n const applePayWorks = !!(w[\"ApplePaySession\"] && w[\"ApplePaySession\"][\"canMakePayments\"]);\n if (applePayWorks) {\n // Apple Pay seems only to work in Safari, and some browsers that are very like Safari on iOS\n // (such as Cloudy, in newer versions).\n this.supportsApplePay = true;\n }\n }\n checkGlDebugInfo() {\n // Checking GL debug info can take 10s of milliseconds, due to the getContext() call.\n // If possible, run in a Worker (only if the system supports OffscreenCanvas) to take\n // advantage of multi-threading.\n // Otherwise, run in a setTimeout() call to reduce immediate overhead and potentially\n // allow concurrent waits/delays to overlap with the GL checking\n return new Promise((resolve, reject) => {\n const workerName = \"GL\";\n const setGlBasedFlags = (glDbgInfo) => {\n if (this.performedGlChecks) {\n return;\n }\n const renderer = glDbgInfo.rendererName;\n if (renderer.startsWith(\"ANGLE\")) {\n // Sample format: \"ANGLE (NVIDIA, NVIDIA RTX A3000 Laptop GPU (0x000024B8) Direct3D11 vs_5_0 ps_5_0, D3D11)\"\n let parts = renderer.split(\",\");\n if ((parts === null || parts === void 0 ? void 0 : parts.length) > 1) {\n this.gpuDetail = parts[1].trim();\n }\n }\n else {\n // Sample: iPhone shows \"Apple GPU\"\n this.gpuDetail = renderer;\n }\n const rendererLC = renderer.toLowerCase();\n if (renderer.includes(\"SraKmd\")) {\n // Both Xbox One X and Xbox Series X have this string in their renderers.\n this.isGLXbox = true;\n if (renderer.includes(\"SraKmd_arden\")) {\n this.isGLXboxSeries = true;\n }\n const matches = /D3D11-(\\d{2,}\\.\\d{1,}\\.\\d{5,}\\.\\d{4,})/.exec(renderer);\n if (matches && matches.length > 1) {\n this.osVersion = matches[1];\n }\n }\n else if (renderer.includes(\"AMD\") && rendererLC.includes(\"vangogh\")) {\n this.isGLSteamDeck = true;\n }\n // TODO - check for other GPUs (Mali, Adreno, AMD, etc.) and map to platforms?\n this.hasGL = glDbgInfo.present;\n this.performedGlChecks = true;\n };\n let glCheckFallbackCompleted = false;\n const handleGlInfo = (glDbgInfo) => {\n if (this.glCheckTimer) {\n // Fallback initialized but not yet executed.\n clearTimeout(this.glCheckTimer);\n this.glCheckTimer = INVALID_TIMER_ID;\n }\n else if (glCheckFallbackCompleted) {\n // Fallback initialized, but timer is no longer set - ergo fallback has already run.\n // No point in handling this; the fallback timer has already fired, and will set flags itself.\n logger_1.Log.w(LOGTAG, `GL checks in Worker returned too late`);\n this.emitWorkerOverlongTelemetry(workerName, this.glCheckFallbackTime - performance.now());\n // No point in calling resolve() either; that will have been done by the fallback code.\n return;\n }\n else {\n // We've been called by the Worker code before the fallback had a chance to be initialized.\n // We *must* set this.performedGlChecks in setGlBasedFlags() to avoid the fallback being started.\n }\n setGlBasedFlags(glDbgInfo);\n resolve();\n };\n let glCheckWithWorker = false;\n let glCheckWithWorkerFailed = false;\n const handleGlError = (error) => {\n if (typeof error == \"string\") {\n this.emitWorkerErrorStringTelemetry(workerName, error);\n }\n else if (\"data\" in error) {\n // MessageEvent. Message deserialization error on Worker instance in main thread.\n this.emitWorkerMessageErrorTelemetry(workerName, error);\n }\n else {\n // ErrorEvent. Either onerror in WorkerGlobalScope, or onerror on Worker instance in main thread.\n this.emitWorkerErrorTelemetry(workerName, error);\n }\n glCheckWithWorkerFailed = true;\n logger_1.Log.e(LOGTAG, `GL checks failed in Worker: ${error}`);\n };\n let timeoutDelay = INSTANT_TIMEOUT;\n let worker;\n try {\n if (self[\"OffscreenCanvas\"]) {\n glCheckWithWorker = true;\n worker = (0, workerutils_1.makeWorkerFromInterface)(GLWorker, handleGlInfo, handleGlError);\n // Set the fallback timeout delay to be non-instant; this will call the fallback\n // processing after a short timeout in case the Worker doesn't work.\n timeoutDelay = FALLBACK_TIMEOUT;\n }\n }\n catch (ex) {\n glCheckWithWorkerFailed = true;\n this.emitWorkerCreationErrorTelemetry(workerName, ex);\n logger_1.Log.w(LOGTAG, `Failed to read GL data through Worker: ${ex}`);\n // The fallback code will execute, with INSTANT_TIMEOUT.\n }\n // Run the remainder of the code fully asynchronously.\n // The Worker will run in its separate thread (if available), and can run in parallel with the main\n // thread whilst that is executing the client's first initialization.\n // Use window.setTimeout() to run the rest of the code (that sets up the fallback timer) on the\n // next 'event cycle', which will be after the client's first initialization.\n // This ensures the fallback timeout is counted from when there's actual processing time available.\n this.runAfterStartup(() => {\n if (this.performedGlChecks) {\n return;\n }\n // Use setTimeout to call the GL checking code asynchronously, both for fallback and for non-Worker.\n //\n // Note that a 0 delay to setTimeout() means \"immediately, after current event cycle\" - or, for us,\n // when the main thread becomes free. We want the GL checking to happen in 'dead time' - when the\n // main thread is otherwise blocked - rather than fully synchronously with the rest of the main thread.\n // That should reduce any delays caused by GL checking to the absolute minimum.\n // Using a timeout of 0 (INSTANT_TIMEOUT) will give a greater chance of that happening.\n //\n // Hence, always use setTimeout() - both for the fallback checks (in case the Worker fails) or for the\n // non-Worker case.\n this.glCheckTimer = window.setTimeout(() => {\n this.glCheckTimer = INVALID_TIMER_ID;\n this.glCheckFallbackTime = performance.now();\n if (glCheckWithWorkerFailed) {\n // Worker creation failed\n logger_1.Log.w(LOGTAG, \"GL checks with Worker failed\");\n }\n else if (glCheckWithWorker) {\n // Worker took too long\n logger_1.Log.w(LOGTAG, \"GL checks with Worker superseded by timeout\");\n this.emitWorkerTimeoutTelemetry(workerName);\n // Do *NOT* stop the worker here. Instead, allow it to complete and then raise\n // telemetry / log that fact.\n }\n else {\n // No Worker in use\n logger_1.Log.i(LOGTAG, `GL checks not using Worker`);\n this.emitWorkerUnusedTelemetry(workerName);\n }\n const glDbgInfo = new GLWorker().doWork();\n handleGlInfo(glDbgInfo);\n glCheckFallbackCompleted = true;\n }, timeoutDelay);\n });\n });\n }\n internalCheckUserAgentData(uad) {\n var _a;\n this.hasUaData = true;\n const isMobile = uad.mobile;\n if (isMobile) {\n this.isMobileUAD = true;\n }\n const brands = uad.brands || [];\n let unknownBrands = 0;\n for (const brand of brands) {\n const brandName = brand.brand;\n const brandVersion = brand.version;\n if (brandName === \"Google Chrome\") {\n this.isBrandChrome = true;\n this.browserVersion = brandVersion;\n }\n else if (brandName === \"Microsoft Edge\") {\n this.isBrandEdge = true;\n this.browserVersion = brandVersion;\n }\n else if (brandName === \"Opera\") {\n this.isBrandOpera = true;\n this.browserVersion = brandVersion;\n }\n else if (brandName === \"Yandex\") {\n this.isBrandYandex = true;\n this.browserVersion = brandVersion;\n }\n else if (brandName === \"Chromium\") {\n this.isBrandChromium = true;\n this.browserVersion = (_a = this.browserVersion) !== null && _a !== void 0 ? _a : brandVersion;\n this.chromiumVersion = brandVersion;\n }\n else if (brandName === \"Android WebView\") {\n this.isBrandWebview = true;\n this.browserVersion = brandVersion;\n }\n else {\n unknownBrands++;\n }\n }\n // Current expectation is for one arbitrary brand\n if (unknownBrands > 2) {\n this.isBrandUnknown = true;\n }\n }\n // Simple UA string based checks. However, using a sharedWorker to perform these checks, as it seems\n // that the UA string when accessed from within a shared worker is less likely to be spoofed.\n checkTvDevices() {\n return new Promise((resolve, reject) => {\n const setUABasedTVFlags = (smartTVInfo) => {\n if (smartTVInfo.isKnownTVDevice) {\n this.isKnownTVDeviceUA = smartTVInfo.isKnownTVDevice;\n this.UADeviceVendor = smartTVInfo.vendorName;\n this.UADeviceModel = smartTVInfo.modelName;\n }\n };\n const handleTvValues = (smartTVInfo) => {\n if (this.smartTvCheckTimer) {\n clearTimeout(this.smartTvCheckTimer);\n this.smartTvCheckTimer = INVALID_TIMER_ID;\n }\n setUABasedTVFlags(smartTVInfo);\n resolve();\n };\n let tvCheckWithWorker = false;\n let tvCheckWithWorkerFailed = false;\n const workerName = \"TV\";\n const handleTvError = (error) => {\n if (typeof error == \"string\") {\n this.emitWorkerErrorStringTelemetry(workerName, error);\n }\n else if (\"data\" in error) {\n // MessageEvent. Message deserialization error on Worker instance in main thread.\n this.emitWorkerMessageErrorTelemetry(workerName, error);\n }\n else {\n // ErrorEvent. Either onerror in WorkerGlobalScope, or onerror on Worker instance in main thread.\n this.emitWorkerErrorTelemetry(workerName, error);\n }\n tvCheckWithWorkerFailed = true;\n logger_1.Log.e(LOGTAG, `TV checks failed in SharedWorker: ${error}`);\n };\n let timeoutDelay = INSTANT_TIMEOUT;\n let worker;\n try {\n if (self[\"SharedWorker\"]) {\n tvCheckWithWorker = true;\n worker = (0, workerutils_1.makeSharedWorkerFromInterface)(SmartTVWorker, handleTvValues, handleTvError);\n // Set the fallback timeout delay to be non-instant; this will call the fallback\n // processing after a short timeout in case the Worker doesn't work.\n timeoutDelay = FALLBACK_TIMEOUT;\n }\n }\n catch (ex) {\n tvCheckWithWorkerFailed = true;\n logger_1.Log.w(LOGTAG, `Failed to read UA TV fields: ${ex}`);\n this.emitWorkerCreationErrorTelemetry(workerName, ex);\n // Couldn't get any TV data; leave at defaults\n }\n this.smartTvCheckTimer = window.setTimeout(() => {\n (0, workerutils_1.stopWorker)(worker);\n if (tvCheckWithWorkerFailed) {\n // SharedWorker creation failed\n logger_1.Log.w(LOGTAG, \"TV checks with SharedWorker failed\");\n }\n else if (tvCheckWithWorker) {\n // SharedWorker took too long\n logger_1.Log.w(LOGTAG, \"TV checks with SharedWorker superseded by timer\");\n this.emitWorkerTimeoutTelemetry(workerName);\n }\n else {\n // No SharedWorker in use\n logger_1.Log.i(LOGTAG, \"TV checks not using SharedWorker\");\n this.emitWorkerUnusedTelemetry(workerName);\n }\n new SmartTVWorker().doWork().then((tvValues) => {\n handleTvValues(tvValues);\n });\n }, timeoutDelay);\n });\n }\n checkMobile() {\n // Not the best check; the UserAgentData one is more reliable, but this is present\n // for other devices/browsers (particularly Safari on iOS/iPadOS/macOS) that don't\n // support UserAgentData.\n if (navigator.maxTouchPoints && navigator.maxTouchPoints > 0) {\n this.isMobileNavigator = true;\n }\n }\n checkMediaQueries() {\n //const now = performance.now();\n const w = window;\n this.mediaPrimaryHover = w.matchMedia(\"(hover: hover)\").matches;\n //this.mediaAnyHover = w.matchMedia(\"(any-hover: hover)\").matches;\n this.mediaPrimaryNonHover = w.matchMedia(\"(hover: none)\").matches;\n //this.mediaAnyNonHover = w.matchMedia(\"(any-hover: none)\").matches;\n this.mediaPrimaryCoarsePointer = w.matchMedia(\"(pointer: coarse)\").matches;\n //this.mediaAnyPointer = w.matchMedia(\"(any-pointer: coarse)\").matches;\n this.mediaPrimaryFinePointer = w.matchMedia(\"(pointer: fine)\").matches;\n //this.mediaAnyFinePointer = w.matchMedia(\"(any-pointer: fine)\").matches;\n //const mediaQueryTotalTime = performance.now() - now;\n }\n checkPlugins() {\n const plugins = navigator.plugins;\n for (const plugin of plugins) {\n const pluginName = plugin.name;\n if (pluginName === \"Native Client\") {\n this.isPluginChromeNative = true;\n }\n else if (pluginName.startsWith(\"Microsoft Edge PDF\")) {\n this.isPluginEdgePDF = true;\n this.isBrowserEdge = true;\n }\n else if (pluginName.startsWith(\"Chrome PDF\")) {\n this.isPluginChromePDF = true;\n }\n else if (pluginName.startsWith(\"Chromium PDF\")) {\n this.isPluginChromiumPDF = true;\n }\n else if (pluginName.startsWith(\"PPAPI SAMSUNGHEALTH\")) {\n this.isPluginSamsungHealth = true;\n this.isPlatTizen = true;\n }\n }\n }\n async avifSupported() {\n if (!window.createImageBitmap)\n return false;\n const avifData = \"data:image/avif;base64,\" +\n \"AAAAGGZ0eXBhdmlmAAAAAGF2aWZtaWYxAAADm21ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAHBpY3QA\" +\n \"AAAAAAAAAAAAAAAAAAAADnBpdG0AAAAAAAEAAAAiaWxvYwAAAABEQAABAAEAAAAAA7sAAQAAAAAA\" +\n \"AAAjAAAAI2lpbmYAAAAAAAEAAAAVaW5mZQIAAAAAAQAAYXYwMQAAAAMbaXBycAAAAvxpcGNvAAAC\" +\n \"rGNvbHJwcm9mAAACoGxjbXMEMAAAbW50clJHQiBYWVogB+UACAAJAAsAEAAFYWNzcE1TRlQAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAAAAAAAAA\" +\n \"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANZGVzYwAAASAAAABAY3BydAAAAWAAAAA2d3RwdAAA\" +\n \"AZgAAAAUY2hhZAAAAawAAAAsclhZWgAAAdgAAAAUYlhZWgAAAewAAAAUZ1hZWgAAAgAAAAAUclRS\" +\n \"QwAAAhQAAAAgZ1RSQwAAAhQAAAAgYlRSQwAAAhQAAAAgY2hybQAAAjQAAAAkZG1uZAAAAlgAAAAk\" +\n \"ZG1kZAAAAnwAAAAkbWx1YwAAAAAAAAABAAAADGVuVVMAAAAkAAAAHABHAEkATQBQACAAYgB1AGkA\" +\n \"bAB0AC0AaQBuACAAcwBSAEcAQm1sdWMAAAAAAAAAAQAAAAxlblVTAAAAGgAAABwAUAB1AGIAbABp\" +\n \"AGMAIABEAG8AbQBhAGkAbgAAWFlaIAAAAAAAAPbWAAEAAAAA0y1zZjMyAAAAAAABDEIAAAXe///z\" +\n \"JQAAB5MAAP2Q///7of///aIAAAPcAADAblhZWiAAAAAAAABvoAAAOPUAAAOQWFlaIAAAAAAAACSf\" +\n \"AAAPhAAAtsRYWVogAAAAAAAAYpcAALeHAAAY2XBhcmEAAAAAAAMAAAACZmYAAPKnAAANWQAAE9AA\" +\n \"AApbY2hybQAAAAAAAwAAAACj1wAAVHwAAEzNAACZmgAAJmcAAA9cbWx1YwAAAAAAAAABAAAADGVu\" +\n \"VVMAAAAIAAAAHABHAEkATQBQbWx1YwAAAAAAAAABAAAADGVuVVMAAAAIAAAAHABzAFIARwBCAAAA\" +\n \"DGF2MUOBDQwAAAAAFGlzcGUAAAAAAAAAEAAAABAAAAAoY2xhcAAAAAEAAAABAAAAAQAAAAH////x\" +\n \"AAAAAv////EAAAACAAAAF2lwbWEAAAAAAAAAAQABBIGCA4QAAAArbWRhdBIACgkfzP/IIEBA0oAy\" +\n \"FGW+OwPr0bIHHHHBATZPtaQ3RWTA\";\n const blob = await fetch(avifData).then(r => r.blob());\n return createImageBitmap(blob).then(() => true, () => false);\n }\n async checkAvif() {\n // We do not care about AVIF support on non-Chromium-derived browsers.\n // Since the check is non-trivial, only perform it on the browsers where\n // it makes sense to do so.\n const w = window;\n this.supportsAvif = w[\"chrome\"] ? await this.avifSupported() : false;\n }\n checkHighEntropy() {\n return new Promise((resolve, reject) => {\n if (!navigator.userAgentData) {\n resolve();\n return;\n }\n const setHEBasedFlags = (heValues) => {\n var _a;\n if (this.performedHEChecks) {\n return;\n }\n const model = heValues.model;\n const platform = heValues.platform;\n const platformVer = heValues.platformVersion;\n const uaVer = heValues.uaFullVersion;\n const bitness = heValues.bitness;\n // Mobile flag can be in either location, depending on age of browser.\n this.isMobileHE = heValues.mobile;\n this.isMobileUAD_HE = navigator.userAgentData.mobile;\n // Check for spoofing.\n if (model == \"\" && platform == \"\" && platformVer == \"\" && uaVer == \"\") {\n if ((this.isBrowserOperaTouch && this.isPlatAndroid) || this.isPlatTizen) {\n // Opera on Android still fills-in the UserAgentData with empty values.\n // Samsung's UWE(Upgraded Web Engine) instances also is in the same condition.\n }\n else if (bitness == undefined) {\n // Electron-based apps on Linux can leave bitness undefined.\n }\n else if (this.isPlatAndroid && !this.isBrowserChrome) {\n // This pattern matches Chrome on ChromeCast (at least sometimes),\n // and some Android WebView-based browsers.\n }\n else {\n this.isUaDataSpoofed = true;\n }\n }\n else if (bitness == \"\") {\n if (platform == \"Android\") {\n // Android can still set bitness to an empty string, even when otherwise valid.\n }\n else {\n // On current Windows, Linux and macOS browsers, the built-in spoofing code clears\n // bitness to an empty string.\n // Non-spoofed scenarios leave bitness set to a valid string.\n // Earlier browser engines and other platforms don't have bitness defined.\n this.isUaDataSpoofed = true;\n }\n }\n // Check models first, for Xbox\n if (model) {\n if (model === \"Xbox\") {\n this.isHEModelXbox = true;\n }\n else if (model.startsWith(\"AFT\")) {\n // All Amazon FireTV devices start with AFT\n // See https://developer.amazon.com/docs/fire-tv/identify-amazon-fire-tv-devices.html\n // TODO: Remove certain non-Amazon vendors with embedded Fire TV products:\n // AFTHA001 - Toishiba\n // AFTWMST22 - JVC\n // AFTTIFF55 - Onida\n // AFTWI001 - ok\n // AFTDCT31 - Toshiba\n // AFTDCT31 - Insignia\n // AFTBAMR311 - Toshiba\n // AFTEAMR311 - Insignia\n // AFTKMST12 - Toshiba\n // AFTLE - Onida\n // AFTEUFF014 - Grundig\n // AFTEU014 - Grundig\n // AFTSO001 - JVC\n // AFTMM - Nebula\n // AFTEU011 - Grundig\n // AFTJMST12 - Insignia\n // AFTRS - Element\n // AFTMM - TCL\n this.isHEModelFireTV = true;\n this.isHEKnownTVDevice = true;\n }\n else if (model.includes(\"BRAVIA\")) {\n this.isHEKnownTVDevice = true;\n this.isHEModelBraviaTV = true;\n }\n else if (model === \"Chromecast\") {\n this.isHEKnownTVDevice = true;\n this.isHEModelChromecastTV = true;\n this.deviceName = \"CHROMECAST\";\n }\n else if (model === \"SHIELD Android TV\") {\n this.isHEKnownTVDevice = true;\n this.isHEModelShieldTV = true;\n this.deviceName = \"SHIELDTV\";\n }\n else if (model.startsWith(\"MiTV\")) {\n this.isHEKnownTVDevice = true;\n this.isHEModelMiTV = true;\n this.deviceName = \"MITV\";\n }\n else if (model.startsWith(\"TVision\")) {\n this.isHEKnownTVDevice = true;\n this.isHEModelTVision = true;\n this.deviceName = \"TVISION\";\n }\n }\n // Check platforms as well\n if (platform === \"Windows\") {\n this.isHEPlatformWindows = true;\n }\n else if (platform === \"macOS\") {\n this.isHEPlatformMac = true;\n }\n else if (platform === \"Chrome OS\" || platform === \"ChromeOS\") {\n this.isHEPlatformChromeOS = true;\n }\n else if (platform === \"Chromium OS\") {\n this.isHEPlatformChromiumOS = true;\n }\n else if (platform === \"Android\") {\n this.isHEPlatformAndroid = true;\n }\n else if (platform === \"Linux\") {\n if (platformVer == \"\") {\n // Android Chromium-based browsers using \"desktop site\" set platform to \"Linux\"\n // and clear the platformVersion value.\n // The platform version is unobtainable, but set the platform correctly.\n this.isHEPlatformAndroid = true;\n this.isHEPlatformOverridden = true;\n }\n else {\n this.isHEPlatformLinux = true;\n }\n }\n // Record version information\n // It would be nice to use a regex that would only replace \"odd\" punctuation in\n // the midst of numeric strings (say \"14_5_1\").\n // One such as the following:\n // /(? {\n if (!version || typeof version != \"string\") {\n return undefined;\n }\n return version.replace(/[-._,:;|#@]/g, \".\");\n };\n const deriveWindowsVer = (version) => {\n if (!version || !this.chromiumVersion || +this.chromiumVersion < 95) {\n return version;\n }\n // Fomr Chromium 95 onwards, the platformVersion source has changed to be the\n // UniversalApiContract version. That changes every time Microsoft releases\n // a new version of Windows.\n // Older Windows versions (8.1 and earlier) are now reported as \"0.0.0\".\n // Try to map the version to a 'real' Windows build version.\n const verComponents = version.split(\".\").map(x => Number.parseInt(x));\n switch (verComponents[0]) {\n case 0:\n return \"8-\"; // Windows 8.1 or earlier\n case 1:\n return \"10.0.10240\"; // Windows 10 1507 (10.0.10240.0)\n case 2:\n return \"10.0.10586\"; // Windows 10 1511 (10.0.10586.0)\n case 3:\n return \"10.0.14393\"; // Windows 10 1607 (10.0.14393.0)\n case 4:\n return \"10.0.15063\"; // Windows 10 1703 (10.0.15063.0)\n case 5:\n return \"10.0.16299\"; // Windows 10 1709 (10.0.16299.0)\n case 6:\n return \"10.0.17134\"; // Windows 10 1803 (10.0.17134.1)\n case 7:\n return \"10.0.17763\"; // Windows 10 1809 (10.0.17763.0)\n case 8:\n return \"10.0.18362+\"; // Windows 10 1903 (10.0.18362.0) or 10 1909 (10.0.18363.0)\n case 9:\n // Apparently not used.\n return \"10.0.9\";\n case 10:\n return \"10.0.19041+\"; // Windows 10 2004 (10.0.19041.0) or newer Windows 10\n case 11:\n // Apparently not used.\n return \"10.0.11\";\n case 12:\n // Apparently not used.\n return \"10.0.12\";\n case 13:\n // Windows 11 preview\n return \"11.0.0\";\n case 14:\n return \"11.0.22000.0\"; // Windows 11 21H2 (10.0.22000.0) or newer\n case 15:\n return \"11.0.22621.0\"; // Windows 11 22H2 (10.0.22621.0) or newer\n default:\n // Assume all newer versions are Windows 11 for now.\n return \"11.0.22621.0+\";\n }\n };\n const derivePlatformVer = (version) => {\n if (this.isHEPlatformWindows) {\n if (!this.isHEModelXbox) {\n return deriveWindowsVer(version);\n }\n }\n return version;\n };\n // Check Brands information if present\n if (heValues.brands && heValues.brands.length > 0) {\n this.internalCheckUserAgentData(heValues);\n }\n this.browserFullVer = sanitiseVer(uaVer);\n this.osRawVersion = platformVer;\n this.osVersion = (_a = this.osVersion) !== null && _a !== void 0 ? _a : derivePlatformVer(sanitiseVer(platformVer));\n this.performedHEChecks = true;\n };\n const handleHEValues = (heValues) => {\n if (!heValues) {\n // Do not set any flags. If this was a failure in the Worker,\n // the fallback code will execute instead.\n return;\n }\n if (this.heCheckTimer) {\n clearTimeout(this.heCheckTimer);\n this.heCheckTimer = INVALID_TIMER_ID;\n }\n setHEBasedFlags(heValues);\n resolve();\n };\n let heCheckWithWorker = false;\n let heCheckWithWorkerFailed = false;\n const workerName = \"HE\";\n const handleHEError = (error) => {\n if (typeof error == \"string\") {\n this.emitWorkerErrorStringTelemetry(workerName, error);\n }\n else if (\"data\" in error) {\n // MessageEvent. Message deserialization error on Worker instance in main thread.\n this.emitWorkerMessageErrorTelemetry(workerName, error);\n }\n else {\n // ErrorEvent. Either onerror in WorkerGlobalScope, or onerror on Worker instance in main thread.\n this.emitWorkerErrorTelemetry(workerName, error);\n }\n heCheckWithWorkerFailed = true;\n logger_1.Log.e(LOGTAG, `HE checks failed in SharedWorker: ${error}`);\n };\n let timeoutDelay = INSTANT_TIMEOUT;\n let worker;\n try {\n if (self[\"SharedWorker\"]) {\n heCheckWithWorker = true;\n worker = (0, workerutils_1.makeSharedWorkerFromInterface)(HighEntropyWorker, handleHEValues, handleHEError);\n // Set the fallback timeout delay to be non-instant; this will call the fallback\n // processing after a short timeout in case the Worker doesn't work.\n // Use the longer fallback timeout to handle slower browsers; Edge seems to take\n // longer when users are spoofing the User Agent Client Hints, Chrome is quicker.\n timeoutDelay = LONG_FALLBACK_TIMEOUT;\n }\n }\n catch (ex) {\n heCheckWithWorkerFailed = true;\n logger_1.Log.w(LOGTAG, `Failed to read High Entropy data: ${ex}`);\n this.emitWorkerCreationErrorTelemetry(workerName, ex);\n // Couldn't get any HE data; leave at defaults\n }\n this.heCheckTimer = window.setTimeout(() => {\n (0, workerutils_1.stopWorker)(worker);\n if (heCheckWithWorkerFailed) {\n // SharedWorker creation failed\n logger_1.Log.w(LOGTAG, \"HE checks with SharedWorker failed\");\n }\n else if (heCheckWithWorker) {\n // SharedWorker took too long\n logger_1.Log.w(LOGTAG, \"HE checks with SharedWorker superseded by timer\");\n this.emitWorkerTimeoutTelemetry(workerName);\n this.wereHeChecksLate = true;\n }\n else {\n // No SharedWorker in use\n logger_1.Log.i(LOGTAG, \"HE checks not using SharedWorker\");\n this.emitWorkerUnusedTelemetry(workerName);\n }\n new HighEntropyWorker().doWork().then((heValues) => {\n handleHEValues(heValues);\n });\n }, timeoutDelay);\n });\n }\n checkUserAgentVersion() {\n return new Promise(resolve => {\n const uaString = navigator.userAgent;\n if (uaString) {\n // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\n // find first \"Chrome/DD.DD.DD.DD\"\n const matches = uaString.match(this.chromeRe);\n if (matches) {\n this.chromeUaVersion = matches === null || matches === void 0 ? void 0 : matches[1];\n this.chromeUaMajorVer = matches === null || matches === void 0 ? void 0 : matches[2];\n }\n }\n resolve();\n });\n }\n /**\n * Check the browser details using webOS Crow API.\n *\n * @returns the promise which gets resolved when the webOS browser version detection is done\n */\n checkWebOsBrowserVersion() {\n var _a, _b, _c, _d;\n // On LGTV platforms, any FWs earlier than webOS23 would not have user agent hint and string support\n // Need to rely on following API to retrieve chrome version\n const crowApi = window[\"RequestCrowNativeApi\"];\n if (crowApi) {\n let timeoutId = 0;\n const timeoutPromise = new Promise((_, reject) => {\n timeoutId = window.setTimeout(() => {\n reject(\"timeout\");\n }, 100); // Wait for 100 ms\n });\n const zoneless = window[\"zoneless\"];\n const windowAddEventListener = (_b = (_a = zoneless === null || zoneless === void 0 ? void 0 : zoneless.windowAddEventListener) === null || _a === void 0 ? void 0 : _a.bind(window)) !== null && _b !== void 0 ? _b : window.addEventListener.bind(window);\n const windowRemoveEventListener = (_d = (_c = zoneless === null || zoneless === void 0 ? void 0 : zoneless.windowRemoveEventListener) === null || _c === void 0 ? void 0 : _c.bind(window)) !== null && _d !== void 0 ? _d : window.removeEventListener.bind(window);\n let eventHandler; // The reference of the function used for receiving Crow API events\n const crowPromise = new Promise(resolve => {\n eventHandler = (e) => {\n resolve(e[\"detail\"]);\n };\n windowAddEventListener(\"CrowNativeApiEvent\", eventHandler);\n const request = { requestMethod: \"RequestBrowserVersion\" };\n crowApi(JSON.stringify(request));\n }).then(detail => {\n var _a;\n // UA: Mozilla/5.0 (Linux; NetCast; U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.128 Safari/537.36 SmartTV/10.0 Colt/2.0 PWA\n // find first \"Chrome/DD.DD.DD.DD\"\n const matches = (_a = detail[\"browserVersion\"]) === null || _a === void 0 ? void 0 : _a.match(this.chromeRe);\n if (matches) {\n // Match: [\"Chrome/94.0.4606.128\", \"94.0.4606.128\", \"94\"]\n this.browserFullVer = matches === null || matches === void 0 ? void 0 : matches[1];\n this.browserVersion = matches === null || matches === void 0 ? void 0 : matches[2];\n }\n });\n return Promise.race([crowPromise, timeoutPromise])\n .catch(() => {\n logger_1.Log.d(LOGTAG, \"timeout when fetching browser version from webOS CrowNativeApi\");\n })\n .finally(() => {\n window.clearTimeout(timeoutId);\n windowRemoveEventListener(\"CrowNativeApiEvent\", eventHandler);\n });\n }\n return Promise.resolve();\n }\n compareBrowserVersions(simpleVer, fullVer) {\n if (simpleVer == fullVer) {\n // Simple version should be simpler than full version\n return false;\n }\n let re = /^(\\d+)[.]?(.*)/;\n let simpleResult = re.exec(simpleVer);\n let fullResult = re.exec(fullVer);\n // The simple result should be the first part of the full result, or the same as the full result.\n // Discrepancies are an indication of spoofing.\n // RegExp.exec() can return null if the match fails.\n // Perform due-diligence checks for incompatibility.\n if (simpleResult == null) {\n if (fullResult == null) {\n // Assume both have non-numeric versions.\n return true;\n }\n else {\n return false;\n }\n }\n else {\n if (fullResult == null) {\n return false;\n }\n else {\n // Have both results, can compare them.\n if (simpleResult[1] == fullResult[1]) {\n if (simpleResult[2] == \"\") {\n // Normally-true case - simple version is just the major number.\n return true;\n }\n else {\n // Full version information in the simple version is another indication of spoofing.\n return false;\n }\n }\n }\n }\n return false;\n }\n validateChecks() {\n if (!this.hasUaData) {\n // Can't check against UserAgentData if it doesn't exist.\n return;\n }\n // Check for platform inconsistencies and indicate that spoofing has happened\n if (this.isPlatformMacIntel != this.isHEPlatformMac ||\n this.isPlatformWin != this.isHEPlatformWindows) {\n this.isUaDataSpoofed = true;\n }\n // Many systems are based on Linux, but report a more specific platform through high entropy data\n // prettier-ignore\n if ((this.isHEPlatformChromeOS ||\n this.isHEPlatformChromiumOS ||\n this.isHEPlatformAndroid ||\n this.isHEPlatformLinux) &&\n !this.isPlatformLinux) {\n this.isUaDataSpoofed = true;\n }\n if (this.browserVersion &&\n this.browserFullVer &&\n !this.compareBrowserVersions(this.browserVersion, this.browserFullVer)) {\n if (this.isBrandOpera) {\n // Opera reports the Opera version with its brand.\n // Compare the Chromium version to see if there is spoofing.\n if (this.chromiumVersion &&\n !this.compareBrowserVersions(this.chromiumVersion, this.browserFullVer)) {\n this.isUaDataSpoofed = true;\n }\n }\n else {\n this.isUaDataSpoofed = true;\n }\n }\n if ((this.isHEPlatformChromeOS && !this.isBrandChrome) ||\n (this.isHEPlatformChromiumOS && !this.isBrandChromium)) {\n // ChromeOS and ChromiumOS only have one browser each.\n // If the high-entropy data indicates the OS, the brand data should indicate the browser as well.\n this.isUaDataSpoofed = true;\n }\n // Check voice inconsistencies with high-entropy data.\n if (this.voiceIsChrome) {\n if (this.voiceIsMicrosoft && !this.isHEPlatformWindows) {\n // Chrome only has Microsoft voices on Windows.\n // Edge never has Chrome voices.\n this.isUaDataSpoofed = true;\n }\n else if (this.voiceIsApple && !this.isHEPlatformMac) {\n // Only get Apple voices on Mac or iOS/iPadOS - but don't get\n // UserAgentData on iOS/iPadOS.\n this.isUaDataSpoofed = true;\n }\n }\n else if (this.voiceIsChromeOS) {\n // Chrome OS voices must be from a Chrome OS platform.\n if (!this.isHEPlatformChromeOS) {\n this.isUaDataSpoofed = true;\n }\n }\n else if (this.voiceIsFirefox) {\n // Firefox doesn't support UserAgentData\n this.isUaDataSpoofed = true;\n }\n else if (this.voiceIsMicrosoft) {\n // Could be Edge on many different platforms\n }\n else if (this.voiceIsApple) {\n if (!this.isHEPlatformMac) {\n // Only get Apple voices on Mac or iOS/iPadOS - but don't get\n // UserAgentData on iOS/iPadOS.\n this.isUaDataSpoofed = true;\n }\n }\n this.useUaData = this.hasUaData && !this.isUaDataSpoofed;\n this.ignoreUaData = this.hasUaData && this.isUaDataSpoofed;\n }\n createPlatformDetails() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;\n this.determineResult();\n this.finish = performance.now();\n this.platformDetails.os = (_a = this.osName) !== null && _a !== void 0 ? _a : \"Unknown\" /* PlatformName.UNKNOWN */;\n this.platformDetails.browser = (_b = this.browserName) !== null && _b !== void 0 ? _b : \"Unknown\" /* BrowserName.UNKNOWN */;\n this.platformDetails.osRawVer = (_c = this.osRawVersion) !== null && _c !== void 0 ? _c : UNKNOWN_VERSION;\n this.platformDetails.osVer = (_d = this.osVersion) !== null && _d !== void 0 ? _d : UNKNOWN_VERSION;\n this.platformDetails.browserVer = (_e = this.browserVersion) !== null && _e !== void 0 ? _e : UNKNOWN_VERSION;\n let browserFullVer = (_f = this.browserFullVer) !== null && _f !== void 0 ? _f : undefined;\n this.platformDetails.browserFullVer = browserFullVer !== null && browserFullVer !== void 0 ? browserFullVer : UNKNOWN_VERSION;\n this.platformDetails.browserBestVer =\n (_g = browserFullVer !== null && browserFullVer !== void 0 ? browserFullVer : this.platformDetails.browserVer) !== null && _g !== void 0 ? _g : UNKNOWN_VERSION;\n this.platformDetails.confidence =\n (_m = (_l = (_k = (_j = (_h = this.confidenceLevel) !== null && _h !== void 0 ? _h : (this.osName === \"Unknown\" /* PlatformName.UNKNOWN */ ? 0 : undefined)) !== null && _j !== void 0 ? _j : (this.browserName === \"Unknown\" /* BrowserName.UNKNOWN */ ? 5 : undefined)) !== null && _k !== void 0 ? _k : (this.wereHeChecksLate ? 6 : undefined)) !== null && _l !== void 0 ? _l : (this.ignoreUaData ? 8 : undefined)) !== null && _m !== void 0 ? _m : 10;\n this.platformDetails.forging = (_o = this.isForged) !== null && _o !== void 0 ? _o : false;\n this.platformDetails.spoofing = (_p = this.ignoreUaData) !== null && _p !== void 0 ? _p : false;\n this.platformDetails.vendor = (_q = this.deviceVendor) !== null && _q !== void 0 ? _q : \"\" /* DeviceVendor.UNKNOWN */;\n this.platformDetails.vendorFull = (_r = this.deviceVendorFull) !== null && _r !== void 0 ? _r : this.platformDetails.vendor;\n this.platformDetails.deviceOS = getDeviceOS(this.platformDetails.os);\n if (this.platformDetails.os === \"iPadOS\" /* PlatformName.IPADOS */ &&\n !this.supportsWebkitSupportsPresentationMode) {\n this.platformDetails.deviceModel = \"VISIONPRO\" /* DeviceModel.VISION_PRO */;\n }\n else if (this.isGLSteamDeck) {\n this.platformDetails.deviceModel = \"STEAMDECK\" /* DeviceModel.STEAMDECK */;\n }\n else if (this.devModel) {\n this.platformDetails.deviceModel = this.devModel;\n }\n this.platformDetails.deviceType =\n (_s = this.devType) !== null && _s !== void 0 ? _s : getDeviceType(this.platformDetails.os, this.platformDetails.deviceModel);\n this.platformDetails.totalTime = this.finish - this.start;\n this.platformDetails.gpuDetail = this.gpuDetail;\n }\n determineResult() {\n var _a, _b, _c;\n if (!this.hasGL && this.isBrowserChrome) {\n // No GL and Chromium-based -> Either spoofed, or a really poor platform.\n // Specifically, Edge on Xbox can spoof like this sometimes.\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.isForged = true;\n this.confidenceLevel = 3;\n this.osVersion = UNKNOWN_VERSION;\n this.browserVersion = UNKNOWN_VERSION;\n this.browserFullVer = UNKNOWN_VERSION;\n logger_1.Log.d(LOGTAG, \"FAILURE: No WebGL support\");\n }\n else if (this.voiceIsChromeOS) {\n // Assume Chrome on ChromeOS, using Chrome Browser\n this.osName = \"ChromeOS\" /* PlatformName.CHROME_OS */;\n this.setChromeDetails();\n }\n else if (this.voiceIsChrome) {\n // No Chrome voices except in Chrome browser, and not on Chrome OS\n this.setChromeDetails();\n if (this.voiceIsMicrosoft) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.voiceIsApple) {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.useUaData) {\n if (this.isHEPlatformWindows) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.isHEPlatformMac) {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.isHEPlatformChromeOS || this.isHEPlatformChromiumOS) {\n // Very unusual; ChromeOS should not have Chrome voices.\n this.osName = \"ChromeOS\" /* PlatformName.CHROME_OS */;\n this.isForged = true;\n this.confidenceLevel = 7;\n }\n else if (this.isHEPlatformLinux) {\n // Chrome voices are not present on Android, therefore must be Linux.\n this.osName = this.getCurrentLinuxOsName();\n }\n }\n else if (this.isPlatformWin) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.isPlatformMacIntel) {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.isPlatformLinux) {\n // Chrome voices are not present on Android, therefore must be Linux.\n this.osName = this.getCurrentLinuxOsName();\n }\n else if (this.isPlatformFreeBsdX86) {\n this.osName = \"FreeBSD\" /* PlatformName.FREEBSD */;\n }\n else {\n // navigator.platform is not set correctly.\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Chrome voice only, no HE platform, no navigator.platform\");\n }\n }\n else if (this.voiceIsFirefox) {\n // No Firefox voices except in Firefox browser\n this.setFirefoxDetails();\n if (this.voiceIsMicrosoft) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.voiceIsApple) {\n // Firefox and Apple voices == macOS\n // Firefox on iOS uses Apple voices exclusively\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.voiceIsFirefoxAndroid) {\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.determineAndroidDeviceType();\n }\n else if (this.isPlatformLinux) {\n this.osName = this.getCurrentLinuxOsName();\n }\n else if (this.isPlatformFreeBsdX86) {\n this.osName = \"FreeBSD\" /* PlatformName.FREEBSD */;\n }\n else {\n // Not Windows, macOS or Android, so unknown OS\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Firefox voice, no other voice, no navigator.platform\");\n }\n }\n else if (this.voiceIsEdge) {\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n if (this.voiceIsWindows) {\n // Edge on Xbox has same voices as on Windows, so add Xbox-specific checks here.\n if ((this.useUaData && this.isHEModelXbox) || this.isGLXbox) {\n this.osName = \"Xbox\" /* PlatformName.XBOX */;\n this.deviceVendor = \"MICROSOFT\" /* DeviceVendor.MICROSOFT */;\n if (this.isGLXboxSeries) {\n this.devModel = \"XBOXSERIES\" /* DeviceModel.XBOX_SERIES */;\n }\n else if (this.isGLXbox) {\n this.devModel = \"XBOXONE\" /* DeviceModel.XBOX_ONE */;\n }\n }\n else {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n }\n else if (this.voiceIsApple) {\n // Edge and Apple voices == macOS\n // Edge on iOS uses Apple voices exclusively\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.voiceIsAndroid) {\n // Newer Edge on Android versions provide Edge voices.\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.determineAndroidDeviceType();\n }\n else if (this.useUaData) {\n if (this.isHEModelXbox) {\n this.osName = \"Xbox\" /* PlatformName.XBOX */;\n this.deviceVendor = \"MICROSOFT\" /* DeviceVendor.MICROSOFT */;\n if (this.isGLXboxSeries) {\n this.devModel = \"XBOXSERIES\" /* DeviceModel.XBOX_SERIES */;\n }\n else if (this.isGLXbox) {\n this.devModel = \"XBOXONE\" /* DeviceModel.XBOX_ONE */;\n }\n }\n else if (this.isHEPlatformWindows) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.isHEPlatformMac) {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.isHEPlatformChromeOS || this.isHEPlatformChromiumOS) {\n // Very unusual; ChromeOS should not have Edge voices.\n this.osName = \"ChromeOS\" /* PlatformName.CHROME_OS */;\n this.isForged = true;\n this.confidenceLevel = 7;\n }\n else if (this.isHEPlatformAndroid) {\n // Newer Edge on Android versions provide Edge voices, so check for Android before Linux.\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.determineAndroidDeviceType();\n }\n else if (this.isHEPlatformLinux) {\n this.osName = this.getCurrentLinuxOsName();\n }\n }\n else if (this.isPlatformWin) {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n }\n else if (this.isPlatformMacIntel) {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n }\n else if (this.isPlatAndroid) {\n // Newer Edge on Android versions provide Edge voices, so check for Android before Linux.\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.determineAndroidDeviceType();\n }\n else if (this.isPlatformLinux) {\n this.osName = this.getCurrentLinuxOsName();\n }\n else if (this.isPlatformFreeBsdX86) {\n this.osName = \"FreeBSD\" /* PlatformName.FREEBSD */;\n }\n else {\n // navigator.platform is not set correctly.\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.confidenceLevel = 5;\n }\n }\n else if (this.voiceIsMicrosoft) {\n // Not ChromeOS, Chrome, Edge or Firefox\n // Microsoft voices require a Microsoft product\n if (this.voiceIsWindows) {\n this.determineWindowsBrowser();\n }\n else {\n // Neither Windows nor Edge, so something's not right.\n // Assume Windows, and indicate forging.\n this.determineWindowsBrowser();\n this.isForged = true;\n this.confidenceLevel = 5;\n }\n }\n else if (this.voiceIsApple) {\n this.determineAppleBrowser();\n }\n else if (this.voiceIsAndroid) {\n this.determineAndroidBrowser();\n }\n else {\n // Try to detect without voice information\n if ((this.useUaData && (this.isHEModelXbox || this.isHEPlatformWindows)) ||\n this.isPlatformWin ||\n this.isGLXbox) {\n this.determineWindowsBrowser();\n }\n else if ((this.useUaData && this.isHEPlatformMac) ||\n this.isPlatformiPad ||\n this.isPlatformiPhone ||\n this.isPlatformMacIntel) {\n this.determineAppleBrowser();\n }\n else if (this.useUaData &&\n (this.isHEPlatformChromeOS || this.isHEPlatformChromiumOS)) {\n this.osName = \"ChromeOS\" /* PlatformName.CHROME_OS */;\n this.setChromeDetails();\n }\n else if (this.isPlatCcOS) {\n this.osName = \"ccOS\" /* PlatformName.CCOS */;\n this.deviceVendor = \"HKMC\" /* DeviceVendor.HKMC */;\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n }\n else if ((this.useUaData && this.isHEPlatformAndroid) || this.isPlatAndroid) {\n this.determineAndroidBrowser();\n }\n else if (this.useUaData && this.isHEPlatformLinux) {\n this.determineLinuxBrowser();\n }\n else if (this.isPlatWebOS) {\n this.osName = \"WebOS\" /* PlatformName.WEBOS */;\n this.deviceVendor = \"LG\" /* DeviceVendor.LG */;\n // webOS TV uses the Blink-based LG browser engine, Chromium based\n // https://webostv.developer.lge.com/discover/specifications/web-engine/\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n // webOS supports immutable user agent string\n // when browser version is not detected, user agent string version could be the one to rely one\n this.browserFullVer = (_a = this.browserFullVer) !== null && _a !== void 0 ? _a : this.chromeUaVersion;\n this.browserVersion = (_b = this.browserVersion) !== null && _b !== void 0 ? _b : this.chromeUaMajorVer;\n this.ignoreUaData = false; // webOS does not have enough platfom fields to pass spoofing check, so bypass it\n }\n else if (this.isPlatTizen) {\n this.osName = \"Tizen\" /* PlatformName.TIZEN */;\n this.browserName = \"Samsung\" /* BrowserName.SAMSUNG */;\n if ((_c = window.webapis) === null || _c === void 0 ? void 0 : _c.productinfo) {\n try {\n this.osVersion = window.webapis.productinfo.getFirmware();\n this.deviceName = window.webapis.productinfo.getRealModel();\n this.deviceVendorFull = window.webapis.productinfo.getLicensedVendor();\n }\n catch (_d) {\n logger_1.Log.e(LOGTAG, \"Exception using WebAPI productinfo\");\n }\n }\n else {\n logger_1.Log.e(LOGTAG, \"Must load '$WEBAPIS/webapis/webapis.js' in index.html\");\n this.osVersion = UNKNOWN_VERSION;\n this.deviceName = \"\";\n }\n // Any result other than 'Samsung' from getLicensedVendor is from a Tizen licensed vendor\n this.deviceVendor =\n this.deviceVendorFull === \"Samsung\" || !this.deviceVendorFull\n ? \"SAMSUNG\" /* DeviceVendor.SAMSUNG */\n : \"TIZENLICENSED\" /* DeviceVendor.TIZEN_LICENSED */;\n this.determineTizenUAInfo();\n }\n else if (this.isPlatformLinux) {\n // Linux or Linux-derived, based on navigator.platform.\n // More specific tests must come earlier than this.\n this.determineLinuxOrAndroidBrowser();\n }\n else if (this.isPlatformFreeBsdX86) {\n this.determineFreeBsdBrowser();\n }\n else {\n if (this.isBrowserChromeiOS || this.isBrowserFirefoxiOS || this.isBrowserEdgeiOS) {\n // iOS browser, so iOS platform.\n // Assume iPhone for detection.\n this.isPlatformiPhone = true;\n this.determineAppleBrowser();\n this.confidenceLevel = 7;\n }\n else if (this.isBrowserSamsungChromium) {\n // Samsung browser, so Android platform\n this.determineAndroidBrowser();\n this.confidenceLevel = 7;\n }\n else {\n // TODO Map more browsers to their specific platforms (Opera Touch?)\n // navigator.platform isn't set correctly (or is unknown).\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 0;\n logger_1.Log.d(LOGTAG, \"FAILURE: No anything!\");\n }\n }\n }\n if (this.ignoreUaData) {\n // Clean up values when we know them to be invalid:.\n // If UserAgentData is present, then version information comes from it.\n // If, however, that data has been spoofed, re-write the versions to be unknown.\n this.osVersion = UNKNOWN_VERSION;\n this.browserVersion = UNKNOWN_VERSION;\n this.browserFullVer = UNKNOWN_VERSION;\n }\n }\n determineLinuxOrAndroidBrowser() {\n if (this.isBrowserFirefoxTV) {\n // Don't use FIRETV until all callers understand it.\n //this.osName = PlatformName.FIRETV;\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.deviceVendor = \"AMAZON\" /* DeviceVendor.AMAZON */;\n this.setFirefoxDetails();\n this.devType = \"TV\" /* DeviceType.TV */;\n }\n else if (this.isBrowserSamsungChromium) {\n // First-time detection after starting Samsung browser doesn't load voices correctly,\n // meaning we just know the platform is Linux or Linux-derived and hence come through\n // this code path.\n // However, we *do* detect Samsung browser, so can derive OS, vendor and browser.\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n this.deviceVendor = \"SAMSUNG\" /* DeviceVendor.SAMSUNG */;\n this.browserName = \"Samsung\" /* BrowserName.SAMSUNG */;\n this.determineAndroidDeviceType();\n }\n else {\n if (!this.determineDesktopBrowser()) {\n // TODO Check for platform-specific browsers, and set accordingly, to cope with\n // additional spoofing of navigator.platform\n // TODO More and better Android and (esp.) Linux browsers\n this.osName = \"Unknown\" /* PlatformName.UNKNOWN */;\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 0;\n logger_1.Log.d(LOGTAG, \"FAILURE: Linux|Android, no FireTV, no Samsung, no desktop browser\");\n }\n else if (this.ignoreUaData) {\n // Found a browser, but the UserAgentData is spoofed.\n // Either the browser has implicitly spooofed, or the user has chosen to spoof the user agent.\n // If UserAgentData spoofing doesn't happen, we won't be entering this function at all\n // on modern browsers.\n // If we've successfully found a browser and there's spoofing, assume the platform is Linux.\n // Non-Linux platforms (that are derived from Linux) are detected prior to entering this code path.\n this.osName = this.getCurrentLinuxOsName();\n }\n else if (this.isPluginChromiumPDF &&\n !(this.isPluginChromePDF || this.isPluginEdgePDF)) {\n // Likely an Electron-based app on Linux.\n // Real (older) Chromium will have been detected earlier, using brands.\n // Even older Chromium won't have brands, but will match this path as well.\n this.osName = this.getCurrentLinuxOsName();\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n this.confidenceLevel = 7;\n }\n else if (this.isPlatformLinux) {\n // Should have checked Linux-derived OS before calling this function, so assume Linux.\n this.osName = \"Linux\" /* PlatformName.LINUX */;\n }\n }\n }\n determineTizenUAInfo() {\n //UA: Mozilla/5.0 (SMART-TV; LINUX; Tizen 6.5) AppleWebKit/537.36 (KHTML, like Gecko) 85.0.4183.93/6.5 TV Safari/537.36\n const browserTizenRe = /(([0-9]+\\.)*[0-9]+)\\/(([0-9]+\\.)*[0-9]+)/;\n const uaString = navigator.userAgent;\n if (uaString) {\n // find first \" DD.DD.../DD.DD... \"\n const btMatch = uaString.match(browserTizenRe);\n // Match: [\"85.0.4183.93/6.5\", \"85.0.4183.93\", \"4183.\", \"6.5\", \"6.\"]\n this.browserFullVer = btMatch === null || btMatch === void 0 ? void 0 : btMatch[0];\n const chromeUaVersion = btMatch === null || btMatch === void 0 ? void 0 : btMatch[1];\n if (chromeUaVersion) {\n const majorVer = chromeUaVersion.split(\".\");\n this.browserVersion = majorVer === null || majorVer === void 0 ? void 0 : majorVer[0];\n }\n }\n }\n determineLinuxBrowser() {\n this.osName = this.getCurrentLinuxOsName();\n if (this.isMobileUAD || this.isMobileNavigator) {\n // Do not understand mobile Linux platforms well - that are not Android\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 3;\n }\n else if (!this.determineDesktopBrowser()) {\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Linux, no desktop browser\");\n }\n }\n determineFreeBsdBrowser() {\n this.osName = \"FreeBSD\" /* PlatformName.FREEBSD */;\n if (this.isBrowserChrome) {\n // Detect all Chromium-based browsers as Chrome for now\n this.browserName = \"Chrome\" /* BrowserName.CHROME */;\n }\n else if (this.isBrowserNetscape) {\n this.setFirefoxDetails();\n }\n else {\n // TODO Check for platform-specific browsers, and set accordingly, to cope with\n // additional spoofing of navigator.platform\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 3;\n logger_1.Log.d(LOGTAG, \"FAILURE: FreeBSD, no Chrome, no Netscape\");\n }\n }\n setTvDeviceVendorDetails() {\n if (this.isHEModelFireTV) {\n // Don't use FIRETV until all callers understand it.\n //this.osName = PlatformName.FIRETV;\n this.deviceVendor = \"AMAZON\" /* DeviceVendor.AMAZON */;\n if (this.isBrandChromium) {\n this.browserName = \"Silk\" /* BrowserName.SILK */;\n }\n }\n else if (this.isHEModelBraviaTV) {\n this.deviceVendor = \"SONY\" /* DeviceVendor.SONY */;\n }\n else if (this.isHEModelChromecastTV) {\n this.deviceVendor = \"GOOGLE\" /* DeviceVendor.GOOGLE */;\n }\n else if (this.isHEModelShieldTV) {\n this.deviceVendor = \"NVIDIA\" /* DeviceVendor.NVIDIA */;\n }\n else if (this.isHEModelMiTV) {\n this.deviceVendor = \"XIAOMI\" /* DeviceVendor.XIAOMI */;\n }\n else if (this.isHEModelTVision) {\n this.deviceVendor = \"TVISION\" /* DeviceVendor.TVISION */;\n }\n }\n determineAndroidBrowser() {\n this.osName = \"Android\" /* PlatformName.ANDROID */;\n if (this.isBrowserNetscape) {\n this.setFirefoxDetails();\n }\n else if (this.isBrowserSamsungChromium) {\n this.browserName = \"Samsung\" /* BrowserName.SAMSUNG */;\n this.deviceVendor = \"SAMSUNG\" /* DeviceVendor.SAMSUNG */;\n }\n else if (this.isBrowserBrave) {\n this.browserName = \"Brave\" /* BrowserName.BRAVE */;\n }\n else if (this.isBrowserYandex) {\n this.browserName = \"Yandex\" /* BrowserName.YANDEX */;\n }\n else if (this.isBrowserOperaTouch) {\n this.browserName = \"Opera\" /* BrowserName.OPERA */;\n }\n else if (this.useUaData) {\n // Trust the UserAgentData brand information\n if (this.isBrandEdge) {\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n }\n else if (this.isBrandOpera) {\n this.browserName = \"Opera\" /* BrowserName.OPERA */;\n }\n else if (this.isBrandYandex) {\n this.browserName = \"Yandex\" /* BrowserName.YANDEX */;\n }\n else if (this.isBrandChrome) {\n this.setChromeDetails();\n this.setTvDeviceVendorDetails();\n }\n else if (this.isBrandWebview) {\n // Detect WebView-based browsers as Chrome\n this.setChromeDetails();\n this.setTvDeviceVendorDetails();\n }\n else if (this.isBrandChromium) {\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n this.setTvDeviceVendorDetails();\n }\n }\n else if (this.isBrowserChrome) {\n if (!this.supportsAvif) {\n // Microsoft Edge or Amazon Silk\n if (this.isMobileNavigator) {\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n }\n else {\n this.browserName = \"Silk\" /* BrowserName.SILK */;\n }\n }\n else {\n // Detect all Chromium-based browsers as Chrome, since we don't have a specific\n // test for Chrome that excludes Chromium-based browsers\n this.setChromeDetails();\n }\n }\n else {\n // Detect as Chrome (since WebView is based on and provided by Chrome/Chromium)\n this.setChromeDetails();\n this.confidenceLevel = 7;\n }\n this.determineAndroidDeviceType();\n }\n determineAndroidDeviceType() {\n var _a, _b, _c, _d;\n if (this.useUaData && this.isHEKnownTVDevice) {\n this.devType = \"TV\" /* DeviceType.TV */;\n }\n else if (!(this.isMobileUAD || this.isMobileNavigator) && this.isKnownTVDeviceUA) {\n // Use user agent string for TV detection only if we are reasonably confident this is not a mobile device\n this.devType = \"TV\" /* DeviceType.TV */;\n this.deviceVendor = (_b = (_a = this.deviceVendor) !== null && _a !== void 0 ? _a : this.UADeviceVendor) !== null && _b !== void 0 ? _b : \"\" /* DeviceVendor.UNKNOWN */;\n this.deviceName = (_d = (_c = this.deviceName) !== null && _c !== void 0 ? _c : this.UADeviceModel) !== null && _d !== void 0 ? _d : \"UNKNOWN\";\n this.confidenceLevel = 7;\n }\n else if (!(this.mediaPrimaryHover && !this.mediaPrimaryFinePointer)) {\n // 'true' Android DESKTOP situations\n if (this.isHEPlatformAndroid) {\n // Can use User Agent Client Hints checks for more detailed detection.\n if (this.isHEPlatformOverridden) {\n // Android browser with desktop site.\n if (!(this.mediaPrimaryNonHover && this.mediaPrimaryCoarsePointer)) {\n // ChromeOS or other desktop-like system. Not docked.\n this.devType = \"DESKTOP\" /* DeviceType.DESKTOP */;\n }\n }\n else {\n if (this.mediaPrimaryHover && this.mediaPrimaryFinePointer) {\n // Likely mouse as primary controller, so probably real desktop/laptop, not docked.\n this.devType = \"DESKTOP\" /* DeviceType.DESKTOP */;\n }\n }\n }\n else {\n // Firefox and other browsers that don't support User Agent Client Hints.\n if (!(this.mediaPrimaryNonHover && this.mediaPrimaryCoarsePointer)) {\n this.devType = \"DESKTOP\" /* DeviceType.DESKTOP */;\n }\n }\n }\n else {\n // Hovering but no fine control, so not mouse controlled.\n // Assume mobile device.\n }\n // Make sure to use a default of PHONE for Android systems.\n if (!this.devType) {\n // Detect Android tablets by those devices with a \"smallest width\" of 600 dp units.\n // For browsers on Android, the screen.width and screen.height are in dp units.\n const shortest = screen.width < screen.height ? screen.width : screen.height;\n this.devType = shortest >= 600 ? \"TABLET\" /* DeviceType.TABLET */ : \"PHONE\" /* DeviceType.PHONE */;\n }\n }\n determineWindowsBrowser() {\n this.osName = \"Windows\" /* PlatformName.WINDOWS */;\n if (!this.determineDesktopBrowser()) {\n // TODO Check for platform-specific browsers, and set accordingly, to cope with\n // additional spoofing of navigator.platform\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Windows, no desktop browser\");\n }\n }\n determineAppleBrowser() {\n // The three Apple platform names (iPad, iPhone and MacIntel) can be used on different devices\n // iPad - used on iPad devices when requesting Mobile sites (in Chrome, Safari, Edge)\n // iPhone - used on iPhone devices when requesting Mobile sites (in Safar)i\n // used on iPhone devices in all cases (Firefox, Brave, Opera Touch, Chrome)\n // MacIntel - used on macOS devices always\n // - used on iPad devices when requesting Desktop sites (in Safari, Chrome, Edge)\n // - used on iPad devices always (in Brave, Firefox, Opera Touch)\n //\n // The default user agent is more accurate, but could be spoofed (including from another platform)\n // TODO Check for platform-specific browsers, and set accordingly, to cope with\n // additional spoofing of navigator.platform\n this.deviceVendor = \"APPLE\" /* DeviceVendor.APPLE */;\n if (this.useUaData && this.isHEPlatformMac) {\n // So far, only macOS browsers have the high-entropy user agent data.\n this.osName = \"macOS\" /* PlatformName.MAC */;\n if (!this.determineDesktopBrowser()) {\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Apple, macOS HE platform, no desktop browser\");\n }\n }\n else if (this.isPlatformMacIntel) {\n if (this.isMobileNavigator) {\n this.osName = \"iPadOS\" /* PlatformName.IPADOS */;\n this.determineIOSBrowser();\n }\n else {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n if (!this.determineDesktopBrowser()) {\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: Apple, macOS/iPad, not mobile, no desktop browser\");\n }\n if (this.browserName == \"Safari\" /* BrowserName.SAFARI */) {\n this.setSafariVersion();\n }\n }\n }\n else if (this.isPlatformiPhone) {\n this.osName = \"iOS\" /* PlatformName.IOS */;\n this.determineIOSBrowser();\n }\n else if (this.isPlatformiPad) {\n this.osName = \"iPadOS\" /* PlatformName.IPADOS */;\n this.determineIOSBrowser();\n }\n else {\n // Apple, so iOS/iPadOS/macOS.\n // But not normal navigator.platform, so assume forging.\n this.isForged = true;\n this.confidenceLevel = 5;\n if (this.isMobileNavigator) {\n // Guess at iOS (not iPadOS)\n this.osName = \"iOS\" /* PlatformName.IOS */;\n this.determineIOSBrowser();\n logger_1.Log.d(LOGTAG, \"FAILURE: Apple, no plat data, mobile\");\n }\n else {\n this.osName = \"macOS\" /* PlatformName.MAC */;\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n logger_1.Log.d(LOGTAG, \"FAILURE: Apple, no plat data, no mobile\");\n }\n }\n }\n getCurrentLinuxOsName() {\n // Steam deck appears almost exactly the same as Linux. The only real difference is he GL renderer,\n // which is a Steam Deck-specific AMD Ryzen SKU\n if (this.isGLSteamDeck) {\n return \"SteamOS\" /* PlatformName.STEAMOS */;\n }\n else {\n return \"Linux\" /* PlatformName.LINUX */;\n }\n }\n setIOSVersion() {\n if (this.supportsBigInt) {\n if (this.supportsIntlDisplayNames) {\n if (this.supportsBigInt64Array) {\n if (this.supportsCSSCounterStyleRule) {\n if (this.supportsArrayBufferTransfer) {\n this.osVersion = \"17.4+\";\n }\n else {\n this.osVersion = \"17+\";\n }\n }\n else if (this.supportsSharedWorker) {\n this.osVersion = \"16+\";\n }\n else if (this.supportsGpuBuffer) {\n // The Ellen voice was reemoved in 15.4 and is still missing in 15.5\n // It was restored in 15.6\n // Use the presence of that voice to distinguish between 15.5 and 15.6\n if (this.voiceIsAppleEllen) {\n this.osVersion = \"15.6+\";\n }\n else {\n this.osVersion = \"15.5+\";\n }\n }\n else if (this.supportsBroadcastChannel) {\n this.osVersion = \"15.4+\";\n }\n else if (this.supportsWebAssemblyExceptions) {\n this.osVersion = \"15.2+\";\n }\n else if (this.supportsPerformanceNavigationTiming) {\n this.osVersion = \"15.1+\";\n }\n else {\n this.osVersion = \"15+\";\n }\n }\n else {\n this.osVersion = \"14.5+\";\n }\n }\n else {\n if (this.supportsMediaRecorder) {\n this.osVersion = \"14.3+\";\n }\n else {\n this.osVersion = \"14+\";\n }\n }\n }\n else {\n // Don't really support pre-14 versions, so only minimal check here.\n if (this.supportsDecodingInfo) {\n this.osVersion = \"13+\";\n }\n else {\n this.osVersion = \"12-\";\n }\n }\n }\n determineIOSBrowser() {\n this.setIOSVersion();\n const osVersion = this.osVersion;\n // iOS versions that we support (14+) should support the Credential object in their WebKit engines.\n // Browsers that don't have this object are not Safari (possibly Stadium, Cloudy, iCab, Lunascape, etc.).\n const missingCredential = !this.supportsCredential && !(osVersion.startsWith(\"12\") || osVersion.startsWith(\"13\"));\n // iOS versions 16 and up should support the window.browser.runtime object in the WebKit engines.\n // Browsers missing this object are not Safari.\n // However, Safari 18 prevents access to the window.browser object from a PWA.\n // So we cannot easily detect Safari on iOS 18; thus, disable this check for now.\n const missingSafariExtension = false;\n // !this.supportsBrowserRuntime &&\n // !(\n // osVersion.startsWith(\"12\") ||\n // osVersion.startsWith(\"13\") ||\n // osVersion.startsWith(\"14\") ||\n // osVersion.startsWith(\"15\")\n // );\n if (this.isBrowserFirefoxiOS) {\n this.browserName = \"Firefox\" /* BrowserName.FIREFOX */;\n }\n else if (this.isBrowserOperaiOS) {\n this.browserName = \"Opera\" /* BrowserName.OPERA */;\n }\n else if (this.isBrowserBrave) {\n this.browserName = \"Brave\" /* BrowserName.BRAVE */;\n }\n else if (this.isBrowserYandex) {\n this.browserName = \"Yandex\" /* BrowserName.YANDEX */;\n }\n else if (this.isBrowserEdgeiOS) {\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n }\n else if (this.isBrowserChromeiOS) {\n this.browserName = \"Chrome\" /* BrowserName.CHROME */;\n }\n else if (this.supportsApplePay && !missingCredential && !missingSafariExtension) {\n this.browserName = \"Safari\" /* BrowserName.SAFARI */;\n }\n else if (this.isBrowserReactBased) {\n // Lunascape is one browser like this\n this.browserName = \"ReactNative\" /* BrowserName.REACT */;\n }\n else {\n if (missingCredential) {\n // Not known, but with more confidence than just generically Unknown.\n // Possibly someone using a browser to spoof the user agent for access to\n // non-iOS games.\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 7;\n logger_1.Log.d(LOGTAG, \"FAILURE: iOS, not known iOS browser, no Credential\");\n }\n else {\n // WebKit-based browser (since MacIntel and mobile).\n // Detect as Safari? Or as Unknown?\n this.browserName = \"Unknown\" /* BrowserName.UNKNOWN */;\n this.confidenceLevel = 5;\n logger_1.Log.d(LOGTAG, \"FAILURE: iOS, not known iOS browser, Credentials\");\n }\n }\n }\n setFirefoxDetails() {\n this.browserName = \"Firefox\" /* BrowserName.FIREFOX */;\n if (this.supportsIntlCollationOptions) {\n if (this.supportsIntlDisplayNames) {\n if (this.supportsBeforeInputEvent) {\n if (this.supportsAbortSignalAbort) {\n if (!this.supportsDeviceLightEvent) {\n this.browserVersion = \"89+\";\n }\n else {\n this.browserVersion = \"88\";\n }\n }\n else {\n this.browserVersion = \"87\";\n }\n }\n else {\n this.browserVersion = \"86\";\n }\n }\n else {\n this.browserVersion = \"85\";\n }\n }\n else {\n this.browserVersion = \"84-\";\n }\n }\n setChromeDetails() {\n this.browserName = \"Chrome\" /* BrowserName.CHROME */;\n if (this.browserVersion) {\n return;\n }\n // Set browser version from feature detection.\n if (this.supportsLargestContentfulPaint) {\n if (this.supportsCSSregisterProperty) {\n if (this.supportsGlobalAutofocus) {\n if (this.supportsContactsPicker) {\n if (this.supportsIntlDisplayNames) {\n if (this.supportsTrustedHtml) {\n if (this.supportsWakeLock) {\n if (this.supportsPromiseAny) {\n if (this.supportsFileSystemHandle) {\n if (this.supportsAtomicsWaitAsync) {\n if (this.supportsCSSaspectRatio) {\n if (this.supportsReadableStreamBYOBReader) {\n if (this.supportsOverflowClip) {\n // From Chrome 90, we should be able to use\n // User Agent Client Hints instead of feature detection.\n this.browserVersion = \"90+\";\n }\n else {\n this.browserVersion = \"89\";\n }\n }\n else {\n this.browserVersion = \"88\";\n }\n }\n else {\n this.browserVersion = \"87\";\n }\n }\n else {\n this.browserVersion = \"86\";\n }\n }\n else {\n this.browserVersion = \"85\";\n }\n }\n else {\n this.browserVersion = \"84\";\n }\n }\n else {\n this.browserVersion = \"83\";\n }\n }\n else {\n // NB - there's no Chrome 82 to detect.\n this.browserVersion = \"81\";\n }\n }\n else {\n this.browserVersion = \"80\";\n }\n }\n else {\n this.browserVersion = \"79\";\n }\n }\n else {\n this.browserVersion = \"78\";\n }\n }\n else {\n this.browserVersion = \"77\";\n }\n }\n }\n setSafariVersion() {\n if (this.supportsIsComposing) {\n this.browserVersion = \"16.4+\";\n }\n else {\n this.browserVersion = \"16.3-\";\n }\n }\n determineDesktopBrowser() {\n var _a;\n if (this.isBrowserNetscape) {\n this.setFirefoxDetails();\n }\n else if (this.isBrowserOpera) {\n this.browserName = \"Opera\" /* BrowserName.OPERA */;\n }\n else if (this.isBrowserBrave) {\n this.browserName = \"Brave\" /* BrowserName.BRAVE */;\n }\n else if (this.isBrowserYandex) {\n this.browserName = \"Yandex\" /* BrowserName.YANDEX */;\n }\n else if (this.isBrowserChrome) {\n // Check easy derivations of Chrome before these deeper checks.\n if (this.isGLXbox) {\n this.osName = \"Xbox\" /* PlatformName.XBOX */;\n this.deviceVendor = \"MICROSOFT\" /* DeviceVendor.MICROSOFT */;\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n if (this.isGLXboxSeries) {\n this.devModel = \"XBOXSERIES\" /* DeviceModel.XBOX_SERIES */;\n }\n else if (this.isGLXbox) {\n this.devModel = \"XBOXONE\" /* DeviceModel.XBOX_ONE */;\n }\n }\n else if (this.useUaData) {\n if (this.isHEModelXbox) {\n this.osName = \"Xbox\" /* PlatformName.XBOX */;\n this.deviceVendor = \"MICROSOFT\" /* DeviceVendor.MICROSOFT */;\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n }\n else if (this.isBrandEdge) {\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n }\n else if (this.isBrandOpera) {\n this.browserName = \"Opera\" /* BrowserName.OPERA */;\n }\n else if (this.isBrandYandex) {\n this.browserName = \"Yandex\" /* BrowserName.YANDEX */;\n }\n else if (this.isBrandChrome) {\n this.setChromeDetails();\n }\n else if (this.isBrandChromium && !this.isBrandUnknown) {\n // Chromium is often the basis of other browsers, so don't be confident that we have Chromium\n // if there are other brands as well.\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n }\n }\n else if (!this.supportsAvif) {\n // Edge currently does not support AVIF images, but otherwise looks like Chrome.\n // Note: Old versions of Chrome also do not support AVIF, nor does old Chromium.\n // All modern Chrome, Edge and Chromium (at least) support\n // all PDF plugins (Microsoft Edge PDF Viewer, Chrome PDF Viewer and\n // Chromium PDF Viewer). Therefore, cannot distinguish so assume\n // current worst-case of Edge.\n this.browserName = \"Edge\" /* BrowserName.EDGE */;\n // Could be Linux, macOS, Windows, or Xbox Series S/X (early alpha skip-ahead builds of Edge on Xbox).\n // If we already know the OS, use that, else report Unknown.\n this.osName = (_a = this.osName) !== null && _a !== void 0 ? _a : \"Unknown\" /* PlatformName.UNKNOWN */;\n this.confidenceLevel = 7;\n }\n else {\n // Potentially reduced confidence if we go through this code path.\n if (this.useUaData && this.isBrandChromium) {\n // Chromium-based, possibly some other brand as well.\n // Definitely not Chrome or well-known derivative of Chromium, however.\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n // Also, not spoofed so safe to set confidence level.\n this.confidenceLevel = 9;\n }\n else if (this.voiceWasKnown) {\n // Voice was known, but not Chrome or Edge.\n // Not a known Chromium-derivative, such as Brave or Opera.\n // High confidence that this is actual Chromium.\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n }\n else {\n // Detect all Chrome-based browsers as Chromium, since we don't have a specific\n // test for Chrome that excludes Chromium-based browsers (other than by brand\n // which has already been checked or is spoofed, or by voice).\n this.browserName = \"Chromium\" /* BrowserName.CHROMIUM */;\n this.confidenceLevel = 7;\n }\n }\n }\n else if (this.isBrowserSafari || this.supportsApplePay) {\n this.browserName = \"Safari\" /* BrowserName.SAFARI */;\n }\n else if (this.isBrowserEdgeLegacy) {\n if (this.isGLXbox) {\n this.osName = \"Xbox\" /* PlatformName.XBOX */;\n this.deviceVendor = \"MICROSOFT\" /* DeviceVendor.MICROSOFT */;\n this.browserName = \"Edge_Legacy\" /* BrowserName.EDGE_LEGACY */;\n }\n else {\n this.browserName = \"Edge_Legacy\" /* BrowserName.EDGE_LEGACY */;\n }\n }\n else {\n // Not detected.\n return false;\n }\n return true;\n }\n // Run a callback after the initial batch of startup code has run.\n runAfterStartup(callback) {\n window.setTimeout(callback, INSTANT_TIMEOUT);\n }\n setTelemetryHandler(telemetry) {\n var _a;\n (_a = this.telemetry) === null || _a === void 0 ? void 0 : _a.emitDebugEvent(\"TelemetryHandlerChanged\");\n this.telemetry = telemetry;\n for (const queuedEvent of this.queuedTelemetry) {\n const name = queuedEvent.name;\n const data = queuedEvent.data;\n const type = queuedEvent.type;\n switch (type) {\n case \"ErrorEvent\" /* WorkerTelemetryType.ERROR_EVENT */:\n this.emitWorkerErrorTelemetry(name, data);\n break;\n case \"MessageEvent\" /* WorkerTelemetryType.MESSAGE_EVENT */:\n this.emitWorkerMessageErrorTelemetry(name, data);\n break;\n case \"WorkerUnused\" /* WorkerTelemetryType.UNUSED */:\n this.emitWorkerUnusedTelemetry(name);\n break;\n case \"WorkerTimeout\" /* WorkerTelemetryType.TIMEOUT */:\n this.emitWorkerTimeoutTelemetry(name);\n break;\n case \"WorkerCreateFailure\" /* WorkerTelemetryType.CREATE_FAILURE */:\n this.emitWorkerCreationErrorTelemetry(name, data);\n break;\n case \"ErrorString\" /* WorkerTelemetryType.ERROR_STRING */:\n this.emitWorkerErrorStringTelemetry(name, data);\n break;\n case \"WorkerOverlongDelay\" /* WorkerTelemetryType.OVERLONG_DELAY */:\n this.emitWorkerOverlongTelemetry(name, data);\n break;\n }\n }\n this.queuedTelemetry = [];\n }\n // Emit telemetry events, or queue until a listener has been registerd.\n emitWorkerErrorTelemetry(name, data) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerProblem\", name, `${data.message} in ${data.filename}@${data.lineno}:${data.colno}`, JSON.stringify(data.error));\n }\n else {\n this.queuedTelemetry.push({\n type: \"ErrorEvent\" /* WorkerTelemetryType.ERROR_EVENT */,\n name: name,\n data: data\n });\n }\n }\n emitWorkerErrorStringTelemetry(name, data) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WebWorkerProblem\", name, data);\n }\n else {\n this.queuedTelemetry.push({\n type: \"ErrorString\" /* WorkerTelemetryType.ERROR_STRING */,\n name: name,\n data: data\n });\n }\n }\n emitWorkerMessageErrorTelemetry(name, data) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerMessageProblem\", JSON.stringify(data));\n }\n else {\n this.queuedTelemetry.push({\n type: \"MessageEvent\" /* WorkerTelemetryType.MESSAGE_EVENT */,\n name: name,\n data: data\n });\n }\n }\n emitWorkerUnusedTelemetry(name) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerUnused\", name);\n }\n else {\n this.queuedTelemetry.push({ type: \"WorkerUnused\" /* WorkerTelemetryType.UNUSED */, name: name });\n }\n }\n emitWorkerTimeoutTelemetry(name) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerTimeout\", name);\n }\n else {\n this.queuedTelemetry.push({ type: \"WorkerTimeout\" /* WorkerTelemetryType.TIMEOUT */, name: name });\n }\n }\n emitWorkerCreationErrorTelemetry(name, exception) {\n var _a;\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerCreateFailure\", name, (_a = exception === null || exception === void 0 ? void 0 : exception.stack) !== null && _a !== void 0 ? _a : \"\", JSON.stringify(exception));\n }\n else {\n this.queuedTelemetry.push({\n type: \"WorkerCreateFailure\" /* WorkerTelemetryType.CREATE_FAILURE */,\n name: name,\n data: exception\n });\n }\n }\n emitWorkerOverlongTelemetry(name, delay) {\n if (this.telemetry) {\n this.telemetry.emitDebugEvent(\"WorkerOverlongDelay\", name, delay.toString());\n }\n else {\n this.queuedTelemetry.push({\n type: \"WorkerOverlongDelay\" /* WorkerTelemetryType.OVERLONG_DELAY */,\n name: name,\n data: delay\n });\n }\n }\n}\nclass GLWorker {\n constructor() { }\n getGLDebugInfo() {\n return this.glDebugInfo(this.createCanvas());\n }\n createCanvas() {\n const offscreenCanvasConstructor = self[\"OffscreenCanvas\"];\n if (offscreenCanvasConstructor) {\n return new OffscreenCanvas(1, 1);\n }\n else {\n return document.createElement(\"canvas\");\n }\n }\n glDebugInfo(canvas) {\n const glCtx = canvas.getContext(\"webgl\");\n const glDbgExt = glCtx && glCtx[\"getExtension\"](\"WEBGL_debug_renderer_info\");\n return glDbgExt\n ? {\n vendorName: glCtx && glCtx[\"getParameter\"](glDbgExt.UNMASKED_VENDOR_WEBGL),\n rendererName: glCtx && glCtx[\"getParameter\"](glDbgExt.UNMASKED_RENDERER_WEBGL),\n present: true\n }\n : {\n vendorName: \"\",\n rendererName: \"\",\n present: false\n };\n }\n doWork() {\n return this.getGLDebugInfo();\n }\n}\nclass HighEntropyWorker {\n constructor() { }\n doWork() {\n const uad = navigator.userAgentData;\n if (!uad) {\n return Promise.resolve(undefined);\n }\n return uad\n .getHighEntropyValues([\n \"platform\",\n \"architecture\",\n \"uaFullVersion\",\n \"platformVersion\",\n \"model\",\n \"bitness\"\n ])\n .then((heValues) => {\n if (!heValues) {\n heValues = {};\n }\n if (!heValues.brands) {\n heValues.brands = uad.brands;\n }\n if (!heValues.mobile) {\n heValues.mobile = uad.mobile;\n }\n return heValues;\n });\n }\n}\nclass SmartTVWorker {\n constructor() { }\n doWork() {\n let smartTvInfo = {\n isKnownTVDevice: false,\n modelName: \"\",\n vendorName: \"\" /* DeviceVendor.UNKNOWN */\n };\n if (navigator.userAgent) {\n const uaString = navigator.userAgent.toUpperCase();\n //UA: Mozilla/5.0 (Linux; Android 9; BRAVIA 4K UR2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Mobile Safari/537.36\n //UA: Mozilla/5.0 (SMART-TV; LINUX; Tizen 6.5) AppleWebKit/537.36 (KHTML, like Gecko) 85.0.4183.93/6.5 TV Safari/537.36\n //UA: Mozilla/5.0 (Linux; Android 11; SHIELD Android TV) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Mobile Safari/537.36\n //https://deviceatlas.com/blog/list-smart-tv-user-agent-strings\n //https://developer.samsung.com/smarttv/develop/guides/fundamentals/retrieving-platform-information.html\n //https://developers.whatismybrowser.com/useragents/explore/operating_platform/chromecast/\n // Check for known strings associated with TV devices in the UA string. This functionality is currently used only for\n // Android based TVs. If at all we need to use this for other platforms, care should be taken not to override values\n // that were detected from a more reliable source than user agent string. Some of the below fields like SMARTTV are\n // associated with Samsung (Tizen-OS) and LG (Web-OS) TVs. However, if there are android based TVs that have this string,\n // we will benefit. For Samsung and LG TVs we would not use the results of this worker anyway.\n const knownTvUAFields = [\n \"BRAVIA\",\n \"SMARTTV\",\n \"SMART-TV\",\n \"PHILIPSTV\",\n \"GOOGLETV\",\n \"CRKEY\",\n \"CHROMECAST\",\n \"SHIELD Android TV\"\n ];\n // Keep both the below arrays in sync to map the known model and vendor details\n const knownTvUAModels = [\n \"BRAVIA\",\n \"TIZEN\",\n \"PHILIPSTV\",\n \"GOOGLETV\",\n \"CRKEY\",\n \"CHROMECAST\",\n \"SHIELDTV\"\n ];\n const knownTvVendors = [\n \"SONY\" /* DeviceVendor.SONY */,\n \"SAMSUNG\" /* DeviceVendor.SAMSUNG */,\n \"PHILIPS\" /* DeviceVendor.PHILIPS */,\n \"GOOGLE\" /* DeviceVendor.GOOGLE */,\n \"GOOGLE\" /* DeviceVendor.GOOGLE */,\n \"GOOGLE\" /* DeviceVendor.GOOGLE */,\n \"NVIDIA\" /* DeviceVendor.NVIDIA */\n ];\n const tvFieldsRegex = new RegExp(knownTvUAFields.join(\"|\"), \"i\");\n if (tvFieldsRegex.test(uaString)) {\n smartTvInfo.isKnownTVDevice = true;\n const matches = uaString.match(knownTvUAModels.join(\"|\"));\n if (matches) {\n for (let i = 0; i < knownTvUAModels.length; i++) {\n if (matches[0] == knownTvUAModels[i]) {\n smartTvInfo.modelName = knownTvUAModels[i];\n smartTvInfo.vendorName = knownTvVendors[i];\n if (matches[0] == \"CRKEY\") {\n smartTvInfo.modelName = \"CHROMECAST\"; // CRKEY->CHROMECAST\n }\n }\n }\n }\n }\n }\n return Promise.resolve(smartTvInfo);\n }\n}\nclass NavigatorPlatformWorker {\n constructor() { }\n doWork() {\n return { platform: navigator.platform };\n }\n}\nconst platformImplSingleton = new Platform();\n// External API\n/**\n * Gets the platform details of the current device asynchronously, including information about the OS, browser, vendor, device type, device mode, etc.\n *\n * Platform detection using the User-Agent is not reliable as it can be easily spoofed.\n * This API uses the User-Agent Client Hints and other features of the browser to more accurately determine the details whenever possible.\n *\n * This API can take a long time to execute and is required throughout the StreamKit.\n * It is recommended to cache the result of this API to re-use after calling it once early in an app's life cycle (e.g. in the DOMContentLoaded event).\n * @returns Promise resolving to the PlatformDetails of the current system\n */\nfunction getPlatformDetails() {\n performance.mark(\"platformBegin\");\n return platformImplSingleton.detectPlatformDetails();\n}\nexports.getPlatformDetails = getPlatformDetails;\nfunction AddPlatformTelemetry(telemetry) {\n platformImplSingleton.setTelemetryHandler(telemetry);\n}\nexports.AddPlatformTelemetry = AddPlatformTelemetry;\n//# sourceMappingURL=platform.js.map","\"use strict\";\n// This file/module has to be standalone; in particular it cannot depend on\n// the logger module, since that module depends on this one.\n//\n// Therefore, this file cannot log anything itself.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ConfigureRtcUtilsSettings = exports.toBool = exports.RtcUtilsSettings = void 0;\n/* Note: This variable is not meant to be used by public Clients.\n */\nexports.RtcUtilsSettings = {\n loggingEnabled: true,\n consoleLoggingEnabled: false\n};\n/** Returns the boolean representation of the associated string */\nfunction toBool(value) {\n if (value) {\n switch (value) {\n case \"enable\":\n case \"on\":\n case \"1\":\n case \"true\":\n return true;\n case \"disable\":\n case \"off\":\n case \"0\":\n case \"false\":\n return false;\n }\n }\n return undefined;\n}\nexports.toBool = toBool;\n/**\n * This function allows GFN/dev clients to configure the ragnarok library to toggle various features from override tools or from remote config server.\n * This should be invoked before initializing other components of ragnarok library.\n *\n * The RtcUtilConfigData.remoteConfigData is all GFN specific settings, its exposed as a string to prevent dependency on GFN client from configuring values to it.\n * The json data received form the RemoteConfig server is stringified as it is and passed into the library without interpretation.\n *\n *\n * The RtcUtilConfigData.overrideData is a string of feature toggle/options separated by '&' character.\n * The options exposed exposed are:\n *\n * mode=lean|dev|default -- Lean mode of ragnarok put the library into minimal functionality mode.\n * Most features will be disabled and users configure enabling of selected features.\n * Dev mode of ragnarok enables dev internal tools for the library (by default enabled for Lean mode)\n * log=enable|disable -- Enable log generation from the library.\n * console=enable|disable -- Enable console log from the library if log generation is enabled.\n *\n * Ex: In order to put the ragnarok in Lean mode yet support logging, the settings string would be\n * \"mode=lean&log=enable\"\n * Instead of enable/disable, on/off or 0/1 can be used as well.\n */\nfunction ConfigureRtcUtilsSettings(data) {\n var _a, _b;\n if (data.overrideData) {\n /* The below code logic is to disable all features when user has selected lean mode.\n However each feature can be individually controlled\n so that performance can be analyzed by turning on one feature at a time. */\n const settings = data.overrideData.toLowerCase();\n /* Using URLSearchParams is simpler even when UI clients give a text option in Override tools to configure ragnarok.\n It splits on '&' and '=', which is what we would need when configured through UI Clients. */\n const settingsMap = new URLSearchParams(settings);\n if (settingsMap.get(\"mode\") === \"lean\") {\n exports.RtcUtilsSettings.loggingEnabled = false;\n }\n const getSettingBool = (key) => {\n const value = settingsMap.get(key);\n return toBool(value);\n };\n exports.RtcUtilsSettings.loggingEnabled = (_a = getSettingBool(\"log\")) !== null && _a !== void 0 ? _a : exports.RtcUtilsSettings.loggingEnabled;\n exports.RtcUtilsSettings.consoleLoggingEnabled =\n exports.RtcUtilsSettings.loggingEnabled &&\n ((_b = getSettingBool(\"console\")) !== null && _b !== void 0 ? _b : exports.RtcUtilsSettings.consoleLoggingEnabled);\n }\n}\nexports.ConfigureRtcUtilsSettings = ConfigureRtcUtilsSettings;\n//# sourceMappingURL=settings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TelemetryImpl = void 0;\nconst logger_1 = require(\"./logger\");\nconst utils_1 = require(\"./utils\");\nconst LOGTAG = \"telemetry\";\n/**\n * Wraps the implementation of caching/uploading/callback of telemetry.\n * All the libraries which provides telemetry support should override this class and invoke processEvent of this class.\n * This class should not be exported to clients.\n * todo: we don't rely on navigator.onLine or listeners for (offline/online). Need to evaluate its reliability on non browser platforms as this code\n * will be used in CEF framework on multiple platforms.\n */\nclass TelemetryImpl {\n constructor(clientConfig) {\n this.telemetryEventIds = {};\n this.serverUrl = \"\";\n this.pendingEventPayloads = [];\n this.uploadToServerTimerId = 0;\n // todo: evaluate if we should use keep alive and other options.\n // In browser mode we might need platform details as well.\n this.httpConfiguration = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: \"\",\n retryCount: 3,\n timeout: 2000 // todo: is 2 seconds enough for this request?, what configurations does GFNClient, GFNClientSDK use?\n };\n this.clientTelemetryConfig = clientConfig;\n }\n configure(config) {\n if (config.option) {\n // Check if the option property is a string or a callback function\n if (typeof config.option === \"function\") {\n logger_1.Log.i(LOGTAG, `configured to use callback`);\n this.telemetryCallback = config.option;\n this.serverUrl = undefined;\n if (this.uploadToServerTimerId) {\n window.clearTimeout(this.uploadToServerTimerId);\n this.uploadToServerTimerId = 0;\n }\n for (const event of this.pendingEventPayloads) {\n this.telemetryCallback(event);\n }\n this.pendingEventPayloads = [];\n }\n else if (typeof config.option === \"string\") {\n logger_1.Log.i(LOGTAG, `configured to use Http protocol`);\n this.serverUrl = config.option;\n this.telemetryCallback = undefined;\n if (this.isUserConsentTypeAvailable()) {\n this.uploadTelemetry();\n }\n }\n else {\n // Invalid Option type\n logger_1.Log.e(LOGTAG, `Invalid configuration. No callback or Server Url is provided`);\n return false;\n }\n }\n else {\n // No option property\n logger_1.Log.e(LOGTAG, `Invalid configuration. No option is provided`);\n return false;\n }\n return true;\n }\n updateTelemetryCommonData(data) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n const existingTelemetrySessionId = (_a = this.telemetryCommonData) === null || _a === void 0 ? void 0 : _a.sessionId;\n this.telemetryCommonData = {\n ...data,\n events: []\n };\n this.telemetryCommonData.clientId = this.clientTelemetryConfig.clientId;\n this.telemetryCommonData.eventSchemaVer = this.clientTelemetryConfig.eventSchemaVer;\n this.telemetryCommonData.deviceMake = (_b = this.telemetryCommonData.deviceMake) !== null && _b !== void 0 ? _b : \"undefined\";\n this.telemetryCommonData.deviceModel = (_c = this.telemetryCommonData.deviceModel) !== null && _c !== void 0 ? _c : \"undefined\";\n this.telemetryCommonData.integrationId =\n (_d = this.telemetryCommonData.integrationId) !== null && _d !== void 0 ? _d : \"undefined\";\n this.telemetryCommonData.userId = (_e = this.telemetryCommonData.userId) !== null && _e !== void 0 ? _e : \"undefined\";\n this.telemetryCommonData.externalUserId =\n (_f = this.telemetryCommonData.externalUserId) !== null && _f !== void 0 ? _f : \"undefined\";\n this.telemetryCommonData.idpId = (_g = this.telemetryCommonData.idpId) !== null && _g !== void 0 ? _g : \"undefined\";\n this.telemetryCommonData.eventProtocol = (_j = (_h = this.telemetryCommonData) === null || _h === void 0 ? void 0 : _h.eventProtocol) !== null && _j !== void 0 ? _j : \"1.5\";\n // Note: eventSysVer is telemetry library version, currently setting a random value.\n this.telemetryCommonData.eventSysVer = \"2.0\";\n // If clients don't provide a telemetry sessionId, generate a new sessionId.\n // Since updateTelemetryCommonData can be invoked multiple times, use the previously generated sessionId.\n this.telemetryCommonData.sessionId =\n (_k = this.telemetryCommonData.sessionId) !== null && _k !== void 0 ? _k : existingTelemetrySessionId;\n if (!this.telemetryCommonData.sessionId) {\n this.telemetryCommonData.sessionId = (0, utils_1.getNewGuid)();\n logger_1.Log.i(LOGTAG, `Telemetry session id not provided by client, creating new telemetry session id: ${this.telemetryCommonData.sessionId}`);\n }\n // todo: Not sure why the telemetry protocol expects version in both X-Event-Protocol header and in the request object.\n // Until we get confirmation from data team keep using the value provided by clients.\n this.httpConfiguration.headers[\"X-Event-Protocol\"] = this.telemetryCommonData.eventProtocol;\n // If we are in upload configuration then initiate upload process if not already in progress.\n if (this.serverUrl) {\n // in case some telemetry was cached before user consent was available, ignore events which don't have consent.\n this.pendingEventPayloads = this.pendingEventPayloads.filter(event => this.hasUserConsentedForEvent(event));\n this.uploadTelemetry();\n }\n }\n updateTelemetryEventIds(ids) {\n this.telemetryEventIds = {\n ...ids\n };\n }\n /**\n * Processes the generated telemetry from the derived class.\n * If telemetry handling mechanism is not set through configure API then just cache in runtime memory.\n * Else:\n * If callback is configured then pass the data to clients immediately.\n * Else: telemetry upload to server:\n * If consent not configured then cache in runtime memory.\n * If user not consented for the current telemetry then discard it.\n * Else upload the data to server.\n * @param event - Telemetry event types generated from schema.\n * @param priority - In telemetry upload configuration, if set, will use browsers sendBeacon API to upload the data to server.\n */\n processEvent(event, priority) {\n const eventPayload = {\n name: event.name,\n parameters: event.parameters,\n gdprLevel: event.gdprLevel,\n ts: event.ts,\n clientConfig: this.clientTelemetryConfig\n };\n if (this.telemetryCallback) {\n this.telemetryCallback(eventPayload);\n }\n else if (this.serverUrl && this.isUserConsentTypeAvailable()) {\n if (this.hasUserConsentedForEvent(eventPayload)) {\n if (priority) {\n // This is a priority telemetry event, send it through sendBeacon API of browser.\n const blobData = this.createTelemetryRequestData([eventPayload]);\n const formData = new Blob([blobData], {\n type: \"text/plain\"\n });\n let result = false;\n result = navigator.sendBeacon(this.serverUrl, formData);\n logger_1.Log.i(LOGTAG, `telemetry upload sendBeacon result : ${result} data: ${blobData}`);\n }\n else {\n this.pendingEventPayloads.push(eventPayload);\n this.uploadTelemetry();\n }\n } // else we ignore this event.\n }\n else {\n this.pendingEventPayloads.push(eventPayload);\n }\n }\n /**\n * Indicates if user consent type has been registered by clients.\n * @returns true - consent type available, else false.\n * {@link hasUserConsentedForEvent} to determine if a particular event can be sent to server.\n */\n isUserConsentTypeAvailable() {\n return !!this.telemetryCommonData;\n }\n /**\n * Returns true if the event GDPR level has been consented by user to send the data to server.\n * @note User consent might not be registered yet as EULA might not have been accepted by user.\n * {@link isUserConsentTypeAvailable} to check if we have consent type registered by client.\n * @param event - Telemetry event whose GDPR level has to be checked with users GDPR selection.\n * @returns true - if the event can be sent to server else false.\n */\n hasUserConsentedForEvent(event) {\n if (this.telemetryCommonData) {\n switch (event.gdprLevel) {\n case \"functional\" /* GdprLevel.Functional */:\n return (this.telemetryCommonData.deviceGdprFuncOptIn === \"Full\" ||\n this.telemetryCommonData.deviceGdprFuncOptIn === \"Temp\");\n case \"technical\" /* GdprLevel.Technical */:\n return this.telemetryCommonData.gdprTechOptIn === \"Full\";\n case \"behavioral\" /* GdprLevel.Behavioral */:\n return this.telemetryCommonData.gdprBehOptIn === \"Full\";\n default:\n return false;\n }\n }\n return false;\n }\n /**\n * Generates the http request data to be sent to the telemetry server for all the cached telemetry events.\n * @returns http request data\n */\n createTelemetryRequestData(events) {\n var _a;\n // Make a deep copy of common data before modifying any properties\n const commonData = {\n ...this.telemetryCommonData,\n events: []\n };\n commonData.sentTs = new Date().toISOString();\n for (const event of events) {\n const formattedEventDetail = {\n name: event.name,\n ts: event.ts,\n parameters: event.parameters\n };\n (_a = commonData.events) === null || _a === void 0 ? void 0 : _a.push(formattedEventDetail);\n }\n return JSON.stringify(commonData);\n }\n /**\n * Initiates telemetry upload request if upload is not in progress or queued for uploading.\n * @param delay - optional delay(milliseconds) in uploading to server.\n */\n uploadTelemetry(delay) {\n if (this.pendingEventPayloads.length && !this.uploadToServerTimerId) {\n this.uploadToServerTimerId = window.setTimeout(() => this.performTelemetryUpload(), delay);\n }\n }\n /**\n * Uploads all the cached telemetry events to server in a single http request.\n * Once a request is attempted, the events are flushed irrespective of result of upload.\n * Once telemetry upload is completed and more events are queued we initiate next telemetry upload after some delay.\n */\n performTelemetryUpload() {\n // note: even though not a likely case, if telemetry config is changed and we are in callback mode then return.\n if (!this.pendingEventPayloads.length || !this.serverUrl) {\n this.uploadToServerTimerId = 0;\n return;\n }\n const data = this.createTelemetryRequestData(this.pendingEventPayloads);\n // note: here we just attempt one http request and if it fails we would have flushed the array.\n // we could copy the array to another local variable and insert it into this.pendingEventPayloads in network failure case if we want to retry uploading it after sometime.\n this.pendingEventPayloads = [];\n (0, utils_1.performHttpRequest)(this.serverUrl, { ...this.httpConfiguration, body: data })\n .then((response) => {\n if (!(response.status >= 200 && response.status <= 299)) {\n logger_1.Log.e(LOGTAG, `Telemetry http request failed with http error: ${response.status}`);\n }\n })\n .catch((err) => {\n logger_1.Log.e(LOGTAG, `Telemetry http request failed. error: ${err}`);\n })\n .finally(() => {\n this.uploadToServerTimerId = 0;\n // If more events got added while performing an http request, delay for sometime to avoid overloading of server.\n if (this.pendingEventPayloads.length) {\n this.uploadTelemetry(2000);\n }\n });\n }\n}\nexports.TelemetryImpl = TelemetryImpl;\n//# sourceMappingURL=telemetry.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TracingManager = exports.TracingComponent = void 0;\nconst api_1 = require(\"@opentelemetry/api\");\nexports.TracingComponent = {\n name: \"rtcutils-core\",\n version: \"2.0\"\n};\nclass TracingManager {\n constructor() {\n this.tracer = api_1.trace.getTracer(\"gfn-web-gamestream\", \"2.0\");\n }\n static getInstance() {\n if (!TracingManager.instance) {\n TracingManager.instance = new TracingManager();\n }\n return TracingManager.instance;\n }\n createSpan(operationName, fn) {\n const span = this.tracer.startSpan(operationName);\n const wrapper = async () => {\n try {\n const result = fn();\n if (result instanceof Promise) {\n return await result;\n }\n return result;\n }\n finally {\n span.end();\n }\n };\n return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), span), wrapper);\n }\n}\nexports.TracingManager = TracingManager;\n//# sourceMappingURL=tracingmanager.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.translatePlatformDetailsForClientHeader = exports.translatePlatformDetailsForPayload = void 0;\nclass TranslatedPlatformDetails {\n constructor(details) {\n this._platformDetails = details;\n this._gxtDetails = this.translateForPayload();\n this._lcarsDetails = this.translateForClientHeaders();\n }\n // -----------------------------\n // GXT / telemetry style values\n // -----------------------------\n static getMappedDeviceType(platformDeviceType) {\n // Mapping the PlatformDetails.DeviceType to GXT common fields.\n // If no mapped value, should return Undefined string.\n switch (platformDeviceType) {\n case \"CONSOLE\" /* DeviceType.CONSOLE */:\n return \"Console\" /* PayloadDeviceType.CONSOLE */;\n case \"TABLET\" /* DeviceType.TABLET */:\n return \"Tablet\" /* PayloadDeviceType.TABLET */;\n case \"PHONE\" /* DeviceType.PHONE */:\n return \"Phone\" /* PayloadDeviceType.PHONE */;\n case \"TV\" /* DeviceType.TV */:\n return \"TV\" /* PayloadDeviceType.TV */;\n case \"LAPTOP\" /* DeviceType.LAPTOP */:\n return \"Laptop\" /* PayloadDeviceType.LAPTOP */;\n case \"DESKTOP\" /* DeviceType.DESKTOP */:\n return \"Desktop\" /* PayloadDeviceType.DESKTOP */;\n default:\n return \"undefined\" /* PayloadDeviceType.UNDEFINED */;\n }\n }\n static getMappedBrowserName(browserName) {\n switch (browserName) {\n case \"Chrome\" /* BrowserName.CHROME */:\n return \"Chrome\" /* PayloadBrowserType.CHROME */;\n case \"Safari\" /* BrowserName.SAFARI */:\n return \"Safari\" /* PayloadBrowserType.SAFARI */;\n case \"Yandex\" /* BrowserName.YANDEX */:\n return \"Yandex\" /* PayloadBrowserType.YANDEX */;\n case \"Edge\" /* BrowserName.EDGE */:\n return \"Edge\" /* PayloadBrowserType.EDGE */;\n case \"Edge_Legacy\" /* BrowserName.EDGE_LEGACY */:\n return \"Edge_legacy\" /* PayloadBrowserType.EDGE_LEGACY */;\n case \"Firefox\" /* BrowserName.FIREFOX */:\n return \"Firefox\" /* PayloadBrowserType.FIREFOX */;\n case \"Samsung\" /* BrowserName.SAMSUNG */:\n return \"Samsung\" /* PayloadBrowserType.SAMSUNG */;\n case \"Chromium\" /* BrowserName.CHROMIUM */:\n return \"Chromium\" /* PayloadBrowserType.CHROMIUM */;\n case \"Opera\" /* BrowserName.OPERA */:\n return \"Opera\" /* PayloadBrowserType.OPERA */;\n case \"Brave\" /* BrowserName.BRAVE */:\n return \"Brave\" /* PayloadBrowserType.BRAVE */;\n case \"Silk\" /* BrowserName.SILK */:\n return \"Silk\" /* PayloadBrowserType.SILK */;\n case \"Unknown\" /* BrowserName.UNKNOWN */:\n // As per comment https://nvbugswb.nvidia.com/NVBugs5/redir.aspx?url=/3434141/6 ReactNative browser\n // is not supported and is mapped to undefined.\n case \"ReactNative\" /* BrowserName.REACT */:\n default:\n return \"undefined\" /* PayloadBrowserType.UNDEFINED */;\n }\n }\n static getMappedDeviceOS(platformOS) {\n switch (platformOS) {\n case \"Windows\" /* PlatformName.WINDOWS */:\n return \"Windows\" /* PayloadOSType.WINDOWS */;\n case \"macOS\" /* PlatformName.MAC */:\n return \"MacOS\" /* PayloadOSType.MACOS */;\n case \"ChromeOS\" /* PlatformName.CHROME_OS */:\n return \"ChromeOS\" /* PayloadOSType.CHROMEOS */;\n case \"Linux\" /* PlatformName.LINUX */:\n return \"Linux\" /* PayloadOSType.LINUX */;\n case \"iOS\" /* PlatformName.IOS */:\n return \"iOS\" /* PayloadOSType.IOS */;\n case \"iPadOS\" /* PlatformName.IPADOS */:\n return \"iPadOS\" /* PayloadOSType.IPADOS */;\n case \"Tizen\" /* PlatformName.TIZEN */:\n return \"Tizen\" /* PayloadOSType.TIZEN */;\n case \"WebOS\" /* PlatformName.WEBOS */:\n return \"WebOS\" /* PayloadOSType.WEBOS */;\n case \"Xbox\" /* PlatformName.XBOX */:\n return \"Xbox\" /* PayloadOSType.XBOX */;\n case \"Android\" /* PlatformName.ANDROID */:\n return \"Android\" /* PayloadOSType.ANDROID */;\n case \"SteamOS\" /* PlatformName.STEAMOS */:\n return \"SteamOS\" /* PayloadOSType.STEAMOS */;\n case \"FireTV\" /* PlatformName.FIRETV */:\n case \"FreeBSD\" /* PlatformName.FREEBSD */:\n case \"ccOS\" /* PlatformName.CCOS */:\n case \"Unknown\" /* PlatformName.UNKNOWN */:\n default:\n return \"undefined\" /* PayloadOSType.UNDEFINED */;\n }\n }\n translateForPayload() {\n const details = this._platformDetails;\n const devType = TranslatedPlatformDetails.getMappedDeviceType(details.deviceType);\n const browser = TranslatedPlatformDetails.getMappedBrowserName(details.browser);\n const os = TranslatedPlatformDetails.getMappedDeviceOS(details.os);\n return {\n os: os,\n browser: browser,\n deviceType: devType\n };\n }\n translateForClientHeaders() {\n const details = this._platformDetails;\n // TODO: Make these use more direct lookups!\n const devType = TranslatedPlatformDetails.extractDeviceTypeForBrowserClient(TranslatedPlatformDetails.getMappedDeviceType(details.deviceType));\n const browser = TranslatedPlatformDetails.extractBrowserTypeForBrowserClient(TranslatedPlatformDetails.getMappedBrowserName(details.browser));\n const os = TranslatedPlatformDetails.mapOSPlatformNameToSupportedDeviceOs(TranslatedPlatformDetails.getMappedDeviceOS(details.os));\n return {\n os: os,\n browser: browser,\n deviceType: devType\n };\n }\n get gxtDetails() {\n return this._gxtDetails;\n }\n get lcarsDetails() {\n return this._lcarsDetails;\n }\n get details() {\n return this._platformDetails;\n }\n}\n// --------------------\n// LCARS style values\n// --------------------\nTranslatedPlatformDetails.mapOSPlatformNameToSupportedDeviceOs = (osPlatformName) => {\n switch (osPlatformName) {\n case \"Windows\" /* PayloadOSType.WINDOWS */:\n return \"WINDOWS\" /* ClientHeaderOSType.WINDOWS */;\n case \"MacOS\" /* PayloadOSType.MACOS */:\n return \"MACOS\" /* ClientHeaderOSType.MACOS */;\n case \"Linux\" /* PayloadOSType.LINUX */:\n return \"LINUX\" /* ClientHeaderOSType.LINUX */;\n case \"ChromeOS\" /* PayloadOSType.CHROMEOS */:\n return \"CHROMEOS\" /* ClientHeaderOSType.CHROMEOS */;\n case \"iOS\" /* PayloadOSType.IOS */:\n return \"IOS\" /* ClientHeaderOSType.IOS */;\n case \"iPadOS\" /* PayloadOSType.IPADOS */:\n return \"IPADOS\" /* ClientHeaderOSType.IPADOS */;\n case \"WebOS\" /* PayloadOSType.WEBOS */:\n return \"WEBOS\" /* ClientHeaderOSType.WEBOS */;\n case \"Tizen\" /* PayloadOSType.TIZEN */:\n return \"TIZEN\" /* ClientHeaderOSType.TIZEN */;\n case \"Xbox\" /* PayloadOSType.XBOX */:\n return \"XBOX\" /* ClientHeaderOSType.XBOX */;\n case \"Android\" /* PayloadOSType.ANDROID */:\n return \"ANDROID\" /* ClientHeaderOSType.ANDROID */;\n case \"SteamOS\" /* PayloadOSType.STEAMOS */:\n return \"STEAMOS\" /* ClientHeaderOSType.STEAMOS */;\n case \"Shield\" /* PayloadOSType.SHIELD */:\n return \"SHIELD\" /* ClientHeaderOSType.SHIELD */;\n default:\n return \"UNKNOWN\" /* ClientHeaderOSType.UNKNOWN */;\n }\n};\nTranslatedPlatformDetails.extractDeviceTypeForBrowserClient = (deviceTypeFromPlatformAPI) => {\n switch (deviceTypeFromPlatformAPI) {\n case \"Desktop\" /* PayloadDeviceType.DESKTOP */:\n return \"DESKTOP\" /* ClientHeaderDeviceType.DESKTOP */;\n case \"Laptop\" /* PayloadDeviceType.LAPTOP */:\n return \"LAPTOP\" /* ClientHeaderDeviceType.LAPTOP */;\n case \"TV\" /* PayloadDeviceType.TV */:\n return \"TV\" /* ClientHeaderDeviceType.TV */;\n case \"Phone\" /* PayloadDeviceType.PHONE */:\n return \"PHONE\" /* ClientHeaderDeviceType.PHONE */;\n case \"Tablet\" /* PayloadDeviceType.TABLET */:\n return \"TABLET\" /* ClientHeaderDeviceType.TABLET */;\n case \"Console\" /* PayloadDeviceType.CONSOLE */:\n return \"CONSOLE\" /* ClientHeaderDeviceType.CONSOLE */;\n default:\n return \"DESKTOP\" /* ClientHeaderDeviceType.DESKTOP */;\n }\n};\n/*\n Common Headers expect UNKNOWN in place of UNDEFINED. 'Undefined' is required by Telemetry and\n is being used all over the codebase, so making the endpoint specific changes here.\n Refer to: https://confluence.nvidia.com/display/DCPC/LCARS+Documentation\n*/\nTranslatedPlatformDetails.extractBrowserTypeForBrowserClient = (browserName) => {\n switch (browserName) {\n case \"Chrome\" /* PayloadBrowserType.CHROME */:\n return \"CHROME\" /* ClientHeaderBrowserType.CHROME */;\n case \"Safari\" /* PayloadBrowserType.SAFARI */:\n return \"SAFARI\" /* ClientHeaderBrowserType.SAFARI */;\n case \"Yandex\" /* PayloadBrowserType.YANDEX */:\n return \"YANDEX\" /* ClientHeaderBrowserType.YANDEX */;\n case \"Edge\" /* PayloadBrowserType.EDGE */:\n return \"EDGE\" /* ClientHeaderBrowserType.EDGE */;\n case \"Edge_legacy\" /* PayloadBrowserType.EDGE_LEGACY */:\n return \"EDGE_LEGACY\" /* ClientHeaderBrowserType.EDGE_LEGACY */;\n case \"Firefox\" /* PayloadBrowserType.FIREFOX */:\n return \"FIREFOX\" /* ClientHeaderBrowserType.FIREFOX */;\n case \"Samsung\" /* PayloadBrowserType.SAMSUNG */:\n return \"SAMSUNG\" /* ClientHeaderBrowserType.SAMSUNG */;\n case \"Chromium\" /* PayloadBrowserType.CHROMIUM */:\n return \"CHROMIUM\" /* ClientHeaderBrowserType.CHROMIUM */;\n case \"Opera\" /* PayloadBrowserType.OPERA */:\n return \"OPERA\" /* ClientHeaderBrowserType.OPERA */;\n case \"Brave\" /* PayloadBrowserType.BRAVE */:\n return \"BRAVE\" /* ClientHeaderBrowserType.BRAVE */;\n case \"Silk\" /* PayloadBrowserType.SILK */:\n return \"SILK\" /* ClientHeaderBrowserType.SILK */;\n case \"undefined\" /* PayloadBrowserType.UNDEFINED */:\n return \"UNKNOWN\" /* ClientHeaderBrowserType.UNKNOWN */;\n default:\n return \"UNKNOWN\" /* ClientHeaderBrowserType.UNKNOWN */;\n }\n};\nlet lastTranslatedDetails;\n/**\n * Translates platform details into an enumeration of string values that GFN services expect to receive in payload content.\n * @param details PlatformDetails obtained from {@link getPlatformDetails}\n * @returns PayloadPlatformDetails as payload formatted strings, which should be used to set the values of {@link TelemetryCommonData}\n */\nfunction translatePlatformDetailsForPayload(details) {\n if ((lastTranslatedDetails === null || lastTranslatedDetails === void 0 ? void 0 : lastTranslatedDetails.details) != details) {\n lastTranslatedDetails = new TranslatedPlatformDetails(details);\n }\n return lastTranslatedDetails.gxtDetails;\n}\nexports.translatePlatformDetailsForPayload = translatePlatformDetailsForPayload;\n/**\n * Translates platform details into an enumeration of string values that GFN services expect to receive in header values.\n * @param details PlatformDetails obtained from {@link getPlatformDetails}\n * @returns Platform details as header formatted strings\n */\nfunction translatePlatformDetailsForClientHeader(details) {\n if ((lastTranslatedDetails === null || lastTranslatedDetails === void 0 ? void 0 : lastTranslatedDetails.details) != details) {\n lastTranslatedDetails = new TranslatedPlatformDetails(details);\n }\n return lastTranslatedDetails.lcarsDetails;\n}\nexports.translatePlatformDetailsForClientHeader = translatePlatformDetailsForClientHeader;\n//# sourceMappingURL=translateplatform.js.map","\"use strict\";\n// This file contains the generic public interfaces provided by GameStream typescript libraries.\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stripPartnerCustomData = exports.convertNetworkTypeToTelemetryType = exports.getRErrorDetails = exports.customFetch = exports.IsiOSVersionAtLeast = exports.IsiOSVersion = exports.IsSafariVersionAtLeast = exports.IsChromeVersionAtLeast = exports.IsChromeBrowser = exports.getNewGuid = exports.isMobile = exports.IsTV = exports.IsTouchCapable = exports.IsTouchDevice = exports.performHttpRequest = exports.DefaultHttpRequestOptions = exports.IsFirefox = exports.IsSteamDeck = exports.IsAndroidOS = exports.IsLinuxOS = exports.IsTizenOS = exports.IsMacOS = exports.IsWindowsOS = exports.IsChromeOS = exports.IsWebOS = exports.IsiPad = exports.IsiPhone = exports.IsSafari = exports.IsChromium = exports.isUnifiedErrorCode = exports.GetHexString = exports.convertToUnsignedInt = exports.GetRandNumericString = exports.IsValidIPv4 = exports.IsVisionPro = exports.IsiDevice = exports.IsiPadOS = exports.IsiOS = exports.IsXboxEdge = exports.IsEdge = exports.IsXbox = void 0;\nconst logger_1 = require(\"./logger\");\nconst tracingmanager_1 = require(\"./tracingmanager\");\nconst cancellablewait_1 = require(\"./cancellablewait\");\nconst api_1 = require(\"@opentelemetry/api\");\nconst LOGTAG = \"utils\";\nfunction IsXbox(platform) {\n return platform.os === \"Xbox\" /* PlatformName.XBOX */;\n}\nexports.IsXbox = IsXbox;\nfunction IsEdge(platform) {\n return platform.browser === \"Edge\" /* BrowserName.EDGE */;\n}\nexports.IsEdge = IsEdge;\nfunction IsXboxEdge(platform) {\n return IsXbox(platform) && IsEdge(platform);\n}\nexports.IsXboxEdge = IsXboxEdge;\nfunction IsiOS(platform) {\n return platform.os === \"iOS\" /* PlatformName.IOS */;\n}\nexports.IsiOS = IsiOS;\nfunction IsiPadOS(platform) {\n return platform.os === \"iPadOS\" /* PlatformName.IPADOS */;\n}\nexports.IsiPadOS = IsiPadOS;\nfunction IsiDevice(platform) {\n return IsiOS(platform) || IsiPadOS(platform);\n}\nexports.IsiDevice = IsiDevice;\nfunction IsVisionPro(platform) {\n return platform.deviceModel === \"VISIONPRO\" /* DeviceModel.VISION_PRO */;\n}\nexports.IsVisionPro = IsVisionPro;\n/**\n * Returns true if the input string is an ipv4 address format. X.X.X.X -> X:<0 - 255>\n **/\nfunction IsValidIPv4(ipAddress) {\n if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipAddress)) {\n return true;\n }\n return false;\n}\nexports.IsValidIPv4 = IsValidIPv4;\n/**\n * Returns an randomly generated number in string format for the requested length.\n **/\nfunction GetRandNumericString(length) {\n let multiplier = 1;\n for (let x = 1; x < length; x++) {\n multiplier = multiplier * 10;\n }\n let randnum = \"\" + Math.floor(Math.random() * multiplier);\n randnum = randnum.padEnd(length, \"0\");\n return randnum;\n}\nexports.GetRandNumericString = GetRandNumericString;\n/**\n * Convert a signed integer value to an unsigned integer value.\n *\n * Returns signed 2's complement for negative numbers and results in no-op for positive numbers.\n *\n * Unified error codes are represented as 32 bit unsigned integers.\n * Because Javascript's number type is not a 32 bit integer, these codes can be sent as a negative value.\n * For example, the code 0xC1C8B0B0 is sent as -1043812176, or -0x3E374F50 in hex. This code is converted\n * to 0xFFFFFFFFC1C8B0B0, which after extracting the rightmost 32 bits results in the original code, 0xC1C8B0B0.\n *\n * https://confluence.nvidia.com/display/GNCE/New+Schema+Format\n **/\nfunction convertToUnsignedInt(code) {\n return code >>> 0;\n}\nexports.convertToUnsignedInt = convertToUnsignedInt;\n/**\n * Returns an hex format of an integer code. The hex string starts with 0x and has 8 upper case hex format.\n **/\nfunction GetHexString(code) {\n code = convertToUnsignedInt(code);\n let hex = (\"00000000\" + code.toString(16).toUpperCase()).slice(-8);\n return \"0x\" + hex;\n}\nexports.GetHexString = GetHexString;\n/** Returns true if origin service bits are set.\n **/\nfunction isUnifiedErrorCode(code) {\n code = convertToUnsignedInt(code);\n const originService = code & 0x00ff0000;\n return originService !== 0;\n}\nexports.isUnifiedErrorCode = isUnifiedErrorCode;\n/**\n * Returns true if the browser is Chromium-based, else false.\n * Intentionally true for Edge Chromium, modern Opera, etc.\n */\nfunction IsChromium() {\n var isChromium = window.chrome;\n return !!isChromium;\n}\nexports.IsChromium = IsChromium;\n/**\n * Returns true if the browser is Safari, else false.\n **/\nfunction IsSafari(platformDetails) {\n return platformDetails.browser === \"Safari\" /* BrowserName.SAFARI */;\n}\nexports.IsSafari = IsSafari;\n/**\n * Returns true if this is an iPhone or an iPod Touch.\n */\nfunction IsiPhone(platformDetails) {\n if (platformDetails) {\n return platformDetails.os === \"iOS\" /* PlatformName.IOS */;\n }\n return /iPhone|iPod/.test(navigator.userAgent);\n}\nexports.IsiPhone = IsiPhone;\n/**\n * Returns true if this is an iPad.\n */\nfunction IsiPad(platformDetails) {\n if (platformDetails) {\n return platformDetails.os === \"iPadOS\" /* PlatformName.IPADOS */;\n }\n return /^(?!.*chrome).*safari/i.test(navigator.userAgent) && !IsiPhone() && IsTouchDevice();\n}\nexports.IsiPad = IsiPad;\n/**\n * Returns true if this is a WebOS device.\n */\nfunction IsWebOS(platformDetails) {\n return platformDetails.os === \"WebOS\" /* PlatformName.WEBOS */;\n}\nexports.IsWebOS = IsWebOS;\nfunction IsChromeOS(platformDetails) {\n return platformDetails.os === \"ChromeOS\" /* PlatformName.CHROME_OS */;\n}\nexports.IsChromeOS = IsChromeOS;\nfunction IsWindowsOS(platformDetails) {\n return platformDetails.os === \"Windows\" /* PlatformName.WINDOWS */;\n}\nexports.IsWindowsOS = IsWindowsOS;\nfunction IsMacOS(platformDetails) {\n return platformDetails.os === \"macOS\" /* PlatformName.MAC */;\n}\nexports.IsMacOS = IsMacOS;\nfunction IsTizenOS(platformDetails) {\n return platformDetails.os === \"Tizen\" /* PlatformName.TIZEN */;\n}\nexports.IsTizenOS = IsTizenOS;\nfunction IsLinuxOS(platformDetails) {\n return platformDetails.os === \"Linux\" /* PlatformName.LINUX */;\n}\nexports.IsLinuxOS = IsLinuxOS;\nfunction IsAndroidOS(platformDetails) {\n return platformDetails.os === \"Android\" /* PlatformName.ANDROID */;\n}\nexports.IsAndroidOS = IsAndroidOS;\nfunction IsSteamDeck(platformDetails) {\n return platformDetails.deviceModel === \"STEAMDECK\" /* DeviceModel.STEAMDECK */;\n}\nexports.IsSteamDeck = IsSteamDeck;\nfunction IsFirefox(platformDetails) {\n return platformDetails.browser === \"Firefox\" /* BrowserName.FIREFOX */;\n}\nexports.IsFirefox = IsFirefox;\nexports.DefaultHttpRequestOptions = {\n method: \"GET\",\n headers: {},\n body: \"\",\n retryCount: 0,\n timeout: 0,\n keepalive: false\n};\nfunction addHttpRequestAttributes(method, urlString, headers) {\n const span = api_1.trace.getActiveSpan();\n if (!span) {\n return;\n }\n let httpRequestAttributes = new Map([\n [\"component\", tracingmanager_1.TracingComponent.name],\n [\"component.version\", tracingmanager_1.TracingComponent.version],\n [\"http.method\", method],\n [\"http.url\", urlString],\n [\"type\", \"\"],\n [\"http.hostname\", \"\"],\n [\"http.path\", \"\"]\n ]);\n try {\n const url = new URL(urlString);\n httpRequestAttributes.set(\"type\", url.protocol);\n httpRequestAttributes.set(\"http.hostname\", url.hostname);\n httpRequestAttributes.set(\"http.path\", url.pathname);\n }\n catch (err) {\n logger_1.Log.e(LOGTAG, \"Failed to extract http request attributes\");\n }\n for (const [key, value] of httpRequestAttributes) {\n span.setAttribute(key, value);\n }\n span.setAttributes(headers);\n}\nfunction addResultSuccessAttributes(status) {\n const span = api_1.trace.getActiveSpan();\n if (span) {\n span.setAttribute(\"error\", \"false\");\n span.setAttribute(\"http.status_code\", status.toString());\n }\n}\nfunction addErrorAttributes() {\n const span = api_1.trace.getActiveSpan();\n if (span) {\n span.setAttribute(\"error\", \"true\");\n }\n}\n/**\n * Performs an asynchronous http(s) request. Returns a promise which resolves when the http request completed (irrespective of http status code).\n * Promise will be rejected in case of network errors.\n * resolve( { status: , data: } )\n * reject ( { code: } )\n * Call the abort method on the returned Promise to abort any pending network requests and reject the Promise. The\n * rejected object will be of the form: { code: UtilsErrorCode.UserAborted }\n * @param url- http url\n * @param options - optional http method, headers and other settings:\n {method: string; http method - GET(default), POST, PUT, DELETE\n headers: {}; Key value pairs of headers.\n body: string | FormData; Request body for POST and PUT request.\n retryCount: number; Number of retires in error cases.\n timeout: number; timeout duration.\n keepalive: boolean; Keeps the connection alive even if the tab is closed.}\n **/\nfunction performHttpRequest(url, options = exports.DefaultHttpRequestOptions, authInfo, abortController) {\n var _a;\n const method = (_a = options.method) !== null && _a !== void 0 ? _a : \"GET\";\n const request = () => {\n addHttpRequestAttributes(method, url, options.headers);\n return performHttpRequestImpl(url, options, authInfo, abortController);\n };\n return tracingmanager_1.TracingManager.getInstance().createSpan(method, request);\n}\nexports.performHttpRequest = performHttpRequest;\nfunction performHttpRequestImpl(url, options = exports.DefaultHttpRequestOptions, authInfo, abortController) {\n var _a, _b;\n let retryCount = options.retryCount === undefined ? 1 : options.retryCount + 1;\n const max_retry_count = retryCount;\n const backOffIncrement = (_a = options.backOffDelay) !== null && _a !== void 0 ? _a : 500;\n let backOffTime = backOffIncrement;\n const method = (_b = options.method) !== null && _b !== void 0 ? _b : \"GET\";\n let requestHeaders = new Headers();\n const controller = abortController !== null && abortController !== void 0 ? abortController : new AbortController();\n const addReqHeaders = (authInfo) => {\n if (authInfo) {\n switch (authInfo.type) {\n case 1 /* AuthType.JWT_GFN */:\n if (authInfo.token) {\n requestHeaders.set(\"authorization\", \"GFNJWT \" + authInfo.token);\n }\n break;\n case 2 /* AuthType.JWT_PARTNER */:\n if (authInfo.token) {\n requestHeaders.set(\"authorization\", \"GFNPartnerJWT auth=\" + authInfo.token);\n }\n break;\n }\n }\n if (!(options.headers === undefined)) {\n Object.keys(options.headers).forEach(key => {\n requestHeaders.set(key, options.headers[key]);\n });\n }\n const carrier = {};\n api_1.propagation.inject(api_1.context.active(), carrier);\n for (const [key, value] of Object.entries(carrier)) {\n requestHeaders.set(key, value);\n }\n };\n addReqHeaders(authInfo);\n const promise = new Promise((resolve_, reject_) => {\n const resolve = (response) => {\n addResultSuccessAttributes(response.status);\n resolve_(response);\n };\n const reject = (x) => {\n addErrorAttributes();\n reject_(x);\n };\n const performRequest = () => {\n const retryRequest = (errorCode) => {\n if (retryCount > 1) {\n retryCount--;\n logger_1.Log.d(LOGTAG, `Failing with ${errorCode}, retries left ${retryCount}`);\n const wait = new cancellablewait_1.CancellableWait(backOffTime, controller.signal);\n wait.getPromise()\n .then(performRequest)\n .catch((err) => {\n if (wait.isAborted()) {\n reject({\n code: 15867905 /* UtilsErrorCode.UserAborted */,\n retries: max_retry_count - retryCount\n });\n }\n else {\n // Should never occur, since we handle all the errors within performRequest.\n logger_1.Log.w(LOGTAG, `Unhandled exception caught: ${JSON.stringify(err)}`);\n reject({\n code: 3237089284 /* UtilsErrorCode.ExceptionHappened */,\n retries: max_retry_count - retryCount\n });\n }\n });\n backOffTime += backOffIncrement;\n return true;\n }\n return false;\n };\n if (!navigator.onLine) {\n reject({\n code: 3237089281 /* UtilsErrorCode.NoNetwork */,\n description: \"No network\",\n retries: max_retry_count - retryCount\n });\n }\n else {\n let reqInit = {\n method: method,\n headers: requestHeaders,\n mode: \"cors\",\n keepalive: options.keepalive,\n signal: controller.signal,\n cache: \"no-store\"\n };\n if (method !== \"GET\" && method !== \"HEAD\") {\n reqInit.body = options.body;\n }\n let fetchResponseStatus;\n // Retry for the following errors:\n // 0: Generic FetchError. See catch block for details of Bug: 3923439.\n // 19: Network error\n // 23: Timeout error\n // 503: Internal server error.\n const FETCH_GENERIC_ERR = 0;\n const retryCodes = [\n FETCH_GENERIC_ERR,\n DOMException.NETWORK_ERR,\n DOMException.TIMEOUT_ERR,\n 503\n ];\n const fetchTimeoutWait = options.timeout\n ? new cancellablewait_1.CancellableWait(options.timeout)\n : undefined;\n const promises = [];\n promises.push(fetch(url, reqInit));\n if (fetchTimeoutWait) {\n promises.push(fetchTimeoutWait.getPromise());\n }\n Promise.race(promises)\n .then(response => {\n if (fetchTimeoutWait === null || fetchTimeoutWait === void 0 ? void 0 : fetchTimeoutWait.isTimedOut()) {\n logger_1.Log.w(LOGTAG, `Timeout while performing HTTP request for Url: ${url}`);\n throw {\n code: DOMException.TIMEOUT_ERR,\n message: \"Timeout while performing HTTP request\"\n };\n }\n else if (response instanceof globalThis.Response) {\n fetchResponseStatus = response.status;\n return response.text();\n }\n })\n .then(data => {\n // If server returned 503 with no valid response, then retry\n if (!data && retryCodes.includes(fetchResponseStatus)) {\n if (retryCount > 1) {\n // We have a retryable error. Throw here and retry in catch\n throw {\n code: fetchResponseStatus,\n message: \"Internal server error.\"\n };\n }\n else {\n // We have exhausted all re-tries. Proceed to resolve as the caller will parse the\n // status codes and convert them to UEC (GsErrorCode/RErrorCode).\n logger_1.Log.w(LOGTAG, `Failing with ${fetchResponseStatus} even after ${max_retry_count} retries`);\n }\n }\n resolve({\n status: fetchResponseStatus,\n data: data !== null && data !== void 0 ? data : \"\",\n retries: max_retry_count - retryCount\n });\n })\n .catch(err => {\n // Fetch can throw the following DomExceptions:\n // https://www.w3.org/TR/2012/WD-dom-20120105/#domexception\n //\n // However, Fetch can also throw a generic failure: \"TypeError: Failed to fetch\".\n // or a non-standard AbortError that extends Error.\n // https://github.com/nodejs/node/issues/36084#issuecomment-729894622\n //\n // Consider all use cases and get an error code for the failure\n const getFetchErrorCode = (rejectReason) => {\n let errorCode = FETCH_GENERIC_ERR;\n if (rejectReason === null || rejectReason === void 0 ? void 0 : rejectReason.code) {\n errorCode = rejectReason === null || rejectReason === void 0 ? void 0 : rejectReason.code;\n }\n else if (rejectReason === null || rejectReason === void 0 ? void 0 : rejectReason.name) {\n if (rejectReason.name === \"AbortError\") {\n errorCode = DOMException.ABORT_ERR;\n }\n else if (rejectReason.name === \"NetworkError\") {\n errorCode = DOMException.NETWORK_ERR;\n }\n else if (rejectReason.name === \"TimeoutError\") {\n errorCode = DOMException.TIMEOUT_ERR;\n }\n }\n return errorCode;\n };\n // Map the DOMException to UtilsErrorCode\n const getUtilsErrorCode = (fetchError) => {\n if ([\n FETCH_GENERIC_ERR,\n DOMException.NETWORK_ERR,\n DOMException.TIMEOUT_ERR\n ].includes(fetchError)) {\n logger_1.Log.d(LOGTAG, `Fetch failing with NetworkError`);\n return 3237089282 /* UtilsErrorCode.NetworkError */;\n }\n else if (fetchError == DOMException.ABORT_ERR) {\n logger_1.Log.d(LOGTAG, `Fetch failing since user aborted`);\n return 15867905 /* UtilsErrorCode.UserAborted */;\n }\n logger_1.Log.w(LOGTAG, `Unhandled Fetch error: ${fetchError}`);\n // Unhandled error. This will end up getting mapped to DOMExceptionInGridServer\n // If we start seeing a spike in this error code, we will have to look at the logs\n // and see what other failures are occurring and then add specific handling for them.\n return 3237089284 /* UtilsErrorCode.ExceptionHappened */;\n };\n if (err instanceof Error) {\n logger_1.Log.d(LOGTAG, `Error in Fetch: ${err.message}`); // Supplying error object directly to obfuscated strings result into the empty '{}'. Take the message field to populate the missing part.\n }\n else {\n logger_1.Log.d(LOGTAG, `Error in Fetch: ${JSON.stringify(err)}, ${err}`);\n }\n // Either a fetch error or when we explicity threw on an internal server error\n const errCode = getFetchErrorCode(err);\n if (errCode == FETCH_GENERIC_ERR && options.keepalive) {\n // Bug: 3923439: https://bugs.chromium.org/p/chromium/issues/detail?id=835821\n // Preflight request for requests with keepalive specified is not supported in Chrome version 80 and below.\n // Note that, a failure here does not mean we hit this issue, but there is no other way to determine the\n // reason for the failure.\n // WAR: If Fetch fails when keepalive is set to true, we set it to false before retrying.\n options.keepalive = false;\n }\n if (retryCodes.includes(errCode)) {\n // if the retry is scheduled, returns true\n if (!retryRequest(errCode)) {\n // Failing after max_retry_count. If we are here, it could only be for network/fetch errors\n // For error codes received from server, we should not get into catch, as we check the retry count before throwing\n logger_1.Log.w(LOGTAG, `Fetch failing even after ${max_retry_count} retries. Error: ${errCode}`);\n reject({\n code: getUtilsErrorCode(errCode),\n retries: max_retry_count - retryCount\n });\n }\n }\n else {\n reject({\n code: getUtilsErrorCode(errCode),\n retries: max_retry_count - retryCount\n });\n }\n })\n .finally(() => {\n fetchTimeoutWait === null || fetchTimeoutWait === void 0 ? void 0 : fetchTimeoutWait.cancel();\n });\n }\n };\n performRequest();\n });\n return promise;\n}\nfunction IsTouchDevice() {\n var _a, _b;\n // If the primary mode of pointer input is 'coarse' we are very likely on a mostly-touch or touch-only device.\n // TODO Consider TV systems that use an on-screen pointer, which could easily be 'coarse' as well.\n return (_b = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, \"(pointer:coarse)\")) === null || _b === void 0 ? void 0 : _b.matches;\n}\nexports.IsTouchDevice = IsTouchDevice;\nfunction IsTouchCapable() {\n var _a, _b;\n // If any pointer input is 'coarse', then touch is a possible but not a primary pointer input.\n // Do not use this to enable the TouchFriendly app launch mode.\n return !!window[\"TouchEvent\"] && ((_b = (_a = window.matchMedia) === null || _a === void 0 ? void 0 : _a.call(window, \"(any-pointer:coarse)\")) === null || _b === void 0 ? void 0 : _b.matches);\n}\nexports.IsTouchCapable = IsTouchCapable;\nfunction IsTV(platformDetails) {\n // TODO Exclude Tizen mobile devices from this check\n return platformDetails.os === \"Tizen\" /* PlatformName.TIZEN */ || platformDetails.os === \"WebOS\" /* PlatformName.WEBOS */;\n}\nexports.IsTV = IsTV;\n/**\n * @param platformDetails - interface: PlatformDetails\n * @returns true if this is a mobile device, false if it is not\n **/\nfunction isMobile(platformDetails) {\n return (platformDetails.deviceType === \"PHONE\" /* DeviceType.PHONE */ ||\n platformDetails.deviceType === \"TABLET\" /* DeviceType.TABLET */);\n}\nexports.isMobile = isMobile;\nfunction getNewGuid() {\n let array = new Uint8Array(36);\n window.crypto.getRandomValues(array);\n let guid = \"\";\n for (let i = 0; i < 36; i++) {\n let randomNumber = array[i] % 16;\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n guid += \"-\";\n }\n else if (i == 14) {\n guid += \"4\";\n }\n else if (i == 19) {\n randomNumber = (randomNumber & 0x3) | 0x8;\n guid += randomNumber.toString(16);\n }\n else {\n guid += randomNumber.toString(16);\n }\n }\n logger_1.Log.i(LOGTAG, \"new guid \" + guid);\n return guid;\n}\nexports.getNewGuid = getNewGuid;\n// Check each part individually to see which is greater\n// If they are equal, move on to the next part until we've checked all\n// Treat missing parts of the actual version as 0.\n// If the actual version has fewer parts than the desired, any of the\n// additional parts of the desired version that are non-0 will cause\n// a return of false.\nfunction VersionListIsAtLeast(actual, desired) {\n for (let i = 0; i < desired.length && i < actual.length; ++i) {\n const actualPart = actual[i];\n const desiredPart = desired[i];\n if (actualPart > desiredPart) {\n return true;\n }\n else if (actualPart < desiredPart) {\n return false;\n }\n }\n if (actual.length < desired.length) {\n for (let i = actual.length; i < desired.length; ++i) {\n if (desired[i] > 0) {\n return false;\n }\n }\n }\n return true;\n}\nfunction IsChromeBrowser(platformDetails) {\n return platformDetails.browser == \"Chrome\" /* BrowserName.CHROME */;\n}\nexports.IsChromeBrowser = IsChromeBrowser;\n/**\n * Compare Chrome browser version to the desired values.\n * Missing values in either the browser version or the desired\n * version will be treated as 0.\n * NOTE: Chrome version information may be incomplete in some\n * situations - for example, limited to just the major version.\n * This means that more explcit checks might fail there even\n * if the browser actually has a higher version.\n * For example, checking for \"at least 84.0.1234.5678\" will fail\n * with a browser that reports only major version 84, even if the\n * full version is actually 84.0.1400.7800.\n */\nfunction IsChromeVersionAtLeast(platformDetails, major, minor, build, patch) {\n if (platformDetails.browser != \"Chrome\" /* BrowserName.CHROME */) {\n return false;\n }\n const desired = [major, minor !== null && minor !== void 0 ? minor : 0, build !== null && build !== void 0 ? build : 0, patch !== null && patch !== void 0 ? patch : 0];\n try {\n let browserVer = platformDetails.browserBestVer;\n // The chrome version is split into 4 parts: w.x.y.z\n const actual = browserVer.split(\".\").map(x => Number.parseInt(x));\n return VersionListIsAtLeast(actual, desired);\n }\n catch (_ex) {\n logger_1.Log.w(LOGTAG, \"Failed to parse Chrome version\");\n }\n // Return true even if we fail to parse the version. This probably means a newer version of Chrome that\n // changed the version format.\n return true;\n}\nexports.IsChromeVersionAtLeast = IsChromeVersionAtLeast;\n/**\n * NOTE: Incomplete version information can make \"at least\" checks return\n * unexpected failure.\n * For example, if a browser only provides the major version \"84\",\n * when in reality its version is \"84.0.5600.7800\", then it will\n * be considered to have version \"84.0.0.0\" when checking and\n * not match \"84.0.1234.5678\" even though it has a higher version.\n */\nfunction IsSafariVersionAtLeast(platformDetails, major, minor) {\n if (platformDetails.browser != \"Safari\" /* BrowserName.SAFARI */) {\n return false;\n }\n try {\n return isMajorMinorVersionHelper(platformDetails.browserVer, false, major, minor);\n }\n catch (_ex) {\n logger_1.Log.w(LOGTAG, \"Failed to parse Safari application version\");\n }\n // Return true even if we fail to parse the version. This probably means a newer version of Safari that\n // changed the version format.\n return true;\n}\nexports.IsSafariVersionAtLeast = IsSafariVersionAtLeast;\n/**\n * Check iOS/iPadOS browser/OS version details.\n * NOTE: Incomplete version information can make \"at least\" checks return\n * unexpected failure.\n * For example, if a browser only provides the major version \"84\",\n * when in reality its version is \"84.0.5600.7800\", then it will\n * be considered to have version \"84.0.0.0\" when checking and\n * not match \"84.0.1234.5678\" even though it has a higher version.\n * @param platformDetails - interface: PlatformDetails\n * @param exact - If true, match the exact OS version. Otherwise, check if OS version is at least the version provided\n * @param major - OS major version\n * @param minor - OS minor version [optional]\n **/\nfunction IsiOSVersionHelper(platformDetails, exact, major, minor) {\n if (!IsiDevice(platformDetails)) {\n return false;\n }\n try {\n return isMajorMinorVersionHelper(platformDetails.osVer, exact, major, minor);\n }\n catch (_ex) {\n logger_1.Log.w(LOGTAG, \"Failed to parse iOS version\");\n }\n // Return true even if we fail to parse the version, unless matching exact version. This probably means a newer version of Safari that\n // changed the version format.\n return exact ? false : true;\n}\nfunction isMajorMinorVersionHelper(stringVer, exact, major, minor) {\n const numericalVersion = stringVer.replace(/[^0-9.]/, \"\");\n const actual = numericalVersion.split(\".\").map(x => Number.parseInt(x));\n const desired = [major, minor !== null && minor !== void 0 ? minor : 0];\n if (actual.length === 1) {\n actual.push(0);\n }\n if (exact) {\n return actual.every((val, index) => val === desired[index]);\n }\n else {\n return VersionListIsAtLeast(actual, desired);\n }\n}\n/**\n * @param platformDetails - interface: PlatformDetails\n * @param major - OS major version\n * @param minor - OS minor version [optional]\n * @returns true if OS version matches the major and minor version provided, false otherwise\n **/\nfunction IsiOSVersion(platformDetails, major, minor) {\n return IsiOSVersionHelper(platformDetails, true, major, minor);\n}\nexports.IsiOSVersion = IsiOSVersion;\n/**\n * @param platformDetails - interface: PlatformDetails\n * @param major - OS major version\n * @param minor - OS minor version [optional]\n * @returns true if OS version is at least the major and minor version provided, false otherwise\n **/\nfunction IsiOSVersionAtLeast(platformDetails, major, minor) {\n return IsiOSVersionHelper(platformDetails, false, major, minor);\n}\nexports.IsiOSVersionAtLeast = IsiOSVersionAtLeast;\nfunction customFetch(url, timeoutMs = 500, data = {}) {\n const controller = new AbortController();\n window.setTimeout(() => {\n controller.abort();\n }, timeoutMs);\n return fetch(url, { ...data, signal: controller.signal })\n .then(response => {\n return response;\n })\n .catch(err => {\n throw err;\n });\n}\nexports.customFetch = customFetch;\nfunction getRErrorDetails(code, description, error) {\n return {\n code,\n description,\n error: error !== null ? error : undefined\n };\n}\nexports.getRErrorDetails = getRErrorDetails;\n/**\n * Converts the NetworkType enumeration exposed by Ragnarok and SessionSetup Library to the enums used in telemetry schema.\n * This function can deleted if we maintain consistency between library enums and telemetry schema enums in next schema version.\n * @param network - NetworkType to be converted to telemetry type.\n * @returns NetworkTypeEnum used in telemetry.\n */\nfunction convertNetworkTypeToTelemetryType(network) {\n switch (network) {\n case \"ETHERNET\" /* NetworkType.ETHERNET */:\n return \"ETHERNET\" /* NetworkTypeEnum.ETHERNET */;\n case \"WIFI\" /* NetworkType.WIFI */: // to be updated once telemetry schemas are changed.\n case \"WIFI_2_4\" /* NetworkType.WIFI_2_4 */:\n return \"WIFI_2_4\" /* NetworkTypeEnum.WIFI_2_4 */;\n case \"WIFI_5_0\" /* NetworkType.WIFI_5_0 */:\n return \"WIFI_5_0\" /* NetworkTypeEnum.WIFI_5_0 */;\n case \"MOBILE\" /* NetworkType.MOBILE */:\n return \"MOBILE\" /* NetworkTypeEnum.MOBILE */;\n case \"MOBILE_2G\" /* NetworkType.MOBILE_2G */:\n return \"MOBILE_2G\" /* NetworkTypeEnum.MOBILE_2G */;\n case \"MOBILE_3G\" /* NetworkType.MOBILE_3G */:\n return \"MOBILE_3G\" /* NetworkTypeEnum.MOBILE_3G */;\n case \"MOBILE_4G\" /* NetworkType.MOBILE_4G */:\n return \"MOBILE_4G\" /* NetworkTypeEnum.MOBILE_4G */;\n case \"MOBILE_5G\" /* NetworkType.MOBILE_5G */:\n return \"MOBILE_5G\" /* NetworkTypeEnum.MOBILE_5G */;\n case \"OTHER\" /* NetworkType.OTHER */:\n case \"BLUETOOTH\" /* NetworkType.BLUETOOTH */:\n case \"WIMAX\" /* NetworkType.WIMAX */:\n return \"OTHER\" /* NetworkTypeEnum.OTHER */;\n default:\n return \"UNKNOWN\" /* NetworkTypeEnum.UNKNOWN */;\n }\n}\nexports.convertNetworkTypeToTelemetryType = convertNetworkTypeToTelemetryType;\n/**\n * Strip partner custom data from a message\n * @param message Message to strip custom data from\n * @returns Version of the message with the data stripped out\n */\nfunction stripPartnerCustomData(message) {\n const secretBlock = /(partnerCustomData\" *: *\")((\\\\\"|[^\"])*)(?=\")/g;\n return message.replace(secretBlock, \"$1***\");\n}\nexports.stripPartnerCustomData = stripPartnerCustomData;\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CHANGELIST = void 0;\nexports.CHANGELIST = \"rel-66-17789033\";\n//# sourceMappingURL=version.js.map","\"use strict\";\n// Helper utilities to create Workers or SharedWorkers (\"Workers\") from classes.\n// All code to be run in a Worker should be in a class that implements DoWork.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.stopWorker = exports.makeSharedWorkerFromInterface = exports.makeWorkerFromInterface = void 0;\n// Call makeWorkerFromInterface() or makeSharedWorkerFromInterface() with the class\n// definition object (*not* an instance!), which must implement DoWork and hence the\n// doWork() function. Said function must return an object that can be transferred\n// through a Worker's or a MessagePort's postMessage() function.\n// Note:\n// Logging DOES NOT WORK in a Worker (yet)!\n// The Worker will be ephemeral - close it by calling stopWorker().\n// Sometimes Workers don't work - have a fallback as well!\n// Implementation note:\n// The regular expression in the class source code extraction (in addClassHierarchy)\n// is necessary because of the development client's local-compile stage, with any classes\n// that are derived from classes in another module.\n// That makes derived classes have the source form:\n// class DerivedWorker extends .\n// The string appears in the source but is only meaningful in-place,\n// and specifically is invalid when the code is running in a Worker.\n// The regexp attempts to fix that, as well as *not* breaking things when running in\n// the production mode - which doesn't have that 'namespace' issue.\nconst logger_1 = require(\"./logger\");\nconst LOGTAG = \"workerlogger\";\nfunction addClassHierarchy(interfaceRef, blobStrings) {\n let classes = [];\n do {\n classes.push(interfaceRef);\n interfaceRef = Object.getPrototypeOf(interfaceRef);\n } while (interfaceRef.name != \"\");\n // Must reverse the hierarchy. Classes in JavaScript are not 'hoisted', so\n // the base class definitions must precede the derived class definitions.\n // The normal hierarchy walk above would have the derived classes first.\n classes.reverse();\n for (let klaz of classes) {\n blobStrings.push(klaz.toString().replace(/(extends )[^ {]*\\.([^ ]*[ {])/, \"$1$2\"));\n }\n}\nfunction makeWorkerUrlFromInterface(interfaceRef, messageHandler, errorHandler, connectHandler) {\n let blobStrings = [];\n addClassHierarchy(interfaceRef, blobStrings);\n // Add the message handling function for dedicated Workers\n blobStrings.push(`${messageHandler.toString()}`);\n if (connectHandler) {\n blobStrings.push(`${connectHandler.toString()}`);\n const onconnectStr = `onconnect = (event) => { ${connectHandler.name}(${interfaceRef.name}, event, ${messageHandler.name}); };`;\n blobStrings.push(onconnectStr);\n // The connectHandler must set up a port.onmessage handler if it wants one.\n }\n else {\n const onmessageStr = `onmessage = (event) => { ${messageHandler.name}(${interfaceRef.name}, event); };`;\n blobStrings.push(onmessageStr);\n }\n blobStrings.push(`${errorHandler.toString()}`);\n const onerrorStr = `onerror = (event) => { ${errorHandler.name}(event); };`;\n blobStrings.push(onerrorStr);\n const workerBlob = new Blob(blobStrings, { type: \"text/javascript\" });\n return URL.createObjectURL(workerBlob);\n}\nfunction makeWorkerFromInterface(interfaceRef, callback, errorCallback) {\n // The following check:\n // ensures that the DoWork-generating interface reference is usable\n // prevents the Closure Compiler from 'optimizing' away the body of the class\n if (!interfaceRef.prototype.doWork) {\n throw new Error(\"Invalid Worker class provided\");\n }\n const workerUrl = makeWorkerUrlFromInterface(interfaceRef, commonMessageHandler, commonErrorHandler);\n const worker = new Worker(workerUrl);\n // Immediately revoke the object URL; it's no longer needed directly.\n URL.revokeObjectURL(workerUrl);\n // Setup the worker and the result callback.\n setupWorkerAndCallback(worker, callback, errorCallback);\n return worker;\n}\nexports.makeWorkerFromInterface = makeWorkerFromInterface;\nfunction makeSharedWorkerFromInterface(interfaceRef, callback, errorCallback) {\n const w = window;\n if (typeof w[\"SharedWorker\"] == \"undefined\") {\n throw new Error(\"SharedWorker not supported\");\n }\n // The following check:\n // ensures that the DoWork-generating interface reference is usable\n // prevents the Closure Compiler from 'optimizing' away the body of the class\n if (!interfaceRef.prototype.doWork) {\n throw new Error(\"Invalid Worker class provided\");\n }\n const workerUrl = makeWorkerUrlFromInterface(interfaceRef, commonMessageHandler, commonErrorHandler, connectHandler);\n const worker = new w[\"SharedWorker\"](workerUrl);\n // Immediately revoke the object URL; it's no longer needed directly.\n URL.revokeObjectURL(workerUrl);\n // Setup the worker and the result callback.\n setupWorkerAndCallback(worker, callback, errorCallback);\n return worker;\n}\nexports.makeSharedWorkerFromInterface = makeSharedWorkerFromInterface;\nconst workerCloseTimers = new Map();\nfunction isWorkerStopping(worker) {\n return workerCloseTimers.has(worker);\n}\nfunction getWorkerOrPort(worker) {\n return \"port\" in worker ? worker.port : worker;\n}\nfunction stopWorker(worker) {\n if (!worker) {\n return;\n }\n const workerPort = getWorkerOrPort(worker);\n stopWorkerInternal(workerPort);\n}\nexports.stopWorker = stopWorker;\nfunction stopWorkerInternal(workerPort) {\n if (isWorkerStopping(workerPort)) {\n return;\n }\n const postMessage = workerPort.postMessage.bind(workerPort);\n const terminateWorker = () => {\n const timer = workerCloseTimers.get(workerPort);\n if (timer) {\n clearTimeout(timer);\n workerCloseTimers.delete(workerPort);\n }\n // Only dedicated Workers have a terminate() function.\n // For shared workers, the best we can do is close our MessagePort. The shared worker\n // may still be running, but it won't communicate with us\n if (workerPort instanceof Worker) {\n workerPort.terminate();\n }\n else if (workerPort instanceof MessagePort) {\n workerPort.close();\n }\n };\n // Make sure to close the worker; it seems to take a huge amount of CPU otherwise.\n postMessage({ cmd: 2 /* Commands.CLOSE */, data: null });\n // Use a timeout to give the Worker some time to exit cleanly.\n const timer = window.setTimeout(terminateWorker, 150);\n workerCloseTimers.set(workerPort, timer);\n}\n// Setup the message and error callbacks for a worker\nfunction setupWorkerAndCallback(worker, callback, errorCallback) {\n const workerPort = getWorkerOrPort(worker);\n const postMessage = workerPort.postMessage.bind(workerPort);\n let hadError = false;\n const errHandler = (error) => {\n if (hadError) {\n return;\n }\n hadError = true;\n logger_1.Log.e(LOGTAG, `Error in Worker: ${error} of type ${typeof error}`);\n stopWorkerInternal(workerPort);\n errorCallback(error);\n };\n workerPort.onmessage = event => {\n const cmdMsg = event.data;\n let cmd = cmdMsg.cmd;\n let data = cmdMsg.data;\n switch (cmd) {\n case 1 /* Commands.CREATE_SUCCESS */:\n postMessage({ cmd: 3 /* Commands.WORK */, data: null });\n break;\n case 4 /* Commands.RESULT */: {\n callback(data);\n stopWorkerInternal(workerPort);\n break;\n }\n case 5 /* Commands.ERROR */:\n errHandler(data);\n break;\n }\n };\n // messageerror - received a non-deserializable Message.\n if (\"onmessageerror\" in workerPort) {\n // SharedWorker's MessagePort\n workerPort[\"onmessageerror\"] = errHandler;\n }\n // Worker and SharedWorker's error handler.\n // Should include errors propagated from the Worker context.\n worker[\"onerror\"] = errHandler;\n // Post a message to create the DoWork instance class.\n postMessage({ cmd: 0 /* Commands.CREATE */, data: null });\n}\n// The connect handler function that runs in the SharedWorker context.\n// Not used for dedicated Workers.\nfunction connectHandler(func, event, messageHandler) {\n const thisObj = globalThis;\n thisObj.port = event.ports[0];\n thisObj.port.onmessage = messageHandler.bind(self, func);\n}\n// The message handler function that runs in the Worker or SharedWorker context.\nfunction commonMessageHandler(func, event) {\n var _a, _b;\n const thisObj = globalThis;\n // Create global object to hold all message handlers in this SharedWorker.\n thisObj.msgHandlers = (_a = thisObj.msgHandlers) !== null && _a !== void 0 ? _a : {};\n const cmdMsg = event.data;\n let cmd = cmdMsg.cmd;\n let data = cmdMsg.data;\n // TODO: Update this for different worker global scopes (dedicated, shared, service)\n let messagePoster = \"port\" in thisObj ? thisObj[\"port\"] : self;\n //let messagePoster = self as any; // Dedicated Worker\n //let messagePoster = thisObj.port; // Shared Worker\n //let messagePoster = ; // Service Worker\n switch (cmd) {\n case 0 /* Commands.CREATE */:\n const msgHandler = new func();\n thisObj.msgHandlers[func.name] = msgHandler;\n messagePoster[\"postMessage\"]({ cmd: 1 /* Commands.CREATE_SUCCESS */, data: null });\n break;\n case 2 /* Commands.CLOSE */:\n // Close Worker\n (_b = self === null || self === void 0 ? void 0 : self.close) === null || _b === void 0 ? void 0 : _b.call(self);\n break;\n case 3 /* Commands.WORK */: {\n const msgHandler = thisObj.msgHandlers[func.name];\n // Use Promise.resolve() to handle async as well as normal functions.\n // Normal functions return their value, async return a Promise.\n // Promise.resolve() allows using .then for results of both forms.\n Promise.resolve(msgHandler.doWork()).then(value => {\n messagePoster[\"postMessage\"]({ cmd: 4 /* Commands.RESULT */, data: value });\n });\n break;\n }\n // TODO: Allow handling custom messages.\n default:\n throw new Error(`Unknown message: ${cmd}:${data}`);\n }\n}\n// The error handling function that runs in the Worker or SharedWorker context.\n// Should capture all uncaught exceptions and errors, and report them to the main thread.\nfunction commonErrorHandler(event) {\n const thisObj = globalThis;\n // TODO: Update this for different worker global scopes (dedicated, shared, service)\n let messagePoster = \"port\" in thisObj ? thisObj[\"port\"] : self;\n messagePoster[\"postMessage\"]({ cmd: 5 /* Commands.ERROR */, data: event });\n}\n//# sourceMappingURL=workerutils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* Typings to be exposed to library user */\n__exportStar(require(\"./src/indexsessioncontrol\"), exports);\n__exportStar(require(\"./src/indexgridserver\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./index\"), exports);\n__exportStar(require(\"./src/dependencies\"), exports);\n//# sourceMappingURL=internal.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"../../rtcutils-core/index\"), exports);\n//# sourceMappingURL=dependencies.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PassThruServer = exports.GridServer = void 0;\nconst dependencies_1 = require(\"./dependencies\");\nconst telemetryhandler_1 = require(\"./telemetryhandler\");\nconst sessioncontrolimpl_1 = require(\"./sessioncontrolimpl\");\nconst sessioncontrolutils_1 = require(\"./sessioncontrolutils\");\nconst LOGTAG = \"gridserver\";\n/**\n * Converts the legacy SessionParams to SessionParameters so that SessionControlImpl functions can be used in this class.\n * @param startParams - legacy SessionParams\n * @returns SessionParameters to be passed to base class.\n */\nfunction convertSessionParamsToSessionParameters(startParams) {\n var _a;\n // Few fields of SessionParams like shortName, networkSessionId, sessionId are not needed.\n // Rest all fields match, except for monitorSettings which is mandatory in SessionParameters.\n const sessionParameters = {\n monitorSettings: [],\n ...startParams\n };\n // If monitorSettings were already given, don't add streamParams\n if (sessionParameters.monitorSettings.length === 0) {\n for (const stream of (_a = startParams.streamParams) !== null && _a !== void 0 ? _a : []) {\n sessionParameters.monitorSettings.push({\n heightInPixels: stream.height,\n framesPerSecond: stream.fps,\n widthInPixels: stream.width\n });\n }\n }\n return sessionParameters;\n}\n/**\n * Converts the Session interfaces returned by SessionControl library to GridSession object.\n * @param session - new Session interface\n * @returns legacy GridSession object.\n */\nfunction convertSessionToGridSession(session) {\n // New Session interface just provides an array of connectionInfo.\n // Legacy GridSession requires signalConnectionInfo to be set.\n // Set the connectionInfo.usage.SIGNALING details to GridSession.signalConnectionInfo\n // Note: Only ragnarok uses the signaling port, all other platforms are using the GridSession.mediaConnectionInfo which includes.\n // GridSession.mediaConnectionInfo contains two signaling ports from server in non browser case.\n const signalConnectionInfo = {\n ip: \"\",\n port: 0,\n protocol: \"\"\n };\n for (const connectionInfo of session.connectionInfo) {\n if (connectionInfo.usage === 14 /* Usage.SIGNALING */) {\n signalConnectionInfo.ip = connectionInfo.ip;\n signalConnectionInfo.port = connectionInfo.port;\n signalConnectionInfo.protocol =\n connectionInfo.appLevelProtocol === 5 /* AppLevelProtocol.HTTPS */ ? \"https\" : \"http\";\n signalConnectionInfo.resourcePath = connectionInfo.resourcePath;\n break;\n }\n }\n const gridSession = {\n signalConnectionInfo: signalConnectionInfo,\n mediaConnectionInfo: session.connectionInfo,\n streamInfo: [],\n clientLocale: \"\",\n ...session\n };\n for (const monitor of session.monitorSettings) {\n gridSession.streamInfo.push({\n width: monitor.widthInPixels,\n height: monitor.heightInPixels,\n fps: monitor.framesPerSecond,\n sdrHdrMode: monitor.sdrHdrMode\n });\n }\n return gridSession;\n}\n/**\n * Converts Session array to legacy ActiveSessionInfo object.\n * @param activeSessions - array of Session objects\n * @returns Array of legacy ActiveSessionInfo\n */\nfunction convertSessionsToActiveSessionInfo(activeSessions) {\n let sessionList = [];\n if (activeSessions) {\n for (const session of activeSessions) {\n let activeSession = {\n sessionId: session.sessionId,\n appId: session.appId,\n state: session.state,\n appLaunchMode: session.appLaunchMode\n };\n sessionList.push(activeSession);\n }\n }\n return sessionList;\n}\nclass GridServer extends sessioncontrolimpl_1.SessionControlImpl {\n constructor(platformDetails, emitEventsSynchronously) {\n super();\n this.subSessionId = \"\";\n this.subSessionsIdMap = new Map();\n this.clearLogCallback = false;\n this.launchRequestInfoMap = new Map();\n this.telemetryCallback = (telemetry) => {\n this.eventEmitter.emit(\"TelemetryEvent\" /* GS_EVENTS.TELEMETRY_EVENT */, telemetry);\n };\n this.sessionUpdateHandler = (sessionUpdate) => {\n this.sendSessionUpdateEvent(sessionUpdate);\n };\n this.platformDetails = platformDetails;\n this.eventEmitter = new dependencies_1.LegacyLogEmitter(\"Log\" /* GS_EVENTS.LOG_EVENT */, emitEventsSynchronously);\n // In Ragnarok 2.0 or SessionControl 2.0 usage, clients will use registerLogCallback for receiving logs.\n // For legacy use case we need to emit events from GridServer and GridApp.\n // In Ragnarok 1.0, GridApp would have registered a callback with the logger.\n // Only when clients are using standalone GridServer will logs be emitted from GridServer.\n if (!dependencies_1.Log.isCallbackRegistered()) {\n this.clearLogCallback = true;\n dependencies_1.Log.setLogCallback(this.eventEmitter.onLogEvent.bind(this.eventEmitter));\n }\n // In legacy mode we need to emit an event, register a callback which will emit an event.\n telemetryhandler_1.ScTelemetryHandler.configure({ option: this.telemetryCallback });\n }\n initialize(initParams) {\n var _a;\n dependencies_1.Log.i(LOGTAG, `Gridserver version: ${dependencies_1.PackageVersion}`);\n // Convert legacy init parameters to new SessionControl::InitializeParameters\n // Main differences are:\n // deviceHashId is renamed to deviceId, clientStreamer is string.\n // ClientIdentification and ClientVersion will be hardcoded in SessionControl.\n // appUserAgent, ecomEnabled, authTokenCallback is removed as they are no longer needed in GFN.\n const initializeParameters = {\n deviceId: (_a = initParams.deviceHashId) !== null && _a !== void 0 ? _a : \"\",\n ...initParams,\n clientStreamer: initParams.clientStreamer.toString()\n };\n // initialize base class.\n super.init(initializeParameters);\n telemetryhandler_1.ScTelemetryHandler.resetCache();\n dependencies_1.Log.d(LOGTAG, \"grid server initialized\");\n }\n /**\n * This method should be called before recreating GridServer object\n **/\n uninitialize() {\n this.cancelSessionSetup();\n if (this.clearLogCallback) {\n // Clear the registered callback.\n dependencies_1.Log.setLogCallback();\n }\n this.eventEmitter.removeAllListeners();\n }\n addListener(eventname, handler) {\n this.eventEmitter.addListener(eventname, handler);\n }\n removeListener(eventname, handler) {\n this.eventEmitter.removeListener(eventname, handler);\n }\n updateTelemetryEventIds(telemetryEventIds) {\n telemetryhandler_1.ScTelemetryHandler.updateTelemetryEventIds(telemetryEventIds);\n }\n /**\n * This method can be used to get all active sessions for current logged in user.\n * Expect ACTIVE_SESSIONS_RESULT event for results.\n **/\n getAllActiveSessions() {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.getAllActiveSessionsImpl();\n };\n dependencies_1.TracingManager.getInstance().createSpan(\"GetSessionList\" /* TracingOperation.GetSessionList */, request);\n }\n async getAllActiveSessionsImpl() {\n dependencies_1.Log.d(LOGTAG, \"GridServer:: GetActiveSessions++\");\n if (!this.serverAddress) {\n let result = {\n sessionList: [],\n error: {\n code: 3237093383 /* GsErrorCode.GridServerNotInitialized */,\n description: \"GridServer not initialized\"\n }\n };\n this.eventEmitter.emit(\"ActiveSessionsResult\" /* GS_EVENTS.ACTIVE_SESSIONS_RESULT */, result);\n this.addResultToSpan(3237093383 /* GsErrorCode.GridServerNotInitialized */);\n return;\n }\n let url = this.protocol + this.serverAddress + \"/v2/session\";\n await this.performSessionRequest(sessioncontrolimpl_1.SessionRequestType.GET_ACTIVE_SESSIONS, url, \"\")\n .then((response) => {\n let result = {\n sessionList: convertSessionsToActiveSessionInfo(response.activeSessions)\n };\n if (response.result != 15859712 /* GsErrorCode.Success */) {\n let err = {\n code: response.result,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(response.result)\n };\n result.error = err;\n dependencies_1.Log.e(LOGTAG, `ActiveSessions request failed with ${(0, dependencies_1.GetHexString)(err.code)}`);\n }\n else {\n dependencies_1.Log.d(LOGTAG, \"ActiveSessionRequest completed\");\n }\n this.addResultToSpan(response.result);\n this.eventEmitter.emit(\"ActiveSessionsResult\" /* GS_EVENTS.ACTIVE_SESSIONS_RESULT */, result);\n })\n .catch(error => {\n dependencies_1.Log.e(LOGTAG, \"exception while performing getAllActiveSessions request. error: \" +\n error.message);\n dependencies_1.Log.e(LOGTAG, `Exception: ${error} stack: ${error.stack}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(error, \"getAllActiveSessions\", LOGTAG + \".ts\", 0, 0, true);\n let result = {\n sessionList: [],\n error: {\n code: 3237093384 /* GsErrorCode.DOMExceptionInSessionControl */,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(3237093384 /* GsErrorCode.DOMExceptionInSessionControl */)\n }\n };\n this.addResultToSpan(3237093384 /* GsErrorCode.DOMExceptionInSessionControl */);\n this.eventEmitter.emit(\"ActiveSessionsResult\" /* GS_EVENTS.ACTIVE_SESSIONS_RESULT */, result);\n });\n dependencies_1.Log.d(LOGTAG, \"GridServer:: GetActiveSessions--\");\n }\n resetSubSessionId(subSessionId, sessionId = \"\") {\n dependencies_1.Log.d(LOGTAG, `resetSubSessionId with sessionId:${sessionId} and subSessionId:${subSessionId}`);\n this.subSessionId = subSessionId;\n telemetryhandler_1.ScTelemetryHandler.setSessionId(sessionId);\n telemetryhandler_1.ScTelemetryHandler.setSubSessionId(subSessionId);\n const value = this.subSessionsIdMap.get(subSessionId);\n if (value === undefined || value === \"\") {\n this.subSessionsIdMap.set(subSessionId, sessionId);\n }\n else {\n dependencies_1.Log.w(LOGTAG, `${sessionId} is already in map`);\n }\n }\n /**\n * This method returns the current sessionId.\n **/\n getSessionId() {\n var _a;\n return (_a = this.subSessionsIdMap.get(this.subSessionId)) !== null && _a !== void 0 ? _a : \"\";\n }\n /**\n * This method returns the current subSessionId.\n **/\n getSubSessionId() {\n return this.subSessionId;\n }\n /**\n * This method can be used to resume (PUT) or start (POST) a session.\n * Result is returned in promise with GridSession object.\n * @param startParams - object of SessionParams object.\n * @param action - value from SESSIONMODIFY_ACTION for resume or starting session.\n * @param sessionId - sessionId in case of resume\n **/\n putOrPostSession(startParams, action, sessionId) {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.putOrPostSessionImpl(startParams, action, sessionId);\n };\n return dependencies_1.TracingManager.getInstance().createSpan(sessionId ? \"PutSession\" /* TracingOperation.PutSession */ : \"PostSession\" /* TracingOperation.PostSession */, request);\n }\n putOrPostSessionImpl(startParams, action, sessionId) {\n var _a;\n const isResume = !!sessionId;\n // todo: the resetSubSessionId is a messed up function, fix it in future CLs.\n this.resetSubSessionId((0, dependencies_1.getNewGuid)(), sessionId);\n if (!this.serverAddress) {\n const err = {\n code: 3237093383 /* GsErrorCode.GridServerNotInitialized */,\n description: \"GridServer not initialized\"\n };\n return this.addErrorAttributesAndReject(err);\n }\n if (this.putOrPostRequestController) {\n const err = {\n code: 3237093382 /* GsErrorCode.PutOrPostInProgress */,\n description: \"Previous PutOrPost call is still in progress\"\n };\n return this.addErrorAttributesAndReject(err);\n }\n telemetryhandler_1.ScTelemetryHandler.setCmsId(startParams.appId);\n // todo: The cache for these zone variables should be directly tied to the lifetime of a session, not global in GridServer\n this.zoneName = undefined;\n this.zoneAddress = undefined;\n this.gpuType = undefined;\n const launchRequestInfo = telemetryhandler_1.ScTelemetryHandler.getGameLaunchRequestEvent(this.serverAddress, isResume, sessionId);\n // GridServer accepts networkTestId via SessionParams whereas SessionControl relies on the eventIds configured in Telemetry class.\n // Since the Telemetry handler relies on the networkTestId provided via Telemetry class, update the value with whats passed by client.\n launchRequestInfo.networkSessionId = (_a = startParams.networkSessionId) !== null && _a !== void 0 ? _a : \"\";\n const sessionParameters = convertSessionParamsToSessionParameters(startParams);\n let url = this.createSessionRequestURL(sessionParameters, sessionId);\n let body = this.getSessionRequestData(sessionParameters, isResume, this.subSessionId);\n let startTime = performance.now();\n return new Promise((resolve, reject) => {\n const abortController = new AbortController();\n this.putOrPostRequestController = abortController;\n this.performSessionRequest(isResume ? sessioncontrolimpl_1.SessionRequestType.RESUME_SESSION : sessioncontrolimpl_1.SessionRequestType.CREATE_SESSION, url, body, abortController, sessionId)\n .then((response) => {\n var _a, _b, _c, _d, _e;\n launchRequestInfo.launchDuration = Math.round(performance.now() - startTime);\n // needed to update launchRequestInfo in case of post session.\n if ((_a = response.session) === null || _a === void 0 ? void 0 : _a.sessionId) {\n launchRequestInfo.sessionId = (_b = response.session) === null || _b === void 0 ? void 0 : _b.sessionId;\n sessionId = (_c = response.session) === null || _c === void 0 ? void 0 : _c.sessionId;\n }\n // Use response.serverId in case there was an error, since this is our only communication with the PM during this session\n this.zoneName = response.serverId || this.zoneName;\n let gridSession;\n if (response.session) {\n gridSession = convertSessionToGridSession(response.session);\n gridSession.subSessionId = this.subSessionId;\n this.updateSessionZoneInfo(gridSession);\n }\n launchRequestInfo.zoneName = (_d = this.zoneName) !== null && _d !== void 0 ? _d : \"\";\n // After a putOrPostSession call, clients can invoke cancelSessionSetup() to terminate this request which invokes abort on the abortcontroller.\n // If fetch request is in progress or we are waiting between retries the performSessionRequest and performHttpRequest handles it gracefully.\n // However if the request was completed and JS is waiting for the next resolve/reject execution the abort signal will not be caught in current execution.\n // The below check will prevent us from providing the wrong update to clients.\n if (abortController.signal.aborted && !(0, sessioncontrolutils_1.isCancelCode)(response.result)) {\n response.result = 15867905 /* GsErrorCode.SessionSetupCancelled */;\n dependencies_1.Log.d(LOGTAG, `overriding result to sessionsetupcancelled`);\n // todo: BifrostClientSDK sends delete request in this case, GridServer doesn't.\n // evaluate how addition of delete request affects android client.\n }\n if (response.result == 15859712 /* GsErrorCode.Success */) {\n dependencies_1.Log.d(LOGTAG, `Received session: ${sessionId}`);\n this.resetSubSessionId(this.getSubSessionId(), sessionId);\n if (((_e = response.session) === null || _e === void 0 ? void 0 : _e.state) == \"ready_for_connection\" /* SessionState.READY_FOR_CONNECTION */) {\n launchRequestInfo.result = (0, dependencies_1.GetHexString)(15859712 /* GsErrorCode.Success */);\n telemetryhandler_1.ScTelemetryHandler.sendGameLaunchRequestEvent(launchRequestInfo);\n }\n else {\n // Else, we would get into getSession() polling. Add to the cache\n this.launchRequestInfoMap.set(launchRequestInfo.sessionId, launchRequestInfo);\n }\n this.addResultToSpan(response.result);\n resolve(gridSession);\n }\n else {\n if (response.result === 15867907 /* GsErrorCode.RequestCancelled */) {\n response.result = 15867905 /* GsErrorCode.SessionSetupCancelled */;\n }\n const err = {\n code: response.result,\n sessionId: sessionId,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(response.result),\n sessionList: convertSessionsToActiveSessionInfo(response.activeSessions)\n };\n dependencies_1.Log.e(LOGTAG, `session request failed with ${(0, dependencies_1.GetHexString)(err.code)}`);\n // Send the telemetry for the failing cases as well\n launchRequestInfo.result = (0, dependencies_1.GetHexString)(err.code);\n telemetryhandler_1.ScTelemetryHandler.sendGameLaunchRequestEvent(launchRequestInfo);\n this.addResultToSpan(err.code);\n reject(err);\n }\n })\n .catch(error => {\n // performSessionRequest always resolves, catch here should be an exception in catch block of performSessionRequest or above response handling.\n let err = {\n code: 3237093384 /* GsErrorCode.DOMExceptionInSessionControl */,\n sessionId: sessionId,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(3237093384 /* GsErrorCode.DOMExceptionInSessionControl */)\n };\n dependencies_1.Log.e(LOGTAG, \"exception while performing putOrPostsession request. error: \" +\n error.message);\n dependencies_1.Log.e(LOGTAG, `Exception: ${error} stack: ${error.stack}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(error, \"putOrPostSession\", LOGTAG + \".ts\", 0, 0, true);\n // The code flow should be generally structured as\n // 1. perform all operations\n // 2. send the required telemetry event\n // 3. resolve or reject.\n // If we add more code block between telemetry collection and resolve/reject and it throws an exception then we will end up collecting multiple telemetry events.\n // The problem in this case would be not the duplicate telemetry but the code implementation.\n launchRequestInfo.result = (0, dependencies_1.GetHexString)(err.code);\n telemetryhandler_1.ScTelemetryHandler.sendGameLaunchRequestEvent(launchRequestInfo);\n this.addResultToSpan(err.code);\n reject(err);\n });\n }).finally(() => {\n this.putOrPostRequestController = undefined;\n });\n }\n /**\n * This method can be used to get a session details belonging to a session id for resume scenario or during polling.\n * Pass isPoll flag true when post request is made for session setup.\n * Result is returned in promise with GridSession object.\n * @param sessionId - sessionId in case of resume.\n * @param isPoll - used in post request.\n **/\n getSession(_sessionId, isPoll) {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.getSessionImpl(_sessionId, isPoll);\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"GetSession\" /* TracingOperation.GetSession */, request);\n }\n getSessionImpl(_sessionId, isPoll) {\n if (!this.serverAddress) {\n const err = {\n code: 3237093383 /* GsErrorCode.GridServerNotInitialized */,\n description: \"GridServer not initialized\"\n };\n return this.addErrorAttributesAndReject(err);\n }\n if (isPoll) {\n // Note: session setup process uses the base class functionalities which resolves with SessionStartResumeResult.\n // the handler of this promise converts the SessionStartResumeResult to either GridSession or throws an err to reject the promise handling.\n return new Promise((resolve, reject) => {\n const sessionUrl = this.getUrlForSession(_sessionId);\n const server = new URL(sessionUrl).hostname;\n // Use the telemetry event cached in putOrPostSession\n let launchRequestInfo = this.launchRequestInfoMap.get(_sessionId);\n if (!launchRequestInfo) {\n dependencies_1.Log.e(LOGTAG, `Cached launch request info not found for getSession polling request with sessionId: ${_sessionId}`);\n launchRequestInfo = telemetryhandler_1.ScTelemetryHandler.getGameLaunchRequestEvent(server, false, _sessionId);\n }\n else {\n this.launchRequestInfoMap.delete(_sessionId);\n }\n const abortController = new AbortController();\n this.getSessionRequestController = abortController;\n this.sessionSetupData = {\n resolve: resolve,\n reject: reject,\n sessionId: _sessionId,\n subSessionId: this.subSessionId,\n sessionUpdateCallback: this.sessionUpdateHandler,\n lastQueuePosition: Number.MAX_VALUE,\n isSessionInQueue: false,\n cancelController: abortController,\n startTime: performance.now(),\n launchTelemetryEvent: launchRequestInfo\n };\n // Use the base class function which performs GET session request, processes Ads if required\n // and resolves with the SessionStartResumeResult\n this.performSessionSetupPollingRequest();\n })\n .then((result) => {\n let gridSession;\n if (result.session) {\n gridSession = convertSessionToGridSession(result.session);\n // cache the zone information for getZoneName/getZoneAddress/getGpuType function support\n this.updateSessionZoneInfo(gridSession);\n }\n if (result.code === 15859712 /* GsErrorCode.Success */ && gridSession) {\n return gridSession;\n }\n else {\n let err = {\n code: result.code,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(result.code)\n };\n throw err;\n }\n })\n .finally(() => {\n // Required in case of exceptions. Will also be handled during promise resolve.\n this.adsStateInfo.clear();\n this.adUpdateArray.clear();\n this.sessionSetupData = undefined;\n });\n }\n else {\n const url = this.getUrlForSession(_sessionId);\n // one time session info request.\n return this.performSessionRequest(sessioncontrolimpl_1.SessionRequestType.GET_SESSIONINFO, url, \"\", undefined, _sessionId).then((response) => {\n this.addResultToSpan(response.result);\n if (response.result === 15859712 /* GsErrorCode.Success */ && response.session) {\n const gridSession = convertSessionToGridSession(response.session);\n return gridSession;\n }\n else {\n let err = {\n code: response.result,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(response.result)\n };\n throw err;\n }\n });\n }\n }\n /**\n * This method can be used to send a delete request for a given session id.\n * Pass isPoll flag true when post request is made for session setup.\n * Result is returned in promise of type void.\n * @param sessionId - sessionId to delete\n * @note Will not cancel active operations.\n * @note If putOrPostSession or getSession is in progress, should first call cancelSessionSetup\n **/\n sendDeleteRequest(sessionId) {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.sendDeleteRequestImpl(sessionId);\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"DeleteSession\" /* TracingOperation.DeleteSession */, request);\n }\n sendDeleteRequestImpl(sessionId) {\n if (!this.serverAddress) {\n const err = {\n code: 3237093383 /* GsErrorCode.GridServerNotInitialized */,\n description: \"Gridserver not initialized\"\n };\n return this.addErrorAttributesAndReject(err);\n }\n let url = this.getUrlForSession(sessionId);\n return new Promise((resolve, reject) => {\n dependencies_1.Log.d(LOGTAG, `sending delete request for session${sessionId}`);\n this.performSessionRequest(sessioncontrolimpl_1.SessionRequestType.DELETE_SESSION, url, \"\", undefined, sessionId)\n .then((response) => {\n if (response.result == 15859712 /* GsErrorCode.Success */) {\n dependencies_1.Log.d(LOGTAG, `DELETE /v2/${sessionId} succeeded`);\n resolve();\n }\n else {\n let err = {\n code: response.result,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(response.result),\n sessionId: sessionId\n };\n dependencies_1.Log.e(LOGTAG, `DELETE /v2/${sessionId} failed: ${(0, dependencies_1.GetHexString)(response.result)}`);\n reject(err);\n }\n this.addResultToSpan(response.result);\n })\n .catch(error => {\n const err = {\n code: 3237093384 /* GsErrorCode.DOMExceptionInSessionControl */,\n description: (0, sessioncontrolimpl_1.getErrorCodeDescription)(3237093384 /* GsErrorCode.DOMExceptionInSessionControl */)\n };\n dependencies_1.Log.e(LOGTAG, `exception while performing delete request. error: ${error.message}`);\n dependencies_1.Log.e(LOGTAG, `Exception: ${error} stack: ${error.stack}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(error, \"sendDeleteRequestImpl\", LOGTAG + \".ts\", 0, 0, true);\n reject(err);\n });\n });\n }\n /**\n * This method can be used to cancel in progress session setup.\n * Should be called only after putOrPostSession or getSession with isPoll = true, before they resolve.\n * Ongoing APIs will throw with either SessionSetupCancelled or SessionSetupCancelledDuringQueuing.\n * @note Will not send DELETE request for the session.\n * @note Should call sendDeleteRequest following putOrPostSession or getSession resolution if the session should be deleted.\n * @note If the putOrPostSession or getSession promise-resolve/reject is already invoked but the then/catch block in application is not executed then this API is a no-op.\n * Applications must handle the session result or non cancellation error and take appropriate action.\n **/\n cancelSessionSetup() {\n var _a, _b;\n dependencies_1.Log.i(LOGTAG, \"cancelSessionSetup\");\n // cancel in progress session operations\n (_a = this.putOrPostRequestController) === null || _a === void 0 ? void 0 : _a.abort();\n (_b = this.getSessionRequestController) === null || _b === void 0 ? void 0 : _b.abort();\n // clear in progress session operations\n this.putOrPostRequestController = undefined;\n this.getSessionRequestController = undefined;\n }\n getZoneName() {\n var _a;\n return (_a = this.zoneName) !== null && _a !== void 0 ? _a : \"\";\n }\n getZoneAddress() {\n var _a;\n return (_a = this.zoneAddress) !== null && _a !== void 0 ? _a : \"\";\n }\n getGpuType() {\n var _a;\n return (_a = this.gpuType) !== null && _a !== void 0 ? _a : \"\";\n }\n addErrorAttributesAndReject(err) {\n this.addResultToSpan(err.code, err.description);\n return Promise.reject(err);\n }\n updateSessionZoneInfo(session) {\n this.zoneAddress = session.zoneAddress || this.zoneAddress;\n this.zoneName = session.zoneName || this.zoneName;\n this.gpuType = session.gpuType || this.gpuType;\n }\n isSessionSetupInProgress() {\n return !!this.getSessionRequestController;\n }\n /**\n * Emits GS_EVENT.SESSION_UPDATE event and the legacy GS_EVENT.PROGRESS_UPDATE\n * note: GFNClientSDK is using GS_EVENT.PROGRESS_UPDATE, instead of transitioning to GS_EVENT.SESSION_UPDATE they will switch to SessionControl usage\n * @param sessionUpdate\n */\n sendSessionUpdateEvent(sessionUpdate) {\n this.eventEmitter.emit(\"SessionUpdate\" /* GS_EVENTS.SESSION_UPDATE */, sessionUpdate);\n // legacy ProgressUpdateEvent which is required by GFNClientSDK.\n // GFNClient has migrated to SessionUpdate event.\n const eventData = {\n sessionId: sessionUpdate.sessionId,\n subSessionId: sessionUpdate.subSessionId,\n queuePosition: sessionUpdate.queuePosition,\n eta: sessionUpdate.eta,\n state: sessionUpdate.progressState\n };\n this.eventEmitter.emit(\"ProgressUpdate\" /* GS_EVENTS.PROGRESS_UPDATE */, eventData);\n }\n}\nexports.GridServer = GridServer;\nclass PassThruServer extends GridServer {\n constructor() {\n super();\n }\n getAllActiveSessions() {\n let sendEmptySessionList = () => {\n dependencies_1.Log.d(LOGTAG, \"Passthru: returning empty session list\");\n let result = {\n sessionList: []\n };\n this.eventEmitter.emit(\"ActiveSessionsResult\" /* GS_EVENTS.ACTIVE_SESSIONS_RESULT */, result);\n };\n window.setTimeout(sendEmptySessionList, 1);\n }\n putOrPostSession(startParams, action, sessionId) {\n var _a;\n dependencies_1.Log.d(LOGTAG, \"passthru: Create a new session\");\n // todo: we should remove the resetSubSessionId map, no one clears the SubSessionId after a session completion.\n // the map just continues to grow!\n this.resetSubSessionId((0, dependencies_1.getNewGuid)(), (_a = startParams.sessionId) !== null && _a !== void 0 ? _a : \"PassThruSessionId\");\n return new Promise((resolve, reject) => {\n window.setTimeout(() => {\n var _a;\n let session = {\n sessionId: this.getSessionId(),\n subSessionId: this.getSubSessionId(),\n appId: parseInt(startParams.appId),\n state: \"ready_for_connection\" /* SessionState.READY_FOR_CONNECTION */,\n signalConnectionInfo: { ip: \"\", port: 49100, protocol: \"http\" },\n mediaConnectionInfo: [],\n streamInfo: [],\n appLaunchMode: startParams.appLaunchMode\n ? startParams.appLaunchMode\n : 0 /* AppLaunchMode.Default */,\n zoneName: this.getZoneName(),\n zoneAddress: this.getZoneAddress(),\n gpuType: this.getGpuType(),\n clientLocale: \"\",\n finalizedStreamingFeatures: (_a = startParams.streamingFeatures) !== null && _a !== void 0 ? _a : {}\n };\n if (this.serverAddress) {\n session.signalConnectionInfo.ip = this.serverAddress;\n }\n if (startParams.connectionInfo) {\n session.mediaConnectionInfo = startParams.connectionInfo;\n for (const connectionInfo of session.mediaConnectionInfo) {\n if (connectionInfo.usage === 14 /* Usage.SIGNALING */) {\n session.signalConnectionInfo.ip = connectionInfo.ip;\n session.signalConnectionInfo.port = connectionInfo.port;\n session.signalConnectionInfo.protocol =\n connectionInfo.appLevelProtocol === 5 /* AppLevelProtocol.HTTPS */\n ? \"https\"\n : \"http\";\n session.signalConnectionInfo.resourcePath = connectionInfo.resourcePath;\n dependencies_1.Log.d(LOGTAG, \"Overridden signal connection address: \" +\n connectionInfo.ip +\n \", port: \" +\n connectionInfo.port);\n }\n }\n }\n if (!session.signalConnectionInfo.ip) {\n dependencies_1.Log.e(LOGTAG, \"GridServer:: GsInitParams null\");\n }\n if (startParams.monitorSettings) {\n for (const monitor of startParams.monitorSettings) {\n session.streamInfo.push({\n width: monitor.widthInPixels,\n height: monitor.heightInPixels,\n fps: monitor.framesPerSecond,\n sdrHdrMode: monitor.sdrHdrMode\n });\n }\n }\n else {\n for (const stream of startParams.streamParams) {\n session.streamInfo.push({\n width: stream.width,\n height: stream.height,\n fps: stream.fps\n });\n }\n }\n dependencies_1.Log.d(LOGTAG, \"Passthru: returning a fake session: \" + session.sessionId);\n resolve(session);\n }, 1); // modify this value to show a longer loading screen.\n });\n }\n getSession(_sessionId, isPoll) {\n return new Promise((resolve, reject) => {\n //its a bug if code reaches here.\n let err = { code: -1, description: \"PassthruPollingNotSupported\" };\n reject(err);\n });\n }\n sendDeleteRequest(sessionId) {\n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n updateAdState(adUpdate) {\n // not supported in passthru mode\n return -1;\n }\n}\nexports.PassThruServer = PassThruServer;\n//# sourceMappingURL=gridserver.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getPlatformDetails = exports.ConfigureGridServerSettings = exports.GridServerSettings = void 0;\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./gridserver\"), exports);\n// GridServerSettings should not be exposed by GridServer, but ClientSDK is already using this, should remove from the export once its removed from ClientSDK.\nvar settings_1 = require(\"./settings\");\nObject.defineProperty(exports, \"GridServerSettings\", { enumerable: true, get: function () { return settings_1.GridServerSettings; } });\nObject.defineProperty(exports, \"ConfigureGridServerSettings\", { enumerable: true, get: function () { return settings_1.ConfigureGridServerSettings; } });\nvar dependencies_1 = require(\"./dependencies\");\nObject.defineProperty(exports, \"getPlatformDetails\", { enumerable: true, get: function () { return dependencies_1.getPlatformDetails; } });\n//# sourceMappingURL=indexgridserver.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.registerLogCallback = exports.configureSessionControlSettings = void 0;\n__exportStar(require(\"./sessioncontrol\"), exports);\n__exportStar(require(\"./sessioncontrolutils\"), exports);\nvar settings_1 = require(\"./settings\");\nObject.defineProperty(exports, \"configureSessionControlSettings\", { enumerable: true, get: function () { return settings_1.configureSessionControlSettings; } });\nvar dependencies_1 = require(\"./dependencies\");\nObject.defineProperty(exports, \"registerLogCallback\", { enumerable: true, get: function () { return dependencies_1.registerLogCallback; } });\n//# sourceMappingURL=indexsessioncontrol.js.map","\"use strict\";\n// This file contains the legacy interfaces exposed by GridServer interface and also the interfaces which are used internally by SessionControl.\n// todo: Once GridServer1.0 is deleted, the below entries will be moved to sessioncontrolimpl.ts and this file should be deleted.\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CLIENT_IDENTIFICATION = exports.CLIENT_VERSION = void 0;\nexports.CLIENT_VERSION = \"29.0\";\nexports.CLIENT_IDENTIFICATION = \"GFN-PC\";\n//# sourceMappingURL=interfaces.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSessionControl = void 0;\nconst sessioncontrolimpl_1 = require(\"./sessioncontrolimpl\");\n/**\n * Creates a SessionControl interface which provides functionality to perform session related requests to GeForce NOW server.\n * @param initParams - parameters to initialize the SessionControl interface.\n * @returns an initialized SessionControl interface.\n * @throws {Error} - If unable to initialize the SessionControlImpl.\n */\nfunction createSessionControl(initParams) {\n const sessionControlImpl = new sessioncontrolimpl_1.SessionControlImpl();\n if (sessionControlImpl.init(initParams)) {\n return sessionControlImpl;\n }\n else {\n throw new Error(\"Session Control initialization failure.\");\n }\n}\nexports.createSessionControl = createSessionControl;\n//# sourceMappingURL=sessioncontrol.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionControlImpl = exports.SessionRequestType = exports.getErrorCodeDescription = exports.isValidAdStateTransition = exports.convertAdActionToState = void 0;\nconst dependencies_1 = require(\"./dependencies\");\nconst interfaces_1 = require(\"./interfaces\");\nconst telemetryhandler_1 = require(\"./telemetryhandler\");\nconst settings_1 = require(\"./settings\");\nconst tracing_1 = require(\"./tracing\");\nconst api_1 = require(\"@opentelemetry/api\");\nconst sessioncontrolutils_1 = require(\"./sessioncontrolutils\");\nconst LOGTAG = \"sessioncontrolimpl\";\n/**\n * Creates NV-* headers and other general http headers to be sent to the server in all requests.\n * Various NV-* headers and its possible values are documented in https://confluence.nvidia.com/pages/viewpage.action?spaceKey=DCPC&title=LCARS+Documentation\n * @param httpHeaders - output parameters to which all the NV-* headers will be populated.\n * @param initParams - InitializeParameters passed to SessionControl which contains values for various NV-* headers.\n */\nfunction addClientHeaders(httpHeaders, initParams) {\n httpHeaders[\"content-type\"] = \"application/json\";\n if (initParams.deviceOs !== undefined) {\n httpHeaders[\"nv-device-os\" /* ClientHeaderKeys.DEVICE_OS */] = initParams.deviceOs;\n }\n if (initParams.deviceType !== undefined) {\n httpHeaders[\"nv-device-type\" /* ClientHeaderKeys.DEVICE_TYPE */] = initParams.deviceType;\n }\n if (initParams.deviceMake !== undefined) {\n httpHeaders[\"nv-device-make\" /* ClientHeaderKeys.DEVICE_MAKE */] = initParams.deviceMake;\n }\n if (initParams.deviceModel !== undefined) {\n httpHeaders[\"nv-device-model\" /* ClientHeaderKeys.DEVICE_MODEL */] = initParams.deviceModel;\n }\n if (initParams.clientType !== undefined) {\n httpHeaders[\"nv-client-type\" /* ClientHeaderKeys.CLIENT_TYPE */] = initParams.clientType;\n }\n if (initParams.clientAppVersion !== undefined) {\n httpHeaders[\"nv-client-version\" /* ClientHeaderKeys.CLIENT_VERSION */] = initParams.clientAppVersion;\n }\n if (initParams.clientStreamer !== undefined) {\n httpHeaders[\"nv-client-streamer\" /* ClientHeaderKeys.CLIENT_STREAMER */] = initParams.clientStreamer;\n }\n if (initParams.clientId !== undefined) {\n httpHeaders[\"nv-client-id\" /* ClientHeaderKeys.CLIENT_ID */] = initParams.clientId;\n }\n if (initParams.deviceId !== undefined) {\n httpHeaders[\"x-device-id\" /* ClientHeaderKeys.DEVICE_ID */] = initParams.deviceId;\n }\n if (initParams.browserType !== undefined) {\n httpHeaders[\"nv-browser-type\" /* ClientHeaderKeys.BROWSER_TYPE */] = initParams.browserType;\n }\n if (initParams.clientHeaders) {\n for (const [key, value] of initParams.clientHeaders) {\n // Ignore deprecated header, GFNClientSDK needs to be updated to not send this header.\n if (key.toLowerCase() === \"x-nv-client-identity\" /* ClientHeaderKeys.CLIENT_IDENTITY */) {\n continue;\n }\n httpHeaders[key.toLowerCase()] = value;\n }\n }\n}\n/**\n * Provides the resulting AdState for a given AdAction.\n * @param action - AdAction which would result in state transition.\n * @returns AdState - next state of the Ad.\n */\nfunction convertAdActionToState(action) {\n switch (action) {\n case 1 /* AdAction.START */:\n return 2 /* AdState.STARTED */;\n case 2 /* AdAction.PAUSE */:\n return 3 /* AdState.PAUSED */;\n case 3 /* AdAction.RESUME */:\n return 4 /* AdState.RESUMED */;\n case 4 /* AdAction.FINISH */:\n return 5 /* AdState.FINISHED */;\n case 5 /* AdAction.CANCEL */:\n return 6 /* AdState.CANCELED */;\n default:\n return 0 /* AdState.UNKNOWN */;\n }\n}\nexports.convertAdActionToState = convertAdActionToState;\n/**\n * Checks whether the transition of Ad from one state to another is valid.\n * This is required to reject invalid AdUpdates from client. {@link SessionControl.updateAdState}\n * @param lastState - last state of the Ad.\n * @param newState - next state to be transitioned to based on clients AdUpdate\n * @returns true - if state transition is valid, else false.\n */\nfunction isValidAdStateTransition(lastState, newState) {\n switch (newState) {\n case 2 /* AdState.STARTED */:\n return lastState == 1 /* AdState.NOT_STARTED */ || lastState == 0 /* AdState.UNKNOWN */;\n case 3 /* AdState.PAUSED */:\n return lastState == 2 /* AdState.STARTED */ || lastState == 4 /* AdState.RESUMED */;\n case 4 /* AdState.RESUMED */:\n return lastState == 3 /* AdState.PAUSED */;\n case 5 /* AdState.FINISHED */:\n return lastState == 2 /* AdState.STARTED */ || lastState == 4 /* AdState.RESUMED */;\n case 6 /* AdState.CANCELED */:\n return lastState != 5 /* AdState.FINISHED */;\n default:\n return false;\n }\n}\nexports.isValidAdStateTransition = isValidAdStateTransition;\n/**\n * Generates a code based on the 'statusCode' and 'unifiedErrorCode' of requestStatus data from server.\n * @param requestStatus - json 'requestStatus' received in http response from server.\n * @returns number - integer code which may or may not be defined in ScErrorCode.\n */\nfunction getResultFromRequestStatus(pmRequestStatus) {\n let result = 3237093632 /* ScErrorCode.SessionServerErrorBegin */;\n if (pmRequestStatus.statusCode !== undefined) {\n let statusCode = pmRequestStatus.statusCode;\n if (statusCode == 1 /* PM.StatusCode.SUCCESS_STATUS */) {\n result = 15859712 /* ScErrorCode.Success */;\n }\n else if (statusCode > 0 && statusCode < 0xff) {\n result = 3237093632 /* ScErrorCode.SessionServerErrorBegin */ + statusCode;\n }\n if ((result == 3237093636 /* ScErrorCode.ServerInternalError */ ||\n result == 3237093672 /* ScErrorCode.InvalidServiceResponse */) &&\n pmRequestStatus.unifiedErrorCode) {\n result = pmRequestStatus.unifiedErrorCode;\n }\n }\n if (pmRequestStatus.unifiedErrorCode) {\n dependencies_1.Log.i(LOGTAG, `Unified error code: ${(0, dependencies_1.GetHexString)(pmRequestStatus.unifiedErrorCode)}`);\n }\n return result;\n}\n/**\n * Converts the unified protocol status of the session to SessionState enum.\n * @param status - unified protocol session state received in http response.\n * @returns SessionState enum.\n */\nfunction convertSessionStatus(status) {\n switch (status) {\n case 1 /* PM.Status.INITIALIZING */:\n return \"initializing\" /* SessionState.INITIALIZING */;\n case 2 /* PM.Status.READY_FOR_CONNECTION */:\n return \"ready_for_connection\" /* SessionState.READY_FOR_CONNECTION */;\n case 3 /* PM.Status.PLAYING */:\n return \"streaming\" /* SessionState.STREAMING */;\n case 4 /* PM.Status.PAUSED_UNINTENTIONAL */:\n case 5 /* PM.Status.PAUSED_INTENTIONAL */:\n return \"paused\" /* SessionState.PAUSED */;\n case 6 /* PM.Status.RESUMING */:\n return \"resuming\" /* SessionState.RESUMING */;\n case 7 /* PM.Status.FINISHED */:\n return \"finished\" /* SessionState.FINISHED */;\n default:\n return \"unknown\" /* SessionState.UNKNOWN */;\n }\n}\n/**\n * Informs if the err was generated due to failure in parsing the json data.\n * @param err - Error returned by browser or throw from internal code.\n * @returns true - if err is parsing failure else false.\n */\nfunction isParseError(err) {\n let result = false;\n if (err instanceof SyntaxError ||\n (err instanceof TypeError && err.message && err.message.includes(\"Cannot read property\"))) {\n result = true;\n dependencies_1.Log.e(LOGTAG, `Parse error: ${err.name} : ${err.message}`);\n }\n return result;\n}\n/**\n * Utility function which converts the UtilsErrorCode to SessionControl error code.\n * @param code - UtilsErrorCode\n * @returns ScErrorCode for the given UtilsErrorCode\n */\nfunction convertUtilsErrorCodeToScErrorCode(code) {\n let scCode = 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */; // https://developer.mozilla.org/en-US/docs/Web/API/DOMException#error_names\n if (code === 3237089281 /* UtilsErrorCode.NoNetwork */) {\n scCode = 15868417 /* ScErrorCode.NoInternetDuringSessionSetup */;\n }\n else if (code === 3237089282 /* UtilsErrorCode.NetworkError */) {\n scCode = 3237089282 /* ScErrorCode.NetworkError */;\n }\n else if (code === 3237093377 /* UtilsErrorCode.AuthTokenNotUpdated */) {\n scCode = 3237093377 /* ScErrorCode.AuthTokenNotUpdated */;\n }\n else if (code === 3237093379 /* UtilsErrorCode.ResponseParseFailure */) {\n scCode = 3237093379 /* ScErrorCode.ResponseParseFailure */;\n }\n else if (code === 3237089283 /* ScErrorCode.GetActiveSessionServerError */) {\n // We throw this gsError from getSessions and hence need this\n scCode = 3237089283 /* ScErrorCode.GetActiveSessionServerError */;\n }\n else if (code == 15867905 /* UtilsErrorCode.UserAborted */) {\n scCode = 15867907 /* ScErrorCode.RequestCancelled */;\n }\n return scCode;\n}\n/**\n * Utility function which provides string form of few generic error codes which can used for logging.\n * {@link SessionControl.performSessionRequest}\n * @param code - Error generated during server request, could be ScErrorCode or unified error code returned by server.\n * @returns a string which can be logged.\n */\nfunction getErrorCodeDescription(code) {\n switch (code) {\n case 3237085186 /* ScErrorCode.InvalidOperation */:\n return \"invalid operation\";\n case 15859712 /* ScErrorCode.Success */:\n return \"success\";\n case 3237093379 /* ScErrorCode.ResponseParseFailure */:\n case 3237093381 /* ScErrorCode.InvalidServerResponse */:\n return \"Invalid server response\";\n case 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */:\n return \"Exception\";\n case 15867907 /* ScErrorCode.RequestCancelled */:\n case 15867905 /* ScErrorCode.SessionSetupCancelled */:\n case 15867906 /* ScErrorCode.SessionSetupCancelledDuringQueuing */:\n return \"cancelled\";\n case 15868417 /* ScErrorCode.NoInternetDuringSessionSetup */:\n return \"no network\";\n case 3237089282 /* ScErrorCode.NetworkError */:\n return \"network error\";\n default:\n return \"server error\";\n }\n}\nexports.getErrorCodeDescription = getErrorCodeDescription;\n/**\n * Identifies the type of http request to {@link SessionControl.performSessionRequest}.\n */\nvar SessionRequestType;\n(function (SessionRequestType) {\n SessionRequestType[SessionRequestType[\"CREATE_SESSION\"] = 0] = \"CREATE_SESSION\";\n SessionRequestType[SessionRequestType[\"RESUME_SESSION\"] = 1] = \"RESUME_SESSION\";\n SessionRequestType[SessionRequestType[\"DELETE_SESSION\"] = 2] = \"DELETE_SESSION\";\n SessionRequestType[SessionRequestType[\"GET_SESSIONINFO\"] = 3] = \"GET_SESSIONINFO\";\n SessionRequestType[SessionRequestType[\"AD_UPDATE\"] = 4] = \"AD_UPDATE\";\n SessionRequestType[SessionRequestType[\"GET_ACTIVE_SESSIONS\"] = 5] = \"GET_ACTIVE_SESSIONS\";\n})(SessionRequestType = exports.SessionRequestType || (exports.SessionRequestType = {}));\nconst BROWSER_PLATFORM_NAME = \"browser\";\nconst SESSION_URL_PATH = \"/v2/session\";\n/**\n * Implementation class of {@link SessionControl} interfaces.\n * This class is not exported outside of this library.\n */\nclass SessionControlImpl {\n constructor() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n // todo: Majority of the members here are protected as derived GridServer class uses them.\n // in final CL some of the members will be changed to private and when GridServer is deleted majority of these will be made private\n this.sessionControlServerMap = new Map();\n this.httpRequestOptions = { ...dependencies_1.DefaultHttpRequestOptions };\n this.authInfo = { type: 1 /* AuthType.JWT_GFN */ };\n this.tracingAttributes = new Map();\n this.protocol = \"https://\";\n this.adUpdateArray = new dependencies_1.ObservableArray();\n this.adsStateInfo = new Map();\n this.serverAddress = \"\";\n this.deviceId = \"\";\n this.clientPlatformName = \"\";\n // Native clients can have separate handling of connectionTimeout and ReceiveTimeout. However fetch API doesn't provide this differentiation.\n // Combine these two values from remote configuration to pass to fetch API.\n let httpTimeout = 0; // in seconds\n httpTimeout +=\n (_b = (_a = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _a === void 0 ? void 0 : _a.httpConnectionTimeout) !== null && _b !== void 0 ? _b : 0;\n httpTimeout +=\n (_d = (_c = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _c === void 0 ? void 0 : _c.httpDataReceiveTimeout) !== null && _d !== void 0 ? _d : 0;\n this.httpRequestOptions.timeout = httpTimeout ? httpTimeout * 1000 : 13000; // in milliseconds\n this.httpRequestOptions.retryCount =\n (_f = (_e = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _e === void 0 ? void 0 : _e.httpRetryCount) !== null && _f !== void 0 ? _f : 3;\n this.httpRequestOptions.backOffDelay =\n (_h = (_g = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _g === void 0 ? void 0 : _g.httpBackOffDelay) !== null && _h !== void 0 ? _h : 500;\n this.pollingOptions = {\n minInterval: (_k = (_j = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _j === void 0 ? void 0 : _j.pollingIntervalMin) !== null && _k !== void 0 ? _k : 1000,\n maxInterval: (_m = (_l = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _l === void 0 ? void 0 : _l.pollingIntervalMax) !== null && _m !== void 0 ? _m : 10000,\n step: (_p = (_o = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _o === void 0 ? void 0 : _o.pollingIntervalStep) !== null && _p !== void 0 ? _p : 1000,\n queueSizePerStep: (_r = (_q = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _q === void 0 ? void 0 : _q.pollingQueueSizePerStep) !== null && _r !== void 0 ? _r : 50,\n adsPollingIntervalMinMS: (_t = (_s = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _s === void 0 ? void 0 : _s.adsPollingIntervalMinMS) !== null && _t !== void 0 ? _t : 3000,\n adsThrottleIntervalMS: (_v = (_u = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _u === void 0 ? void 0 : _u.adsThrottleIntervalMS) !== null && _v !== void 0 ? _v : 2000,\n adsWaitTimeoutS: (_x = (_w = settings_1.SessionControlSettings.commonConfig.pmCommunication) === null || _w === void 0 ? void 0 : _w.adsWaitTimeoutS) !== null && _x !== void 0 ? _x : 10 * 60 //10 mins\n };\n }\n /**\n * Initializes the SessionControl class.\n * This is a temporary function added to support the derived class GridServer initialization which needs to wait for client calling init for internal configuration.\n * todo: Once GridServer is deleted, move all the content of this to function to constructor.\n * @param initializeParams\n * @returns true if successfully initialized.\n */\n init(initializeParams) {\n var _a, _b;\n // Prepare all the NV-* client headers sent to server in every http request.\n addClientHeaders(this.httpRequestOptions.headers, initializeParams);\n // set all common tracing attributes.\n // todo: we should consider extending TracingManager to accept these headers and let it use them whenever a new span is created.\n // or we could create a SessionControlTracingManager and move this and other tracing related functions to it.\n this.tracingAttributes.set(\"component\", tracing_1.TracingComponent.name);\n this.tracingAttributes.set(\"component.version\", tracing_1.TracingComponent.version);\n this.tracingAttributes.set(\"client.name\", interfaces_1.CLIENT_IDENTIFICATION);\n this.tracingAttributes.set(\"client.version\", interfaces_1.CLIENT_VERSION);\n this.tracingAttributes.set(\"client.os\", (_a = initializeParams.deviceOs) !== null && _a !== void 0 ? _a : \"\");\n this.tracingAttributes.set(\"client.os.version\", (_b = initializeParams.deviceOsVer) !== null && _b !== void 0 ? _b : \"\");\n // Some of the initialize parameters like deviceId, platform name are sent in start/resume request to server.\n // Need to cache this until sending those data is moved to client headers or deprecated.\n this.serverAddress = initializeParams.serverAddress;\n this.clientPlatformName = initializeParams.clientPlatformName;\n this.deviceId = initializeParams.deviceId;\n // MockPM mode only supports http version for now. If there is a need then we can add secure option.\n // Note: we are not parsing for mockpm:// in the SessionParameters.serverAddress as we don't expect that to be populated in this mode.\n if (this.serverAddress.startsWith(\"mockpm://\") ||\n this.serverAddress.toLocaleLowerCase() === \"mockpm.com\") {\n this.serverAddress = this.serverAddress.replace(\"mockpm://\", \"\");\n this.protocol = \"http://\";\n }\n // GridServer interface accepts platformDetails in constructor, platform details are required in this library only for determining keepAlive option for fetch request.\n // getting platformDetails should not be an expensive operation and we can obtain this internally without need for clients to pass this information.\n if (!this.platformDetails && this.clientPlatformName === BROWSER_PLATFORM_NAME) {\n (0, dependencies_1.getPlatformDetails)().then((platform) => {\n this.platformDetails = platform;\n });\n }\n // we don't have failure cases yet, always return true.\n return true;\n }\n // {@link SessionControl.setAuthInfo}\n setAuthInfo(authInfo) {\n this.authInfo = authInfo;\n }\n // {@link SessionControl.setNetworkType}\n setNetworkType(network) {\n telemetryhandler_1.ScTelemetryHandler.setNetworkType(network);\n }\n // {@link SessionControl.startSession}\n startSession(startParameters, cancelController, updateCallback) {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.startOrResumeSession(startParameters, cancelController, updateCallback);\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"StartSession\" /* TracingOperation.StartSession */, request);\n }\n // {@link SessionControl.resumeSession}\n resumeSession(sessionId, resumeParameters, cancelController, callback) {\n const request = () => {\n this.addTracingAttributesToSpan();\n return this.startOrResumeSession(resumeParameters, cancelController, callback, sessionId);\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"ResumeSession\" /* TracingOperation.ResumeSession */, request);\n }\n // {@link SessionControl.deleteSession}\n deleteSession(sessionId, cancelController) {\n const impl = () => {\n this.addTracingAttributesToSpan();\n if (!this.isAuthInfoAvailable()) {\n dependencies_1.Log.e(LOGTAG, \"Auth info not initialized, cannot perform delete request to server.\");\n const result = 3237085186 /* ScErrorCode.InvalidOperation */;\n this.addResultToSpan(result);\n return Promise.resolve(result);\n }\n const url = this.getUrlForSession(sessionId);\n return this.performSessionRequest(SessionRequestType.DELETE_SESSION, url, \"\", cancelController, sessionId)\n .then((response) => {\n if (response.result == 15859712 /* ScErrorCode.Success */) {\n // There will no more requests to this session, remove this session session control map.\n this.sessionControlServerMap.delete(sessionId);\n dependencies_1.Log.d(LOGTAG, `DELETE /v2/${sessionId} succeeded`);\n }\n else {\n dependencies_1.Log.e(LOGTAG, `DELETE /v2/${sessionId} failed: ${(0, dependencies_1.GetHexString)(response.result)}`);\n }\n this.addResultToSpan(response.result);\n return response.result;\n })\n .catch((error) => {\n this.processException(error, \"deleteSession\");\n const result = 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */;\n this.addResultToSpan(result);\n return result;\n });\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"DeleteSession\" /* TracingOperation.DeleteSession */, impl);\n }\n // {@link SessionControl.getActiveSessions}\n getActiveSessions(cancelController) {\n const impl = () => {\n this.addTracingAttributesToSpan();\n if (!this.isAuthInfoAvailable()) {\n dependencies_1.Log.e(LOGTAG, \"Auth info not initialized, cannot perform get active session request to server.\");\n const result = 3237085186 /* ScErrorCode.InvalidOperation */;\n this.addResultToSpan(result);\n return Promise.resolve({ code: result });\n }\n const url = this.protocol + this.serverAddress + SESSION_URL_PATH;\n return this.performSessionRequest(SessionRequestType.GET_ACTIVE_SESSIONS, url, \"\", cancelController)\n .then((response) => {\n const result = {\n code: response.result,\n activeSessions: response.activeSessions,\n zoneName: response.serverId\n };\n this.addResultToSpan(result.code);\n if (result.code !== 15859712 /* ScErrorCode.Success */) {\n dependencies_1.Log.e(LOGTAG, `ActiveSessions request failed with ${(0, dependencies_1.GetHexString)(result.code)}`);\n }\n else {\n dependencies_1.Log.d(LOGTAG, \"ActiveSessionRequest completed\");\n }\n return result;\n })\n .catch((error) => {\n this.processException(error, \"getActiveSessions\");\n const result = {\n code: 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */\n };\n this.addResultToSpan(result.code);\n return result;\n });\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"GetSessionList\" /* TracingOperation.GetSessionList */, impl);\n }\n // {@link SessionControl.getSessionInfo}\n getSessionInfo(sessionId, cancelController) {\n const impl = () => {\n const url = this.getUrlForSession(sessionId);\n return this.performSessionRequest(SessionRequestType.GET_SESSIONINFO, url, \"\", cancelController, sessionId)\n .then((response) => {\n const result = {\n code: response.result,\n session: response.session,\n zoneName: response.serverId\n };\n if (result.code !== 15859712 /* ScErrorCode.Success */) {\n dependencies_1.Log.e(LOGTAG, `getSessionInfo request failed with ${(0, dependencies_1.GetHexString)(result.code)}`);\n }\n else {\n dependencies_1.Log.d(LOGTAG, \"getSessionInfo completed\");\n }\n return result;\n })\n .catch((error) => {\n this.processException(error, \"getSessionInfo\");\n const result = {\n code: 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */\n };\n this.addResultToSpan(result.code);\n return result;\n });\n };\n return dependencies_1.TracingManager.getInstance().createSpan(\"GetSession\" /* TracingOperation.GetSession */, impl);\n }\n /**\n * Indicates if execution of startSession/resumeSession is in progress.\n * note: GridServer overrides and determines this based on this.getSessionRequestController.\n * @returns boolean\n */\n isSessionSetupInProgress() {\n return !!this.sessionSetupData;\n }\n /**\n * Adds common attributes to the active tracing span.\n * Must be called whenever a new span is created.\n * todo: evaluate if this can be moved to TracingManager.\n */\n addTracingAttributesToSpan() {\n const span = api_1.trace.getActiveSpan();\n if (span) {\n for (const [key, value] of this.tracingAttributes) {\n span.setAttribute(key, value);\n }\n }\n }\n /**\n * Updates the span with the result of the operation.\n * @param code - Returned by SessionControl APIs\n * @param description - optional description to be set in span.\n */\n addResultToSpan(code, description) {\n const span = api_1.trace.getActiveSpan();\n if (!span) {\n return;\n }\n if ((0, sessioncontrolutils_1.isCancelCode)(code)) {\n span.setAttribute(\"error\", false);\n span.setAttribute(\"error.description\", getErrorCodeDescription(code));\n }\n else if (code == 15859712 /* ScErrorCode.Success */) {\n span.setAttribute(\"error\", false);\n }\n else {\n span.setAttribute(\"error\", true);\n span.setAttribute(\"error.description\", description !== null && description !== void 0 ? description : getErrorCodeDescription(code));\n }\n }\n /**\n * Updates the span with session properties.\n */\n addSessionInfoToSpan(pmSession) {\n var _a;\n const span = api_1.trace.getActiveSpan();\n span === null || span === void 0 ? void 0 : span.setAttribute(\"session.status\", (_a = pmSession.status) !== null && _a !== void 0 ? _a : \"\");\n }\n /**\n * Updates the span with RequestStatus details of http response from server.\n * @param requestStatus - RequestStatus object in the response from server.\n */\n addRequestStatusToSpan(requestStatus) {\n var _a, _b, _c;\n const span = api_1.trace.getActiveSpan();\n if (!span) {\n return;\n }\n const requestStatusAttributes = new Map([\n [\"host.dc\", (_a = requestStatus.serverId) !== null && _a !== void 0 ? _a : \"\"],\n [\"request.id\", (_b = requestStatus.requestId) !== null && _b !== void 0 ? _b : \"\"],\n [\"request.status\", (_c = requestStatus.statusDescription) !== null && _c !== void 0 ? _c : \"\"]\n ]);\n for (const [key, value] of requestStatusAttributes) {\n span.setAttribute(key, value);\n }\n }\n /**\n * Creates Session object from the json response from server\n * @param pmSession - the \"session\" objected contained in the http response from the server.\n * @returns Session\n */\n extractSessionInformation(pmSession) {\n var _a;\n let session = {\n sessionId: pmSession.sessionId,\n subSessionId: \"\",\n appId: 0,\n appLaunchMode: 0 /* AppLaunchMode.Default */,\n state: convertSessionStatus(pmSession.status),\n zoneAddress: \"\",\n zoneName: \"\",\n deviceId: \"\",\n gpuType: \"\",\n monitorSettings: [],\n connectionInfo: [],\n finalizedStreamingFeatures: pmSession.finalizedStreamingFeatures\n };\n session.appId = pmSession.sessionRequestData ? pmSession.sessionRequestData.appId : 0;\n if (pmSession.connectionInfo) {\n const connectionInfoList = pmSession.connectionInfo;\n // For Browser clients PM is not returning right port information.\n if (this.clientPlatformName === BROWSER_PLATFORM_NAME) {\n let videoPortFound = false;\n // In web client- GeForce Now service, we need only two ports, but PM is returning a lot of useless ports and incorrect information for signaling.\n for (const connectionInfo of connectionInfoList) {\n if (connectionInfo.usage === 2 /* Usage.VIDEO */) {\n videoPortFound = true;\n session.connectionInfo.push(connectionInfo);\n const signalingInfo = {\n ip: \"\",\n port: 49100,\n appLevelProtocol: 5 /* AppLevelProtocol.HTTPS */,\n protocol: 1 /* Protocol.TCP */,\n usage: 14 /* Usage.SIGNALING */\n };\n let addressParts = connectionInfo.ip.split(\".\");\n signalingInfo.ip =\n addressParts[0] +\n \"-\" +\n addressParts[1] +\n \"-\" +\n addressParts[2] +\n \"-\" +\n addressParts[3];\n let domainUrlIndex = pmSession.sessionControlInfo.ip.indexOf(\".\");\n signalingInfo.ip +=\n pmSession.sessionControlInfo.ip.substring(domainUrlIndex);\n dependencies_1.Log.d(LOGTAG, \"The overridden signal connection address (from VIDEO) is \" +\n signalingInfo.ip);\n session.connectionInfo.push(signalingInfo);\n break;\n }\n }\n if (!videoPortFound) {\n // MockPM provides only signaling port and doesn't need override of ICE connection with video port.\n // We can also use this flow for eventual transition to BUNDLE port streaming.\n // Right now PM sends both BUNDLE and VIDEO port, eventually we should get only one valid signaling and BUNDLE connection info.\n session.connectionInfo = connectionInfoList;\n }\n }\n else {\n session.connectionInfo = connectionInfoList;\n }\n }\n if (pmSession.monitorSettings) {\n session.monitorSettings = pmSession.monitorSettings;\n }\n if (pmSession.gpuType) {\n session.gpuType = pmSession.gpuType;\n }\n switch ((_a = pmSession.sessionRequestData) === null || _a === void 0 ? void 0 : _a.appLaunchMode) {\n case 3 /* PM.AppLaunchMode.TOUCH_FRIENDLY */:\n session.appLaunchMode = 2 /* AppLaunchMode.TouchFriendly */;\n break;\n case 2 /* PM.AppLaunchMode.GAMEPAD_FRIENDLY */:\n session.appLaunchMode = 1 /* AppLaunchMode.GamepadFriendly */;\n break;\n }\n if (pmSession.sessionControlInfo) {\n const newServerIp = pmSession.sessionControlInfo.ip;\n const newServerPort = pmSession.sessionControlInfo.port;\n if (newServerIp && newServerPort) {\n if (this.sessionControlServerMap.has(session.sessionId)) {\n const currentServer = this.sessionControlServerMap.get(session.sessionId);\n if ((currentServer === null || currentServer === void 0 ? void 0 : currentServer.server) !== newServerIp ||\n (currentServer === null || currentServer === void 0 ? void 0 : currentServer.port) !== newServerPort) {\n dependencies_1.Log.i(LOGTAG, `Session: ${session.sessionId} is forwarded from zone ${currentServer === null || currentServer === void 0 ? void 0 : currentServer.server}:${currentServer === null || currentServer === void 0 ? void 0 : currentServer.port} to ${newServerIp}:${newServerPort}`);\n }\n }\n this.sessionControlServerMap.set(session.sessionId, {\n server: newServerIp,\n port: newServerPort\n });\n }\n session.zoneAddress = newServerIp;\n session.zoneName = newServerIp.split(\".\")[0].toUpperCase();\n }\n return session;\n }\n /**\n * Converts the array of unified protocol session object to Session array.\n * @param pmSessions - the array of unified protocol session objects.\n * @returns Session[]\n */\n extractSessionList(pmSessions) {\n return pmSessions.map(session => this.extractSessionInformation(session));\n }\n /**\n * This function is executed during session setup/resume process if the server has provided ads for the session.\n * Clients are expected to play the ads received from server and update the ad state to library. {@link SessionControl.updateAdState}\n * Since requests to server are always sent sequentially, the updateAdState function just queues the AdUpdate.\n * This function sends the queued AdUpdates to server.\n * If there are no AdUpdates to be sent to server then either wait for timeout or for new AdUpdate from the client or abort signal from client.\n * @param sessionId - Id of the session thats being setup.\n * @param setupController - AbortController to abort the request to server or abort the wait for timeout.\n * @param onServerResponse - Handler to be executed once response is received from server.\n * @param onException - Handler to be executed during exception.\n * @param onAbort - Handler to be executed when clients abort the request via setupController parameter.\n * @param onTimeout - Handler to be executed when clients doesn't provide any AdUpdate for a long time.\n */\n processAdUpdates(sessionId, setupController, onServerResponse, onException, onAbort, onTimeout) {\n const sendAdUpdateRequest = () => {\n this.addTracingAttributesToSpan();\n let url = this.getUrlForSession(sessionId);\n let requestData = {\n action: 6 /* PM.Action.AD_UPDATE */,\n adUpdates: Array.from(this.adUpdateArray)\n };\n dependencies_1.Log.d(LOGTAG, `Adupdate request data: ${JSON.stringify(requestData)}`);\n this.adUpdateArray.clear();\n this.performSessionRequest(SessionRequestType.AD_UPDATE, url, JSON.stringify(requestData), setupController, sessionId)\n .then((serverResponse) => {\n onServerResponse(serverResponse);\n })\n .catch(err => onException(err));\n };\n // Note:\n // 1. The below flush could have been done inside the updateAdState function as well.\n // Right now we are blindly flushing PAUSE/RESUME combo, eventually this might change,\n // flush can be based on timestamp difference (+ad duration), duration from previous https request, number of retries required for the previous http request etc.\n // 2. We only flush PAUSE/RESUME in combination. If we have delivered a PAUSE action to PM then RESUME must be sent to PM.\n // otherwise PM might reject the requests because of wrong state transitions.\n let i = this.adUpdateArray.length - 1;\n let pairRemovedCount = 0;\n while (i >= 1) {\n if (this.adUpdateArray[i].adAction === 3 /* AdAction.RESUME */ &&\n this.adUpdateArray[i - 1].adAction === 2 /* AdAction.PAUSE */) {\n this.adUpdateArray.splice(i - 1, 2);\n pairRemovedCount++;\n i -= 2;\n }\n else if (this.adUpdateArray[i - 1].adAction === 3 /* AdAction.RESUME */) {\n // last but one element is RESUME, decrement by 1 to check if the previous element to it is PAUSE.\n i--;\n }\n else {\n // last but one element is not RESUME, cannot make a pair with it, decrement index by 2 to find next pair.\n i -= 2;\n }\n }\n if (pairRemovedCount) {\n dependencies_1.Log.d(LOGTAG, `Removed ${pairRemovedCount} pair of Pause and Resume from adupdate array`);\n }\n let sendAdUpdates = false;\n let waitTime = this.pollingOptions.adsWaitTimeoutS * 1000;\n const adUpdateCount = this.adUpdateArray.length;\n // If the last update is Finish and we have more ads then good to wait for some more time to batch the Ads start of next Ad.\n // Or if we have paused then good to wait for some more time to see if user resumes quickly.\n // Clients pause/resume based on webpage visibility. The wait time of 2 seconds is randomly chosen value now.\n // This value might change eventually and it could be based on the duration of ads, as PlayerWON service tracks when they are getting the requests.\n if (adUpdateCount) {\n if ((this.adUpdateArray[adUpdateCount - 1].adAction === 4 /* AdAction.FINISH */ &&\n this.adsStateInfo.size > 1) ||\n this.adUpdateArray[adUpdateCount - 1].adAction === 2 /* AdAction.PAUSE */) {\n waitTime = this.pollingOptions.adsThrottleIntervalMS;\n }\n else {\n sendAdUpdates = true;\n }\n }\n if (sendAdUpdates) {\n dependencies_1.TracingManager.getInstance().createSpan(\"AdUpdateRequest\" /* TracingOperation.AdUpdate */, sendAdUpdateRequest);\n }\n else {\n // Wait for either\n // 1. \"waitTime\" to send the AdUpdate.\n // 2. \"abortController\" is signalled.\n // 3. Until next AdUpdate is pushed\n // In order to wait for client invoking AdUpdate, we set the resolve function of the promise as callback of push in adUpdateArray.\n // A new push will trigger the callback(resolve) to get executed which would resolve the below Promise.race\n const nextAdUpdatePromise = new Promise((resolve, reject) => {\n // Make sure to remove this callback as all reference to resolve/reject and promise need to be removed for GC to free the promise.\n // Since we invoke processAdUpdate again as part of promise resolve, cleanup before instead of waiting for finally.\n this.adUpdateArray.setCallback(\"push\", resolve);\n });\n const wait = new dependencies_1.CancellableWait(waitTime, setupController.signal);\n Promise.race([wait.getPromise(), nextAdUpdatePromise])\n .then(result => {\n // clearing the callback from adUpdateArray will remove the reference of resolve which will let Garbage collector cleanup the nextAdUpdatePromise\n this.adUpdateArray.setCallback(\"push\", undefined);\n wait.cancel(); // in case nextAdUpdatePromise was resolved this will clear the timers and abort handler of signal.\n if (this.adUpdateArray.length) {\n if (this.adUpdateArray.length == adUpdateCount) {\n // timeout, no new ad update.\n dependencies_1.TracingManager.getInstance().createSpan(\"AdUpdateRequest\" /* TracingOperation.AdUpdate */, sendAdUpdateRequest);\n }\n else {\n this.processAdUpdates(sessionId, setupController, onServerResponse, onException, onAbort, onTimeout);\n }\n }\n else {\n dependencies_1.Log.w(LOGTAG, \"Timeout while waiting for ads update from client.\");\n onTimeout();\n }\n })\n .catch(err => {\n // remove callbacks as abort on signal can result in this block execution.\n this.adUpdateArray.setCallback(\"push\", undefined);\n // wait Promise gets rejected if the signal is aborted, we can also hit this block if the execution in the above 'then' block throws an exception.\n if (wait.isAborted()) {\n dependencies_1.Log.i(LOGTAG, \"sessions setup aborted while waiting for ad updates\");\n onAbort();\n }\n else {\n onException(err);\n }\n });\n }\n }\n updateAdState(adUpdate) {\n if (!this.isSessionSetupInProgress()) {\n dependencies_1.Log.e(LOGTAG, \"No session setup in progress, updateAdState not allowed.\");\n return 3237085186 /* ScErrorCode.InvalidOperation */;\n }\n const adStateInfo = this.adsStateInfo.get(adUpdate.adId);\n if (!adStateInfo) {\n dependencies_1.Log.e(LOGTAG, `adId ${adUpdate.adId} not found in session`);\n return 3237093386 /* ScErrorCode.InvalidAdStateTransition */;\n }\n // Our module is designed to keep accepting AdAction from the client. We might not be able to send the updates to PM and get the latest AdState from PM\n // We save the last state from client and check if the Client is providing the right AdState transitions.\n const nextAdState = convertAdActionToState(adUpdate.adAction);\n if (!isValidAdStateTransition(adStateInfo.lastClientAdState, nextAdState)) {\n dependencies_1.Log.e(LOGTAG, `action ${adUpdate.adAction} is not allowed for ad: ${adUpdate.adId}. Last state: ${adStateInfo.lastClientAdState}`);\n return 3237093386 /* ScErrorCode.InvalidAdStateTransition */;\n }\n if (this.adUpdateArray.length) {\n const previousAdId = this.adUpdateArray[this.adUpdateArray.length - 1].adId;\n if (previousAdId !== adUpdate.adId) {\n const previousAdsAction = this.adUpdateArray[this.adUpdateArray.length - 1].adAction;\n if (previousAdsAction != 4 /* AdAction.FINISH */ && previousAdsAction != 5 /* AdAction.CANCEL */) {\n // we are still expecting ad update for previous Ad, client jumped to next Ad.\n dependencies_1.Log.e(LOGTAG, `AdUpdate for previous Ad ${previousAdId} is not completed, cant accept new ad state`);\n return 3237093386 /* ScErrorCode.InvalidAdStateTransition */;\n }\n }\n }\n if (!adUpdate.clientTimestamp) {\n // clientTimestamp should be unix time which is number of seconds since 00:00:00 Jan 1st 1970 UTC\n // Date.now() returns milliseconds precision, convert to seconds.\n adUpdate.clientTimestamp = Math.round(Date.now() / 1000);\n }\n // Pushing an element to adUpdateArray will resolve the promise.race which is waiting on the overridden push function.\n // the session setup flow will process this AdUpdate and determine the next steps.\n // Note: we do not attempt to directly make an https request to PM here as an AdUpdate requests might already in progress.\n // All requests to PM must be done sequentially hence we just push here and let the normal session setup flow process this request.\n this.adUpdateArray.push(adUpdate);\n adStateInfo.lastClientAdState = nextAdState;\n this.adsStateInfo.set(adUpdate.adId, adStateInfo);\n return 15859712 /* ScErrorCode.Success */;\n }\n /**\n * Generates a url for session requests. For new/resume session {@link createSessionRequestUR} to add additional query parameters.\n * @param sessionId - if set (all request except GET_ACTIVE_SESSIONS and CREATE_SESSION), will add the sessionId to URL\n * @param serverAddress - optional, will be used in URL creation if the session resource is not yet allocated in any zone.\n * @returns URL\n */\n getUrlForSession(sessionId) {\n let sessionUrl = this.protocol;\n if (sessionId && this.sessionControlServerMap.has(sessionId)) {\n let sessionControlInfo = this.sessionControlServerMap.get(sessionId);\n if (sessionControlInfo !== undefined) {\n sessionUrl += sessionControlInfo.server;\n if (sessionControlInfo.port != 0) {\n sessionUrl += \":\" + sessionControlInfo.port;\n }\n }\n }\n else {\n sessionUrl += this.serverAddress;\n }\n sessionUrl += SESSION_URL_PATH + \"/\" + sessionId;\n return sessionUrl;\n }\n /**\n * Utility function to create the URL for new session or resume request.\n * The resume requests should always be sent to the zone where session is established.\n * @param startParams - SessionParameters which contains keyboardLayout, locale which are populated in query params of url.\n * @param sessionId - if set will create resume request URL.\n * @returns url\n */\n createSessionRequestURL(startResumeParams, sessionId) {\n var _a, _b, _c;\n let sessionUrl = \"\";\n if (sessionId) {\n sessionUrl = this.getUrlForSession(sessionId);\n }\n else {\n const server = (_a = startResumeParams.serverAddress) !== null && _a !== void 0 ? _a : this.serverAddress;\n sessionUrl = this.protocol + server + SESSION_URL_PATH;\n }\n sessionUrl += \"?keyboardLayout=\" + ((_b = startResumeParams.keyboardLayout) !== null && _b !== void 0 ? _b : \"en_US\");\n sessionUrl += \"&languageCode=\" + ((_c = startResumeParams.clientLocale) !== null && _c !== void 0 ? _c : \"en_US\");\n return sessionUrl;\n }\n /**\n * Creates the SessionRequestData JSON object which should be sent to server in new session and resume requests.\n * @param sessionParameters - contains some of the values to be sent to server.\n * @param resume - if set, the JSON data generated will adhere to the resume request protocol.\n * @param subSessionId - Id generated by SessionControl in startSession/resumeSession interfaces.\n * @returns string - stringified JSON object to be sent to server.\n */\n getSessionRequestData(sessionParameters, resume, subSessionId) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n let appLaunchMode = 1; // Default\n switch (sessionParameters.appLaunchMode) {\n case 2 /* AppLaunchMode.TouchFriendly */:\n dependencies_1.Log.d(LOGTAG, \"Sending TouchFriendly launch mode to server\");\n appLaunchMode = 3;\n break;\n case 1 /* AppLaunchMode.GamepadFriendly */:\n appLaunchMode = 2;\n break;\n default:\n appLaunchMode = 1;\n }\n let sdrHdrMode = (_c = (_b = (_a = sessionParameters.monitorSettings) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.sdrHdrMode) !== null && _c !== void 0 ? _c : 0 /* SdrHdrMode.SDR */;\n if (settings_1.SessionControlSettings.hdr) {\n sdrHdrMode = 1 /* SdrHdrMode.HDR */;\n for (const monitorSetting of sessionParameters.monitorSettings) {\n monitorSetting.sdrHdrMode = 1 /* SdrHdrMode.HDR */;\n }\n }\n let srd = {\n // Ideally all these values need not be sent to server, but our PM considers missing data as invalid.\n audioMode: 2,\n remoteControllersBitmap: (_d = sessionParameters.remoteControllersBitmap) !== null && _d !== void 0 ? _d : 0,\n sdrHdrMode: sdrHdrMode,\n networkTestSessionId: null,\n availableSupportedControllers: [],\n clientVersion: interfaces_1.CLIENT_VERSION,\n deviceHashId: this.deviceId,\n internalTitle: null,\n clientPlatformName: this.clientPlatformName,\n metaData: [\n { key: \"SubSessionId\", value: subSessionId },\n {\n key: \"wssignaling\",\n value: settings_1.SessionControlSettings.webSocketSignaling ? \"1\" : \"0\"\n }\n ],\n surroundAudioInfo: 0,\n clientTimezoneOffset: (_e = sessionParameters.clientTimeZoneOffset) !== null && _e !== void 0 ? _e : new Date().getTimezoneOffset() * 60 * 1000 * -1,\n clientIdentification: interfaces_1.CLIENT_IDENTIFICATION,\n parentSessionId: null,\n appId: sessionParameters.appId,\n streamerVersion: 1,\n clientRequestMonitorSettings: sessionParameters.monitorSettings,\n appLaunchMode: appLaunchMode,\n sdkVersion: \"1.0\",\n enhancedStreamMode: 1,\n useOps: true,\n clientDisplayHdrCapabilities: null,\n accountLinked: (_f = sessionParameters.accountLinked) !== null && _f !== void 0 ? _f : false,\n partnerCustomData: (_g = sessionParameters.partnerCustomData) !== null && _g !== void 0 ? _g : \"\",\n enablePersistingInGameSettings: (_h = sessionParameters.enablePersistingInGameSettings) !== null && _h !== void 0 ? _h : false,\n secureRTSPSupported: false,\n userAge: (_j = sessionParameters.userAge) !== null && _j !== void 0 ? _j : 0,\n requestedStreamingFeatures: sessionParameters.streamingFeatures\n };\n // todo: GS server is still relying on the \"GSStreamerType\", need to cleanup GS server code and then delete this.\n if (settings_1.SessionControlSettings.webRtcStreamer ||\n this.clientPlatformName === BROWSER_PLATFORM_NAME) {\n srd.metaData.push({ key: \"GSStreamerType\", value: \"WebRTC\" });\n }\n else {\n // For non WebRTC client currently client must inform server of secureRTSP support. The \"wssignaling\" : \"1\" in metadata informs the server to be ready for websocket connection but without secureRTSPSupported, the connection doesnt work.\n // The above combination is broken, however we don't want any clients to perform non secure request to our server so hard code secureRTSPSupported to true.\n // WebRTC client hardcodes the Signaling port to 49100(secure) in GridServer. PM currently sends all the port for native client, this will be cleaned up in separate initiative soon.\n // if secureRTSPSupported is set to true in web client, PM will provide one more port to client which is not needed, hence restrict this to only non web client.\n srd.secureRTSPSupported = true;\n }\n for (const key in sessionParameters.metaData) {\n let x = {\n key: key,\n value: sessionParameters.metaData[key]\n };\n srd.metaData.push(x);\n }\n let body;\n if (resume) {\n const sessionModifyObj = {\n action: 2 /* PM.Action.RESUME */,\n data: \"RESUME\",\n sessionRequestData: srd,\n metaData: []\n };\n body = JSON.stringify(sessionModifyObj);\n }\n else {\n const sessionRequestObj = {\n sessionRequestData: srd\n };\n body = JSON.stringify(sessionRequestObj);\n }\n dependencies_1.Log.i(LOGTAG, \" The serialized \" +\n (resume ? \"PUT\" : \"POST\") +\n \" request object : \" +\n (0, dependencies_1.stripPartnerCustomData)(body));\n return body;\n }\n /**\n * Performs a single session related http request, handles the response, handles error cases and collects http telemetry.\n * Unless there is an exception in the catch block handling this function always resolves with ServerResponse object.\n * Developers should use this function instead of making direct http requests to server as this function generalizes the error handling, telemetry collection.\n * @param requestType - identifies the type of session request as response format from server can be different and helps decide if Http telemetry should be collected.\n * @param requestUrl - http url\n * @param body - http body to be sent to server.\n * @param abortController - passed to fetch API, caller can abort the fetch request by calling .abort on this object.\n * @param sessionId - optional sessionId, collected in telemetry.\n * @returns a promise which resolves with ServerResponse. {@link ServerRespons} for details.\n */\n performSessionRequest(requestType, requestUrl, body, abortController, sessionId) {\n var _a;\n // Http analytics events are required in failure cases for any request.\n // If requests are cancelled then we should not send any telemetry event.\n // The GetSession request (Polling requests) doesn't need telemetry in success cases.\n const shouldSendAnalyticsEvent = (result) => {\n if ((0, sessioncontrolutils_1.isCancelCode)(result)) {\n // don't send any event during intentional cancel.\n return false;\n }\n else if (result !== 15859712 /* ScErrorCode.Success */) {\n // always send on failure.\n return true;\n }\n // success cases, send for all but not for GetSessionInfo\n switch (requestType) {\n case SessionRequestType.GET_SESSIONINFO:\n return false;\n default:\n return true;\n }\n };\n const getHttpMethodForRequestType = () => {\n switch (requestType) {\n case SessionRequestType.CREATE_SESSION:\n return \"POST\";\n case SessionRequestType.DELETE_SESSION:\n return \"DELETE\";\n case SessionRequestType.RESUME_SESSION:\n case SessionRequestType.AD_UPDATE:\n return \"PUT\";\n default:\n return \"GET\";\n }\n };\n let options = {\n method: getHttpMethodForRequestType(),\n headers: this.httpRequestOptions.headers,\n body: body,\n retryCount: this.httpRequestOptions.retryCount,\n timeout: this.httpRequestOptions.timeout\n };\n // We have been setting keepalive only for delete request as this happens generally during the tab close.\n // setting keepalive will allow the request to outlive the page.\n // Ads Cancel request will also benefit from keepAlive = true.\n // There is not much use for any other requests to be kept alive, in fact not keeping the request alive for post/resume requests would be better.\n if (requestType === SessionRequestType.DELETE_SESSION ||\n requestType === SessionRequestType.AD_UPDATE) {\n options.keepalive = true;\n if (this.platformDetails &&\n (0, dependencies_1.IsChromeBrowser)(this.platformDetails) &&\n !(0, dependencies_1.IsChromeVersionAtLeast)(this.platformDetails, 81)) {\n // https://bugs.chromium.org/p/chromium/issues/detail?id=835821\n // Bug 3923439: Not supported in Chrome versions 80 and below\n options.keepalive = false;\n }\n }\n const startTime = performance.now();\n // Should we create telemetry event and send it in all failure cases ?\n let httpAnalyticsEvent = telemetryhandler_1.ScTelemetryHandler.getTelemetryHttpEvent(requestUrl, (_a = options.method) !== null && _a !== void 0 ? _a : \"\", sessionId);\n httpAnalyticsEvent.statusCode = \"0\";\n // keep this outside of promise constructor so that we can log data in exception.\n let responseData = \"\";\n return (0, dependencies_1.performHttpRequest)(requestUrl, options, this.authInfo, abortController)\n .then((response) => {\n // required for logging in catch handler.\n responseData = response.data;\n const endTime = performance.now();\n httpAnalyticsEvent.statusCode = response.status.toString();\n httpAnalyticsEvent.callDuration = Math.round(endTime - startTime);\n if (!response.data) {\n // Ideally this block should not get executed.\n dependencies_1.Log.e(LOGTAG, \"The response from server does not contain any data\");\n throw new SyntaxError(\"The response from server does not contain any data\");\n }\n let pmResponse;\n try {\n pmResponse = JSON.parse(response.data);\n }\n catch (err) {\n httpAnalyticsEvent.response = response.data; // Emit response data as well to check what gets returned in case of parsing failure\n throw err;\n }\n if (!pmResponse.requestStatus) {\n dependencies_1.Log.e(LOGTAG, `The response from server does not contain valid info. response: ${sanitizePmResponse(response.data)}`);\n throw new SyntaxError(\"RequestStatus missing in response\");\n }\n const serverId = pmResponse.requestStatus.serverId.toUpperCase();\n httpAnalyticsEvent.requestId = pmResponse.requestStatus.requestId;\n httpAnalyticsEvent.serverId = serverId;\n httpAnalyticsEvent.requestStatusCode = pmResponse.requestStatus.statusDescription;\n const sessionResponse = {\n result: getResultFromRequestStatus(pmResponse.requestStatus),\n pmResponse,\n serverId\n };\n this.addRequestStatusToSpan(pmResponse.requestStatus);\n if (requestType === SessionRequestType.GET_ACTIVE_SESSIONS) {\n const activeSessions = pmResponse.sessions;\n if (activeSessions) {\n sessionResponse.activeSessions = this.extractSessionList(activeSessions);\n }\n }\n else if (requestType !== SessionRequestType.DELETE_SESSION) {\n // PM doesn't provide any session response for Delete request.\n // todo: we will miss setting sessionId in the http analytics event for delete session.\n // extract from URL ? or accept as a parameter in this function.\n const responseSession = pmResponse.session;\n if (responseSession) {\n sessionResponse.session = this.extractSessionInformation(responseSession);\n this.addSessionInfoToSpan(responseSession);\n // For POST request this just overrides the sessionId, rest all requests will have same sessionid.\n httpAnalyticsEvent.sessionId = sessionResponse.session.sessionId;\n }\n const otherSessions = pmResponse.otherUserSessions;\n if (otherSessions) {\n sessionResponse.activeSessions = this.extractSessionList(otherSessions);\n if (sessionResponse.activeSessions.length) {\n dependencies_1.Log.d(LOGTAG, `Received ${sessionResponse.activeSessions.length} other sessions`);\n }\n }\n }\n if (httpAnalyticsEvent && shouldSendAnalyticsEvent(sessionResponse.result)) {\n telemetryhandler_1.ScTelemetryHandler.sendHttpEvent(httpAnalyticsEvent);\n httpAnalyticsEvent = undefined;\n }\n return sessionResponse;\n })\n .catch(err => {\n // Request did not complete, aborted/timeout/networkerror. or an exception from above then block.\n let sessionResponse = {\n result: 3237089282 /* ScErrorCode.NetworkError */\n };\n const endTime = performance.now();\n if (err.code) {\n // Failure of the httpRequest, covert the Utils code to sessionResponse.result.\n sessionResponse.result = convertUtilsErrorCodeToScErrorCode(err.code);\n }\n else if (isParseError(err)) {\n sessionResponse.result = 3237093379 /* ScErrorCode.ResponseParseFailure */;\n dependencies_1.Log.e(LOGTAG, `The response from server is invalid. response: ${sanitizePmResponse(responseData)}`);\n }\n else {\n sessionResponse.result = 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */;\n dependencies_1.Log.e(LOGTAG, `Exception: ${err} stack: ${err.stack}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(err, \"performSessionRequest\", LOGTAG + \".ts\", 0, 0, true);\n }\n if (httpAnalyticsEvent && shouldSendAnalyticsEvent(sessionResponse.result)) {\n httpAnalyticsEvent.callDuration = Math.round(endTime - startTime);\n telemetryhandler_1.ScTelemetryHandler.sendHttpEvent(httpAnalyticsEvent);\n }\n dependencies_1.Log.e(LOGTAG, `performSessionRequest failed for ${options.method} ${requestUrl} request`);\n dependencies_1.Log.e(LOGTAG, `result: ${sessionResponse.result} description: ${getErrorCodeDescription(sessionResponse.result)}`);\n return sessionResponse;\n });\n }\n /**\n * Provides the SessionUpdate interface populated using the session object provided from server.\n * Clients will use the returned object to display progress state/queue position/eta/ads to the user.\n * {@link startOrResumeSession}\n * @param pmSession - session object received from server.\n * @param lastQueuePosition - last queue position informed to client.\n * In GeForce NOW server a session position in queue can move in either direction based on the requests from users with different subscriptions.\n * If clients display progress bar based on queue position it might keeping going back and forth.\n * This function prevents the queue position returned to client to be always <= the last provided queue position.\n * @param subSessionId - Id for the startSession/resumeSession instance.\n * @returns SessionUpdate\n */\n getSessionUpdate(pmSession, lastQueuePosition, subSessionId) {\n var _a, _b, _c, _d, _e, _f;\n let _state = \"Configuring\" /* SessionProgressState.CONFIGURING */;\n let queuePosition = 0;\n if (pmSession.seatSetupInfo) {\n switch (pmSession.seatSetupInfo.seatSetupStep) {\n case 0 /* PM.SeatSetupStep.UNKNOWN */:\n _state = \"Connecting\" /* SessionProgressState.CONNECTING */;\n break;\n case 1 /* PM.SeatSetupStep.WAITING_FOR_RESOURCE */:\n _state = \"InQueue\" /* SessionProgressState.IN_QUEUE */;\n if (pmSession.seatSetupInfo.queuePosition < lastQueuePosition) {\n queuePosition = pmSession.seatSetupInfo.queuePosition;\n }\n else {\n queuePosition = lastQueuePosition;\n }\n break;\n case 5 /* PM.SeatSetupStep.WAITING_FOR_PREVIOUS_SESSION_CLEANUP */:\n _state = \"PreviousSessionCleanup\" /* SessionProgressState.PREVIOUS_SESSION_CLEANUP */;\n break;\n default:\n queuePosition = 0;\n }\n }\n const sessionUpdate = {\n sessionId: pmSession.sessionId,\n subSessionId: subSessionId,\n queuePosition: queuePosition,\n eta: (_b = (_a = pmSession.seatSetupInfo) === null || _a === void 0 ? void 0 : _a.seatSetupEta) !== null && _b !== void 0 ? _b : 0,\n progressState: _state,\n isAdsRequired: pmSession.sessionAdsRequired,\n ads: []\n };\n const oldAdsStateInfo = new Map(this.adsStateInfo);\n this.adsStateInfo.clear();\n if (pmSession.sessionAds) {\n // Generally there will be one or two ads.\n const adsCount = pmSession.sessionAds.length;\n for (let i = 0; i < adsCount; i++) {\n const sessionAd = pmSession.sessionAds[i];\n // PM will remove all the finished/cancelled ads. If not, ignore them.\n // Client has no use of finished/cancelled Ads.\n if (sessionAd.adState == 5 /* AdState.FINISHED */ ||\n sessionAd.adState == 6 /* AdState.CANCELED */) {\n continue;\n }\n const adId = sessionAd.adId;\n // We only accept ad updates for Ads still valid in server.\n // Retain the last known client state as all updates might not have reached server, hence serverAdState and clientAdState might not match.\n // In current implementation we are not using the serverAdState yet.\n this.adsStateInfo.set(adId, {\n serverAdState: sessionAd.adState,\n lastClientAdState: (_d = (_c = oldAdsStateInfo.get(adId)) === null || _c === void 0 ? void 0 : _c.lastClientAdState) !== null && _d !== void 0 ? _d : 0 /* AdState.UNKNOWN */\n });\n // Below code will be replaced as part of schema to typescript interfaces generation.\n const ad = {\n adId: adId,\n adState: sessionAd.adState,\n adUrl: sessionAd.adUrl,\n adLengthInSeconds: sessionAd.adLengthInSeconds,\n adMediaFiles: []\n };\n const adMediaFilesCount = (_f = (_e = sessionAd.adMediaFiles) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0;\n for (let i = 0; i < adMediaFilesCount; i++) {\n const sessionAdMediaFile = sessionAd.adMediaFiles[i];\n const adMediaFile = {\n mediaFileUrl: sessionAdMediaFile.mediaFileUrl,\n encodingProfile: sessionAdMediaFile.encodingProfile\n };\n ad.adMediaFiles.push(adMediaFile);\n }\n sessionUpdate.ads.push(ad);\n }\n }\n return sessionUpdate;\n }\n /**\n * Returns the wait time between requests to server during session setup/resume process.\n * The interval is decided based on queue position/ads requirement.\n * @param pmSession - JSON session object received by server.\n * @returns the polling interval\n */\n getPollingInterval(pmSession) {\n let pollingInterval = this.pollingOptions.minInterval;\n if (pmSession.seatSetupInfo.seatSetupStep === 1 /* PM.SeatSetupStep.WAITING_FOR_RESOURCE */ &&\n this.pollingOptions.queueSizePerStep != 0) {\n pollingInterval +=\n Math.floor(pmSession.seatSetupInfo.queuePosition / this.pollingOptions.queueSizePerStep) * this.pollingOptions.step;\n }\n // If PM informs us that session requires Ad then PM wants us to do a GET request only after at least 3 seconds.\n // So that PM can perform the /session /opportunity requests to PlayerWON service and get Ads.\n // This isn't a great user experience. This requirement might change eventually, for now honor what PM team has requested us to do.\n // For higher queue positions it might take time for PM to process ads for that session, retain the normal polling interval.\n // Note: once all Ads are provided by PM then this field is set to false and client will continue the normal polling interval.\n if (pmSession.sessionAdsRequired) {\n pollingInterval = Math.max(pollingInterval, this.pollingOptions.adsPollingIntervalMinMS);\n }\n return Math.min(pollingInterval, this.pollingOptions.maxInterval);\n }\n /**\n * Returns true if clients have configured the auth information through setAuthInfo.\n * @returns boolean\n */\n isAuthInfoAvailable() {\n return this.authInfo.type === -1 /* AuthType.NONE */ || !!this.authInfo.token;\n }\n /**\n * Implements the session start/resume process.\n * This is called from both startSession and resumeSessionAPI with the parameters provided by client.\n * The returned promise is resolved eventually once the session is ready for connection or in error case.\n * @param sessionParameters\n * @param cancelController\n * @param updateCallback\n * @param sessionId - if not set will be treated as new session setup process else resumes this session.\n * @returns\n */\n startOrResumeSession(sessionParameters, cancelController, updateCallback, sessionId) {\n // Every startSession/resumeSession needs a unique subSession Id for identification in telemetry.\n // do not set this in gsTelemetryHandler until initial validation.\n const subSessionId = (0, dependencies_1.getNewGuid)();\n return new Promise((resolve, reject) => {\n const isResume = sessionId ? true : false;\n const invalidOperationHandler = () => {\n var _a;\n const invalidOperationResult = {\n code: 3237085186 /* ScErrorCode.InvalidOperation */,\n subSessionId: subSessionId\n };\n this.addResultToSpan(invalidOperationResult.code);\n // Should not happen in production, collect error just in case.\n const launchTelemetryEvent = telemetryhandler_1.ScTelemetryHandler.getGameLaunchRequestEvent((_a = sessionParameters.serverAddress) !== null && _a !== void 0 ? _a : \"\", isResume, sessionId);\n launchTelemetryEvent.result = (0, dependencies_1.GetHexString)(invalidOperationResult.code);\n launchTelemetryEvent.subSessionId = subSessionId;\n telemetryhandler_1.ScTelemetryHandler.sendGameLaunchRequestEvent(launchTelemetryEvent);\n resolve(invalidOperationResult);\n };\n // Both start and resume sessions needs authentication.\n if (!this.isAuthInfoAvailable()) {\n dependencies_1.Log.e(LOGTAG, \"Auth info not initialized, cannot start/resume new session.\");\n invalidOperationHandler();\n return;\n }\n // We only support one start/resume at a time, no technical limitation, no use case needs it.\n // if clients are attempting to start/resume again while one in progress then probably client did not invoke abort on the previous abortController.\n if (this.isSessionSetupInProgress()) {\n dependencies_1.Log.e(LOGTAG, \"start/resume is already in progress, cannot start new session.\");\n invalidOperationHandler();\n return;\n }\n // todo: evaluate if we can avoid caching CMSID in gsTelemetryHandler\n telemetryhandler_1.ScTelemetryHandler.setCmsId(sessionParameters.appId);\n telemetryhandler_1.ScTelemetryHandler.setSubSessionId(subSessionId);\n const url = this.createSessionRequestURL(sessionParameters, sessionId);\n const server = new URL(url).hostname;\n const launchTelemetryEvent = telemetryhandler_1.ScTelemetryHandler.getGameLaunchRequestEvent(server, isResume);\n this.sessionSetupData = {\n resolve: resolve,\n reject: reject,\n sessionId: sessionId,\n subSessionId: subSessionId,\n sessionUpdateCallback: updateCallback,\n lastQueuePosition: Number.MAX_VALUE,\n isSessionInQueue: false,\n cancelController: cancelController,\n launchTelemetryEvent: launchTelemetryEvent,\n startTime: performance.now()\n };\n const body = this.getSessionRequestData(sessionParameters, isResume, subSessionId);\n this.performSessionRequest(isResume ? SessionRequestType.RESUME_SESSION : SessionRequestType.CREATE_SESSION, url, body, cancelController)\n .then((response) => {\n if (!isResume && response.result === 15859712 /* ScErrorCode.Success */ && response.session) {\n dependencies_1.Log.i(LOGTAG, `Received session: ${response.session.sessionId} from server for new session request`);\n }\n this.processSessionSetupServerResponse(response);\n })\n .catch((err) => {\n this.processSessionSetupException(err);\n });\n }).catch((err) => {\n // We capture most of the exception, collect telemetry, launch event etc.\n // this should be an unexpected case, adding to telemetry just in case.\n this.adsStateInfo.clear();\n this.adUpdateArray.clear();\n this.sessionSetupData = undefined;\n this.processException(err, \"startOrResumeSession\");\n this.addResultToSpan(3237093384 /* ScErrorCode.DOMExceptionInSessionControl */);\n const result = {\n code: 3237093384 /* ScErrorCode.DOMExceptionInSessionControl */,\n subSessionId: subSessionId\n };\n return result;\n });\n }\n /**\n * Part of session setup process.\n * Initiates the GET session request during session setup/resume polling.\n * This further results in processing of next action during polling asynchronously.\n * @returns void\n */\n performSessionSetupPollingRequest() {\n var _a, _b;\n if (!this.sessionSetupData) {\n return;\n }\n const sessionSetupData = this.sessionSetupData;\n const url = this.getUrlForSession((_a = sessionSetupData.sessionId) !== null && _a !== void 0 ? _a : \"\");\n this.performSessionRequest(SessionRequestType.GET_SESSIONINFO, url, \"\", this.sessionSetupData.cancelController, (_b = this.sessionSetupData.sessionId) !== null && _b !== void 0 ? _b : \"\")\n .then((response) => {\n this.processSessionSetupServerResponse(response);\n })\n .catch((err) => {\n this.processSessionSetupException(err);\n });\n }\n /**\n * Part of session setup process.\n * Emits exception and resolves the sessions setup process.\n * @param err - Exception caught in one of the session setup process functions.\n */\n processSessionSetupException(err) {\n dependencies_1.Log.e(LOGTAG, `exception during session start/resume. error: ${err.message}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(err, \"processSessionSetupException\", LOGTAG + \".ts\", 0, 0, true);\n this.resolveStartResumeSession(3237093384 /* ScErrorCode.DOMExceptionInSessionControl */);\n }\n /**\n * Resolves the promise returned in startSession/resumeSession.\n * This is also responsible for emitting the launch telemetry event and clearing session setup related variables.\n * @param code - Result to be returned to client.\n * @param zoneName - zone which provided the response. undefined in network error/exception cases.\n * @param activeSessions - active sessions provided by server.\n * @returns void\n */\n resolveStartResumeSession(code, zoneName, activeSessions) {\n var _a, _b, _c;\n // avoids the need for null check in rest of this function.\n if (!this.sessionSetupData) {\n return;\n }\n // Any exceptions in any of the session setup process leads to this function.\n // However if this function throws an exception, it will result in unhandled exception.\n // catch the exception and do a promise rejection.\n try {\n const sessionStartResumeResult = {\n code: code,\n subSessionId: (_a = this.sessionSetupData.subSessionId) !== null && _a !== void 0 ? _a : \"\",\n session: this.sessionSetupData.lastSessionFromServer,\n zoneName: zoneName,\n activeSessions: activeSessions\n };\n const launchTelemetryEvent = this.sessionSetupData.launchTelemetryEvent;\n launchTelemetryEvent.result = (0, dependencies_1.GetHexString)(code);\n launchTelemetryEvent.zoneName = zoneName !== null && zoneName !== void 0 ? zoneName : \"\";\n launchTelemetryEvent.sessionId = (_b = this.sessionSetupData.sessionId) !== null && _b !== void 0 ? _b : \"\";\n // note: adding calculated duration to existing duration as GridServer usage already has the duration for put/post request in this event.\n launchTelemetryEvent.launchDuration +=\n performance.now() - this.sessionSetupData.startTime;\n telemetryhandler_1.ScTelemetryHandler.sendGameLaunchRequestEvent(this.sessionSetupData.launchTelemetryEvent);\n this.addResultToSpan(code);\n dependencies_1.Log.d(LOGTAG, `Session start/resume result: ${(0, dependencies_1.GetHexString)(code)}, sessionId: ${(_c = this.sessionSetupData.sessionId) !== null && _c !== void 0 ? _c : \"\"}`);\n this.sessionSetupData.resolve(sessionStartResumeResult);\n this.sessionSetupData = undefined;\n this.adsStateInfo.clear();\n this.adUpdateArray.clear();\n }\n catch (err) {\n if (this.sessionSetupData) {\n this.sessionSetupData.reject(err);\n this.sessionSetupData = undefined;\n }\n }\n }\n /**\n * Implements the logic for next action after response from server during session setup process.\n * @param response - return value of performSessionRequest function.\n * @returns\n */\n processSessionSetupServerResponse(response) {\n var _a, _b, _c;\n // sessionSetupData will always be set when code flow reaches here.\n // adding the below check to avoid checks in rest of the function.\n if (!this.sessionSetupData) {\n return;\n }\n const cancelHandler = () => {\n this.resolveStartResumeSession(sessionSetupData.isSessionInQueue\n ? 15867906 /* ScErrorCode.SessionSetupCancelledDuringQueuing */\n : 15867905 /* ScErrorCode.SessionSetupCancelled */);\n };\n const sessionSetupData = this.sessionSetupData;\n if (response.session) {\n response.session.subSessionId = this.sessionSetupData.subSessionId;\n this.sessionSetupData.lastSessionFromServer = response.session;\n this.sessionSetupData.sessionId = response.session.sessionId;\n // keep track of session setup state so that cancel code can be set appropriately.\n sessionSetupData.isSessionInQueue =\n response.pmResponse.session.seatSetupInfo.seatSetupStep ==\n 1 /* PM.SeatSetupStep.WAITING_FOR_RESOURCE */;\n }\n if (response.result === 15859712 /* ScErrorCode.Success */ && response.session) {\n const session = response.session;\n if (session.state === \"ready_for_connection\" /* SessionState.READY_FOR_CONNECTION */ ||\n session.state === \"streaming\" /* SessionState.STREAMING */) {\n // hack: GS server is sending fake notifications to NGS about stream connected.\n // we are facing race case while getSession, until thats fixed, consider\n // playing state as ready for connection.\n // todo: debug https://gfn.data.nvidiagrid.net/goto/f1580910-94a4-11ee-92ac-27f91702ba9c?sg_tenant=Global\n if (session.state == \"streaming\" /* SessionState.STREAMING */) {\n telemetryhandler_1.ScTelemetryHandler.sendDebugEvent(\"InvalidSessionStateTransition\", \"Streaming\");\n }\n // Successfully established session.\n dependencies_1.Log.i(LOGTAG, `${(_a = this.sessionSetupData.sessionId) !== null && _a !== void 0 ? _a : \"\"} is ready for connection`);\n this.resolveStartResumeSession(15859712 /* ScErrorCode.Success */, response.serverId);\n }\n else if (session.state == \"initializing\" /* SessionState.INITIALIZING */ ||\n session.state == \"resuming\" /* SessionState.RESUMING */) {\n const sessionUpdate = this.getSessionUpdate(response.pmResponse.session, this.sessionSetupData.lastQueuePosition, this.sessionSetupData.subSessionId);\n this.sessionSetupData.sessionUpdateCallback(sessionUpdate);\n if (sessionSetupData.isSessionInQueue) {\n this.sessionSetupData.lastQueuePosition = sessionUpdate.queuePosition;\n }\n // If we are providing ad info to client then switch to processing of AdUpdates from clients.\n if (sessionUpdate.ads.length) {\n this.processAdUpdates((_b = sessionSetupData.sessionId) !== null && _b !== void 0 ? _b : \"\", sessionSetupData.cancelController, this.processSessionSetupServerResponse.bind(this), this.processSessionSetupException.bind(this), cancelHandler, this.performSessionSetupPollingRequest.bind(this));\n }\n else {\n // No ads to be played or all ad play is completed.\n // wait for polling interval and attempt next GET session request or till clients initiates abort.\n const wait = new dependencies_1.CancellableWait(this.getPollingInterval(response.pmResponse.session), (_c = this.sessionSetupData.cancelController) === null || _c === void 0 ? void 0 : _c.signal);\n wait.getPromise()\n .then(this.performSessionSetupPollingRequest.bind(this))\n .catch(cancelHandler);\n }\n }\n else {\n dependencies_1.Log.e(LOGTAG, \"Unexpected sessions state. Server response: \" +\n sanitizePmResponse(JSON.stringify(response.pmResponse)));\n this.resolveStartResumeSession(3237093378 /* ScErrorCode.SessionFinishedState */, response.serverId);\n }\n }\n else if (response.result === 15867907 /* ScErrorCode.RequestCancelled */) {\n cancelHandler();\n }\n else {\n // error case\n this.resolveStartResumeSession(response.result, response.serverId, response.activeSessions);\n }\n }\n /**\n * Collects exception telemetry event and logs exception.\n * @param error - argument passed to catch handler.\n * @param sourceFunc - function where exception was caught.\n */\n processException(error, sourceFunc) {\n dependencies_1.Log.e(LOGTAG, `exception in ${sourceFunc}. error: ${error.message}`);\n dependencies_1.Log.e(LOGTAG, `Exception: ${error} stack: ${error.stack}`);\n telemetryhandler_1.ScTelemetryHandler.sendExceptionEvent(error, sourceFunc, LOGTAG + \".ts\", 0, 0, true);\n }\n}\nexports.SessionControlImpl = SessionControlImpl;\n/**\n * Sanitize a response from the PM for logging\n * @param response Response from the PM\n * @returns Sanitized version of the PM response safe for logging\n */\nfunction sanitizePmResponse(response) {\n const partnerStrippedResponse = (0, dependencies_1.stripPartnerCustomData)(response);\n const secretBlock = /(\"clientIp\" *: *\")(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)(?=\")/g;\n return partnerStrippedResponse.replace(secretBlock, \"$1***\");\n}\n//# sourceMappingURL=sessioncontrolimpl.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getResumableSession = exports.isResumableSessionState = exports.isCancelCode = exports.updateSessionParameters = exports.SessionControlTelemetry = void 0;\nconst telemetryhandler_1 = require(\"./telemetryhandler\");\n/**\n * Singleton instance of Telemetry interface to configure and update telemetry related data.\n * Applications must configure this during SessionControl library initialization phase.\n * This singleton instance is responsible for handling telemetry generated from all the library objects and functions.\n */\nexports.SessionControlTelemetry = telemetryhandler_1.ScTelemetryHandler;\n/**\n * This utility API sets all the streaming related properties of the SessionParameters object provided to this API.\n * Clients must pass the output (SelectResult object) of the ClientModeSelection library to fill certain fields of SessionParameters.\n * Fields that will be overwritten by this API:\n * - monitorSettings\n * - streamingFeatures\n * If the client wants to manually set these fields, it should do so after calling this API to initialize them with\n * the recommended values.\n * @param sessionParameters - object whose streaming related features will be updated by this API.\n * @param modeSelectionResult - serialized SelectResult object returned by ClientModeSelection library.\n * @note This API is usable for both SessionControl and GridServer session parameters\n * @note This API syntax is slightly different from the getStreamStartParameters API as there are a lot of non streaming related properties in SessionParameters.\n * It is better to just update the streaming related properties instead of creating a SessionParameters object.\n */\nfunction updateSessionParameters(sessionParameters, modeSelectionResult) {\n var _a;\n const srd = JSON.parse(modeSelectionResult);\n sessionParameters.monitorSettings = (_a = srd.clientRequestMonitorSettings) !== null && _a !== void 0 ? _a : [];\n sessionParameters.streamingFeatures = srd.requestedStreamingFeatures;\n}\nexports.updateSessionParameters = updateSessionParameters;\n/**\n * Returns true if the ScErrorCode is one of the cancellation error code.\n * @param code - ScErrorCode returned by any of the SessionControl APIs\n * @returns boolean\n */\nfunction isCancelCode(code) {\n switch (code) {\n case 15867905 /* ScErrorCode.SessionSetupCancelled */:\n case 15867906 /* ScErrorCode.SessionSetupCancelledDuringQueuing */:\n case 15867907 /* ScErrorCode.RequestCancelled */:\n return true;\n default:\n return false;\n }\n}\nexports.isCancelCode = isCancelCode;\n/**\n * Resume requests are accepted by servers only in certain states.\n * Clients can use this function to determine if an active session can be resumed or not.\n * {@link SessionStartResumeResult} / {@link SessionControl.getActiveSessions}\n * @param state - current Session state.\n * @returns true if session is resumable\n */\nfunction isResumableSessionState(state) {\n switch (state) {\n case \"ready_for_connection\" /* SessionState.READY_FOR_CONNECTION */:\n case \"streaming\" /* SessionState.STREAMING */:\n case \"paused\" /* SessionState.PAUSED */:\n return true;\n default:\n return false;\n }\n}\nexports.isResumableSessionState = isResumableSessionState;\n/**\n * Returns an active session for a specific appId which is in resumable state.\n * @param activeSessions - provided by SessionControl.getActiveSessions or SessionControl.startSession API.\n * @param appId - CMSID for which an active resumable session needs to be checked.\n * @returns - Session, if an active resumable session exits for an appId, else undefined.\n */\nfunction getResumableSession(activeSessions, appId) {\n for (const session of activeSessions) {\n if (session.appId === appId && isResumableSessionState(session.state)) {\n return session;\n }\n }\n return undefined;\n}\nexports.getResumableSession = getResumableSession;\n//# sourceMappingURL=sessioncontrolutils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GridServerSettings = exports.ConfigureGridServerSettings = exports.configureSessionControlSettings = exports.SessionControlSettings = void 0;\nconst dependencies_1 = require(\"./dependencies\");\n/* Note: For public client usage, please skip to RemoteConfigData interface definition. */\nconst LOGTAG = \"sessioncontrolsettings\";\n/* Note: This variable is not meant to be used by public Clients.\n */\nexports.SessionControlSettings = {\n commonConfig: {},\n remoteOverrideInfo: {\n type: \"UNKNOWN\" /* OverrideConfigTypeEnum.UNKNOWN */,\n version: \"\"\n },\n // todo: loggingEnabled and consoleLoggingEnabled are not used anywhere.\n loggingEnabled: true,\n consoleLoggingEnabled: false,\n webSocketSignaling: true,\n webRtcStreamer: false\n};\nexports.GridServerSettings = exports.SessionControlSettings;\n/**\n * Configures the internal settings of the library through configs from remote server and local settings from developers.\n * Clients must call this whenever remote configuration is fetched from GxT server.\n * If there is any configuration set by dev users, clients must call this API during library initialization stage.\n *\n * The SessionControlConfigData.overrideData is a string of feature toggle/options separated by '&' character.\n * The options are:\n * log=enable|disable -- Enable log generation from the library.\n * console=enable|disable -- Enable console log from the library if log generation is enabled.\n * hdr=on|off -- Force request HDR virtual monitors on server.\n * Instead of enable/disable, on/off or 0/1 values can also be used.\n * @param data - configuration parameters.\n */\nfunction configureSessionControlSettings(data) {\n var _a, _b, _c, _d, _e;\n dependencies_1.Log.i(LOGTAG, \"ConfigureSessionControlSettings: \" + JSON.stringify(data));\n (0, dependencies_1.ConfigureRtcUtilsSettings)(data);\n // Note: This function is at app start, let the exception bubble up and fail.\n // The remote config data can be handled within try catch as it will be part of prod.\n if (data.gxtOverrideData) {\n const configData = JSON.parse(data.gxtOverrideData);\n // Parse the 'pmCommunication' config block\n if (configData.params) {\n for (const element of configData.params) {\n if (element.name === \"pmCommunication\") {\n exports.SessionControlSettings.commonConfig.pmCommunication = (element.value);\n // Set the override config details for telemetry, only when we have some override settings\n exports.SessionControlSettings.remoteOverrideInfo = {\n type: \"GXT\" /* OverrideConfigTypeEnum.GXT */,\n version: element.version\n };\n }\n }\n }\n }\n if (data.overrideData) {\n const settings = data.overrideData.toLowerCase();\n const settingsMap = new URLSearchParams(settings);\n const getSettingBool = (key) => {\n const value = settingsMap.get(key);\n return (0, dependencies_1.toBool)(value);\n };\n exports.SessionControlSettings.loggingEnabled =\n (_a = getSettingBool(\"log\")) !== null && _a !== void 0 ? _a : exports.SessionControlSettings.loggingEnabled;\n exports.SessionControlSettings.consoleLoggingEnabled =\n exports.SessionControlSettings.loggingEnabled &&\n ((_b = getSettingBool(\"console\")) !== null && _b !== void 0 ? _b : exports.SessionControlSettings.consoleLoggingEnabled);\n // ClientSDK is using 'websocketsignaling' reference, delete this once thats removed.\n exports.SessionControlSettings.webSocketSignaling =\n (_c = getSettingBool(\"websocketsignaling\")) !== null && _c !== void 0 ? _c : exports.SessionControlSettings.webSocketSignaling;\n exports.SessionControlSettings.webRtcStreamer =\n (_d = getSettingBool(\"webrtcstreamer\")) !== null && _d !== void 0 ? _d : exports.SessionControlSettings.webRtcStreamer;\n exports.SessionControlSettings.hdr = (_e = getSettingBool(\"hdr\")) !== null && _e !== void 0 ? _e : exports.SessionControlSettings.hdr;\n }\n}\nexports.configureSessionControlSettings = configureSessionControlSettings;\n// todo: legacy API and struct to be deleted eventually\n/**\n * @deprecated please use configureSessionControlSettings\n */\nfunction ConfigureGridServerSettings(data) {\n configureSessionControlSettings(data);\n}\nexports.ConfigureGridServerSettings = ConfigureGridServerSettings;\n//# sourceMappingURL=settings.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ScTelemetryHandler = exports.GridServer_GameLaunch_RequestDef = void 0;\nconst settings_1 = require(\"./settings\");\nconst dependencies_1 = require(\"./dependencies\");\nclass GridServer_GameLaunch_RequestDef extends dependencies_1.TelemetryEventBase {\n constructor(info) {\n super(info);\n this.name = \"GridServer_GameLaunch_Request\";\n this.gdprLevel = \"functional\" /* GdprLevel.Functional */;\n }\n}\nexports.GridServer_GameLaunch_RequestDef = GridServer_GameLaunch_RequestDef;\n/// todo: Need to fetch the schema details from the JSON schema file\n/// Importing json file works, but the build fails as the json file is not getting copied into output\nconst SessionControlTelemetryConfig = {\n clientName: \"GFN_GridServer\",\n clientId: \"93289439828086895\",\n eventSchemaVer: \"2.1\"\n};\nclass TelemetryHandler extends dependencies_1.TelemetryImpl {\n constructor() {\n super(SessionControlTelemetryConfig);\n this.networkType = \"UNKNOWN\" /* NetworkTypeEnum.UNKNOWN */;\n this.cmsId = \"\";\n this.sessionId = \"\";\n this.subSessionId = \"\";\n this.exceptionCounts = new Map();\n this.totalExceptionCount = 0;\n }\n getTelemetryHttpEvent(url, verb, sessionId) {\n return {\n url,\n verb,\n statusCode: \"0\",\n requestStatusCode: \"\",\n sessionId: sessionId !== null && sessionId !== void 0 ? sessionId : \"\",\n subSessionId: this.subSessionId,\n requestId: \"\",\n serverId: \"\",\n callDuration: 0,\n response: \"None\"\n };\n }\n getGameLaunchRequestEvent(serverAddress, isResume, sessionId) {\n var _a, _b, _c;\n return {\n requestedZoneAddress: serverAddress,\n zoneName: \"\",\n networkSessionId: (_a = this.telemetryEventIds.networkTestId) !== null && _a !== void 0 ? _a : \"\",\n sessionId: sessionId !== null && sessionId !== void 0 ? sessionId : \"\",\n subSessionId: \"\",\n resumeType: isResume ? \"MANUAL\" /* ResumeType.MANUAL */ : \"NONE\" /* ResumeType.NONE */,\n overrideConfigType: settings_1.SessionControlSettings.remoteOverrideInfo.type,\n overrideConfigVersion: settings_1.SessionControlSettings.remoteOverrideInfo.version,\n result: \"\",\n codec: \"UNKNOWN\" /* CodecType.UNKNOWN */,\n ipVersion: \"UNKNOWN\" /* IPVersion.UNKNOWN */,\n launchDuration: 0,\n networkType: this.networkType,\n streamingProfileGuid: (_b = this.telemetryEventIds.streamingProfileGuid) !== null && _b !== void 0 ? _b : \"\",\n systemInfoGuid: (_c = this.telemetryEventIds.systemInfoGuid) !== null && _c !== void 0 ? _c : \"\",\n cmsId: String(this.cmsId)\n };\n }\n sendHttpEvent(event) {\n const httpEvent = new dependencies_1.GS_HttpCallResultDef({\n callDuration: event.callDuration,\n verb: event.verb,\n sessionId: event.sessionId,\n subSessionId: event.subSessionId,\n serverId: event.serverId,\n url: event.url,\n overrideConfigType: settings_1.SessionControlSettings.remoteOverrideInfo.type,\n overrideConfigVersion: settings_1.SessionControlSettings.remoteOverrideInfo.version,\n requestStatusCode: event.requestStatusCode,\n requestId: event.requestId,\n networkType: this.networkType,\n statusCode: event.statusCode,\n cmsId: String(this.cmsId),\n moduleName: \"GRID_SERVER\" /* GSModuleName.GRID_SERVER */,\n response: event.response\n });\n this.processEvent(httpEvent);\n }\n sendGameLaunchRequestEvent(eventData) {\n var _a, _b;\n eventData.launchDuration = Math.round(eventData.launchDuration);\n const event = new GridServer_GameLaunch_RequestDef(eventData);\n if (!event.parameters.sessionId) {\n event.parameters.sessionId = this.sessionId;\n }\n if (!event.parameters.subSessionId) {\n event.parameters.subSessionId = this.subSessionId;\n }\n event.parameters.systemInfoGuid = (_a = this.telemetryEventIds.systemInfoGuid) !== null && _a !== void 0 ? _a : \"\";\n event.parameters.streamingProfileGuid = (_b = this.telemetryEventIds.streamingProfileGuid) !== null && _b !== void 0 ? _b : \"\";\n this.processEvent(event);\n }\n sendDebugEvent(key1, key2, key3, key4, key5) {\n const event = new dependencies_1.GS_DebugInfoDef({\n key1: key1 !== null && key1 !== void 0 ? key1 : \"\",\n key2: key2 !== null && key2 !== void 0 ? key2 : \"\",\n key3: key3 !== null && key3 !== void 0 ? key3 : \"\",\n key4: key4 !== null && key4 !== void 0 ? key4 : \"\",\n key5: key5 !== null && key5 !== void 0 ? key5 : \"\",\n moduleName: \"GRID_SERVER\" /* GSModuleName.GRID_SERVER */,\n networkType: this.networkType,\n overrideConfigType: settings_1.SessionControlSettings.remoteOverrideInfo.type,\n overrideConfigVersion: settings_1.SessionControlSettings.remoteOverrideInfo.version,\n cmsId: String(this.cmsId),\n sessionId: this.sessionId,\n subSessionId: this.subSessionId\n });\n this.processEvent(event);\n }\n sendExceptionEvent(error, msg, file, lineno, colno, handled, category) {\n var _a;\n if (!this.canSendExceptionEvent(msg)) {\n return;\n }\n if (!category && error) {\n // If there is no explicit category supplied, construct one from error name and msg.\n // We should extend the schema to include these additional details, should we start\n // passing the category. Right now, category is not used.\n category = error.name + \": \" + error.message;\n }\n const event = new dependencies_1.GS_ExceptionInfoDef({\n filename: file,\n lineno: lineno,\n stacktrace: (_a = error === null || error === void 0 ? void 0 : error.stack) !== null && _a !== void 0 ? _a : \"\",\n colno: colno,\n handled: handled ? \"TRUE\" /* BooleanType.TRUE */ : \"FALSE\" /* BooleanType.FALSE */,\n category: category !== null && category !== void 0 ? category : \"\",\n message: msg,\n moduleName: \"GRID_SERVER\" /* GSModuleName.GRID_SERVER */,\n sessionId: this.sessionId,\n subSessionId: this.subSessionId\n });\n this.processEvent(event);\n }\n setSessionId(sessionId) {\n this.sessionId = sessionId;\n }\n setSubSessionId(subSessionId) {\n this.subSessionId = subSessionId;\n this.exceptionCounts.clear();\n this.totalExceptionCount = 0;\n }\n setCmsId(cmsId) {\n this.cmsId = cmsId;\n }\n setNetworkType(network) {\n this.networkType = (0, dependencies_1.convertNetworkTypeToTelemetryType)(network);\n }\n resetCache() {\n this.telemetryEventIds = {};\n this.sessionId = \"\";\n this.subSessionId = \"\";\n this.cmsId = \"\";\n }\n canSendExceptionEvent(message) {\n var _a;\n const MAX_EXCEPTIONS_PER_MSG = 10;\n const MAX_EXCEPTIONS_TOTAL = 50;\n if (this.totalExceptionCount >= MAX_EXCEPTIONS_TOTAL) {\n return false;\n }\n const count = (_a = this.exceptionCounts.get(message)) !== null && _a !== void 0 ? _a : 0;\n if (count >= MAX_EXCEPTIONS_PER_MSG) {\n return false;\n }\n this.totalExceptionCount++;\n this.exceptionCounts.set(message, count + 1);\n return true;\n }\n}\n// Singleton instance which will be made available to the clients from sessioncontrolutils.\nexports.ScTelemetryHandler = new TelemetryHandler();\n//# sourceMappingURL=telemetryhandler.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TracingComponent = void 0;\nexports.TracingComponent = {\n name: \"gridserver-core\",\n version: \"2.0\"\n};\n//# sourceMappingURL=tracing.js.map","/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 393:\n/*!*****************************************!*\\\n !*** ../ragnarok-core/dist/ragnarok.js ***!\n \\*****************************************/\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\nvar ba=!0,ca=!1;function da(a){if(a)switch(a){case \"enable\":case \"on\":case \"1\":case \"true\":return!0;case \"disable\":case \"off\":case \"0\":case \"false\":return!1}}function fa(a){var b,c;if(a.overrideData){const d=new URLSearchParams(a.overrideData.toLowerCase());\"lean\"===d.get(\"mode\")&&(ba=!1);a=e=>{e=d.get(e);return da(e)};ca=(ba=null!==(b=a(\"log\"))&&void 0!==b?b:ba)&&(null!==(c=a(\"console\"))&&void 0!==c?c:ca)}};var _gamestream$core = __webpack_require__(/*! @gamestream/core */ 778),_opentelemetry$api = __webpack_require__(/*! @opentelemetry/api */ 754);var k=new _gamestream$core.LogImpl(\"R\",{enable:ba,Sg:ca});function ha(){ia||(ia=new ja);return ia}function ka(a,b,c){const d=a.g.startSpan(b);return _opentelemetry$api.context.with(_opentelemetry$api.trace.setSpan(_opentelemetry$api.context.active(),d),async()=>{try{const e=c();return e instanceof Promise?await e:e}finally{d.end()}})}var ja=class{constructor(){this.g=_opentelemetry$api.trace.getTracer(\"gfn-web-gamestream\",\"2.0\")}},ia;var la=class{constructor(a,b){var c;this.g=0;this.h=this.o=!1;this.promise=new Promise((d,e)=>{this.C=d;this.m=e});(null===b||void 0===b?0:b.aborted)?(this.h=!0,this.m()):(this.j=b,this.l=this.s.bind(this),null===(c=this.j)||void 0===c?void 0:c.addEventListener(\"abort\",this.l),this.g=window.setTimeout(this.v.bind(this),a))}cancel(){var a;null===(a=this.j)||void 0===a?void 0:a.removeEventListener(\"abort\",this.l);this.g&&(window.clearTimeout(this.g),this.g=0);this.j=void 0}s(){this.h=!0;this.m();this.cancel()}v(){this.o=\n!0;this.C();this.g=0;this.cancel()}};function ma(a){return\"Xbox\"===a.os&&\"Edge\"===a.browser}function B(a){return\"iOS\"===a.os||\"iPadOS\"===a.os}function qa(a){return/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(a)?!0:!1}function G(a){return\"0x\"+(\"00000000\"+(a>>>0).toString(16).toUpperCase()).slice(-8)}function ra(a){return a?\"iOS\"===a.os:/iPhone|iPod/.test(navigator.userAgent)}function ta(a){return\"WebOS\"===a.os}\nfunction ua(a){return\"ChromeOS\"===a.os}function va(a){return\"Windows\"===a.os}function ya(a){return\"macOS\"===a.os}function za(a){return\"Tizen\"===a.os}var Aa={method:\"GET\",headers:{},body:\"\",retryCount:0,timeout:0,keepalive:!1};function Ba(){const a=_opentelemetry$api.trace.getActiveSpan();a&&a.setAttribute(\"error\",\"true\")}\nfunction Ca(a,b=Aa,c,d){var e;const f=null!==(e=b.method)&&void 0!==e?e:\"GET\";return ka(ha(),f,()=>{var g=b.headers;const h=_opentelemetry$api.trace.getActiveSpan();if(h){var l=new Map([[\"component\",\"rtcutils-core\"],[\"component.version\",\"2.0\"],[\"http.method\",f],[\"http.url\",a],[\"type\",\"\"],[\"http.hostname\",\"\"],[\"http.path\",\"\"]]);try{const n=new URL(a);l.set(\"type\",n.protocol);l.set(\"http.hostname\",n.hostname);l.set(\"http.path\",n.pathname)}catch(n){k.e(\"{d988e7f}\",\"{997fb3a}\")}for(const [n,m]of l)h.setAttribute(n,\nm);h.setAttributes(g)}return Da(a,b,c,d)})}\nfunction Da(a,b=Aa,c,d){var e,f;let g=void 0===b.retryCount?1:b.retryCount+1;const h=g,l=null!==(e=b.hg)&&void 0!==e?e:500;let n=l;const m=null!==(f=b.method)&&void 0!==f?f:\"GET\";let p=new Headers;const r=null!==d&&void 0!==d?d:new AbortController;(t=>{if(t)switch(t.type){case 1:t.token&&p.set(\"authorization\",\"GFNJWT \"+t.token);break;case 2:t.token&&p.set(\"authorization\",\"GFNPartnerJWT auth=\"+t.token)}void 0!==b.headers&&Object.keys(b.headers).forEach(v=>{p.set(v,b.headers[v])});t={};_opentelemetry$api.propagation.inject(_opentelemetry$api.context.active(),\nt);for(const [v,q]of Object.entries(t))p.set(v,q)})(c);return new Promise((t,v)=>{const q=w=>{Ba();v(w)},u=()=>{const w=x=>{if(1{y.h?(z={code:15867905,Kc:h-g},Ba(),v(z)):(k.w(\"{d988e7f}\",\"{d3ca39d}\",JSON.stringify(z)),z={code:3237089284,Kc:h-g},Ba(),v(z))});n+=l;return!0}return!1};if(navigator.onLine){let x={method:m,headers:p,mode:\"cors\",keepalive:b.keepalive,signal:r.signal,cache:\"no-store\"};\"GET\"!==m&&\n\"HEAD\"!==m&&(x.body=b.body);let y;const z=[0,DOMException.NETWORK_ERR,DOMException.TIMEOUT_ERR,503],A=b.timeout?new la(b.timeout):void 0,E=[];E.push(fetch(a,x));A&&E.push(A.promise);Promise.race(E).then(C=>{if(null===A||void 0===A?0:A.o)throw k.w(\"{d988e7f}\",\"{5a69b89}\",a),{code:DOMException.TIMEOUT_ERR,message:\"Timeout while performing HTTP request\"};if(C instanceof globalThis.Response)return y=C.status,C.text()}).then(C=>{if(!C&&z.includes(y)){if(1{const K=F=>{if([0,DOMException.NETWORK_ERR,DOMException.TIMEOUT_ERR].includes(F))return k.d(\"{d988e7f}\",\"{0a9fabe}\"),3237089282;if(F==DOMException.ABORT_ERR)return k.d(\"{d988e7f}\",\"{235387a}\"),15867905;k.w(\"{d988e7f}\",\"{f116c88}\",F);return 3237089284};\nC instanceof Error?k.d(\"{d988e7f}\",\"{b6e778a}\",C.message):k.d(\"{d988e7f}\",\"{ec768a1}\",JSON.stringify(C),C);C=(F=>{let N=0;if(null===F||void 0===F?0:F.code)N=null===F||void 0===F?void 0:F.code;else if(null===F||void 0===F?0:F.name)\"AbortError\"===F.name?N=DOMException.ABORT_ERR:\"NetworkError\"===F.name?N=DOMException.NETWORK_ERR:\"TimeoutError\"===F.name&&(N=DOMException.TIMEOUT_ERR);return N})(C);0==C&&b.keepalive&&(b.keepalive=!1);z.includes(C)?w(C)||(k.w(\"{d988e7f}\",\"{dff1a05}\",h,C),q({code:K(C),Kc:h-\ng})):q({code:K(C),Kc:h-g})}).finally(()=>{null===A||void 0===A?void 0:A.cancel()})}else q({code:3237089281,description:\"No network\",Kc:h-g})};u()})}function Ea(){var a,b;return null===(b=null===(a=window.matchMedia)||void 0===a?void 0:a.call(window,\"(pointer:coarse)\"))||void 0===b?void 0:b.matches}function Fa(){var a,b;return!!window.TouchEvent&&(null===(b=null===(a=window.matchMedia)||void 0===a?void 0:a.call(window,\"(any-pointer:coarse)\"))||void 0===b?void 0:b.matches)}\nfunction Ga(a){return\"Tizen\"===a.os||\"WebOS\"===a.os}function Ha(){let a=new Uint8Array(36);window.crypto.getRandomValues(a);let b=\"\";for(let c=0;36>c;c++){let d=a[c]%16;8==c||13==c||18==c||23==c?b+=\"-\":14==c?b+=\"4\":(19==c&&(d=d&3|8),b+=d.toString(16))}k.i(\"{d988e7f}\",\"{534eaf4}\",b);return b}function Ia(a,b){for(let c=0;ce)return!0;if(dNumber.parseInt(g));return Ia(f,b)}catch(f){k.w(\"{d988e7f}\",\"{bcd8f94}\")}return!0}function J(a,b,c,d){if(!B(a))return!1;try{return Ka(a.osVer,b,c,d)}catch(e){k.w(\"{d988e7f}\",\"{cf4149f}\")}return b?!1:!0}\nfunction Ka(a,b,c,d){a=a.replace(/[^0-9.]/,\"\").split(\".\").map(f=>Number.parseInt(f));const e=[c,null!==d&&void 0!==d?d:0];1===a.length&&a.push(0);return b?a.every((f,g)=>f===e[g]):Ia(a,e)}function Na(a,b=500){const c=new AbortController;window.setTimeout(()=>{c.abort()},b);return fetch(a,{method:\"OPTIONS\",signal:c.signal}).then(d=>d).catch(d=>{throw d;})}function Oa(a,b,c){return{code:a,description:b,error:null!==c?c:void 0}}\nfunction Pa(a){switch(a){case \"ETHERNET\":return\"ETHERNET\";case \"WIFI\":case \"WIFI_2_4\":return\"WIFI_2_4\";case \"WIFI_5_0\":return\"WIFI_5_0\";case \"MOBILE\":return\"MOBILE\";case \"MOBILE_2G\":return\"MOBILE_2G\";case \"MOBILE_3G\":return\"MOBILE_3G\";case \"MOBILE_4G\":return\"MOBILE_4G\";case \"MOBILE_5G\":return\"MOBILE_5G\";case \"OTHER\":case \"BLUETOOTH\":case \"WIMAX\":return\"OTHER\";default:return\"UNKNOWN\"}}function Qa(a){return a.replace(/(partnerCustomData\" *: *\")((\\\\\"|[^\"])*)(?=\")/g,\"$1***\")};var Ra=class{constructor(a){this.s=new Map;this.sa=a}addListener(a,b){var c=this.s.get(a);void 0!==c?c.add(b):(c=new Set,c.add(b),this.s.set(a,c))}removeListener(a,b){a=this.s.get(a);null===a||void 0===a?void 0:a.delete(b)}removeAllListenersOfEvent(a){this.s.delete(a)}removeAllListeners(){this.s.clear()}hasListener(a){a=this.s.get(a);return void 0!==a&&0 { ${b.name}(${a.name}, event, ${c.name}); };`)):e.push(`onmessage = (event) => { ${c.name}(${a.name}, event); };`);e.push(`${d.toString()}`);e.push(`onerror = (event) => { ${d.name}(event); };`);return URL.createObjectURL(new Blob(e,\n{type:\"text/javascript\"}))}function Va(a,b,c){if(!a.prototype.nb)throw Error(\"Invalid Worker class provided\");a=Sa(a);const d=new Worker(a);URL.revokeObjectURL(a);Wa(d,b,c)}function Xa(a,b,c){var d=window;if(\"undefined\"==typeof d.SharedWorker)throw Error(\"SharedWorker not supported\");if(!a.prototype.nb)throw Error(\"Invalid Worker class provided\");a=Sa(a,Ya);d=new d.SharedWorker(a);URL.revokeObjectURL(a);Wa(d,b,c);return d}const Za=new Map;\nfunction $a(a){if(!Za.has(a)){a.postMessage.bind(a)({Rb:2,data:null});var b=window.setTimeout(()=>{const c=Za.get(a);c&&(clearTimeout(c),Za.delete(a));a instanceof Worker?a.terminate():a instanceof MessagePort&&a.close()},150);Za.set(a,b)}}\nfunction Wa(a,b,c){const d=\"port\"in a?a.port:a,e=d.postMessage.bind(d);let f=!1;const g=h=>{f||(f=!0,k.e(\"{10ca8e2}\",\"{03baf25}\",h,typeof h),$a(d),c(h))};d.onmessage=h=>{h=h.data;let l=h.data;switch(h.Rb){case 1:e({Rb:3,data:null});break;case 4:b(l);$a(d);break;case 5:g(l)}};\"onmessageerror\"in d&&(d.onmessageerror=g);a.onerror=g;e({Rb:0,data:null})}function Ya(a,b,c){const d=globalThis;d.port=b.ports[0];d.port.onmessage=c.bind(self,a)}\nfunction Ta(a,b){var c;const d=globalThis;d.Od=null!==(c=d.Od)&&void 0!==c?c:{};c=b.data;b=c.Rb;c=c.data;let e=\"port\"in d?d.port:self;switch(b){case 0:var f=new a;d.Od[a.name]=f;e.postMessage({Rb:1,data:null});break;case 2:null===(f=null===self||void 0===self?void 0:self.close)||void 0===f?void 0:f.call(self);break;case 3:Promise.resolve(d.Od[a.name].nb()).then(g=>{e.postMessage({Rb:4,data:g})});break;default:throw Error(`Unknown message: ${b}:${c}`);}}\nfunction Ua(a){const b=globalThis;(\"port\"in b?b.port:self).postMessage({Rb:5,data:a})};function ab(a,b){switch(b){case \"STEAMDECK\":return\"CONSOLE\"}switch(a){case \"iOS\":return\"PHONE\";case \"iPadOS\":return\"TABLET\";case \"Xbox\":return\"CONSOLE\";case \"WebOS\":case \"Tizen\":return\"TV\";default:return\"DESKTOP\"}}function bb(a){a.start=performance.now();return new Promise(b=>{a.Kf?b(a.u):cb(a).then(()=>{a.Kf=!0;b(a.u)})})}\nasync function cb(a){var b=Promise,c=b.all,d=db(a),e=eb(a),f=fb(a),g=gb(a),h=hb(a),l=ib(a),n=jb(a),m=kb(a),p=lb(a),r=mb(a);navigator.maxTouchPoints&&0{if(a.ra){if(a.ga!=a.L||a.ja!=a.P)a.o=!0;(a.O||a.ea||a.da||a.na)&&!a.S&&(a.o=!0);a.m&&a.browserFullVer&&!pb(a.m,a.browserFullVer)&&(a.ua?a.qa&&!pb(a.qa,a.browserFullVer)&&(a.o=!0):a.o=!0);if(a.O&&!a.ta||a.ea&&!a.Z)a.o=!0;a.Sa?a.U&&!a.P?a.o=!0:a.F&&\n!a.L&&(a.o=!0):a.Ta?a.O||(a.o=!0):a.Ua?a.o=!0:a.U||!a.F||a.L||(a.o=!0);a.s=a.ra&&!a.o;a.W=a.ra&&a.o}var t,v,q,u,w,x,y,z,A,E,C,K,F,N,S,T,U,H,aa,ea;if(!a.Fe&&a.$)a.g=\"Unknown\",a.h=\"Unknown\",a.aa=!0,a.l=3,a.v=\"0\",a.m=\"0\",a.browserFullVer=\"0\",k.d(\"{3c72abb}\",\"{049d298}\");else if(a.Ta)a.g=\"ChromeOS\",qb(a);else if(a.Sa)qb(a),a.U?a.g=\"Windows\":a.F?(a.g=\"macOS\",a.j=\"APPLE\"):a.s?a.P?a.g=\"Windows\":a.L?(a.g=\"macOS\",a.j=\"APPLE\"):a.O||a.ea?(a.g=\"ChromeOS\",a.aa=!0,a.l=7):a.na&&(a.g=rb(a)):a.ja?a.g=\"Windows\":a.ga?\n(a.g=\"macOS\",a.j=\"APPLE\"):a.S?a.g=rb(a):a.oa?a.g=\"FreeBSD\":(a.g=\"Unknown\",a.l=5,k.d(\"{3c72abb}\",\"{101497c}\"));else if(a.Ua)sb(a),a.U?a.g=\"Windows\":a.F?(a.g=\"macOS\",a.j=\"APPLE\"):a.Se?(a.g=\"Android\",tb(a)):a.S?a.g=rb(a):a.oa?a.g=\"FreeBSD\":(a.g=\"Unknown\",a.l=5,k.d(\"{3c72abb}\",\"{49fcccb}\"));else if(a.he)a.h=\"Edge\",a.vc?a.s&&a.ca||a.I?(a.g=\"Xbox\",a.j=\"MICROSOFT\",a.Da?a.M=\"XBOXSERIES\":a.I&&(a.M=\"XBOXONE\")):a.g=\"Windows\":a.F?(a.g=\"macOS\",a.j=\"APPLE\"):a.Qa?(a.g=\"Android\",tb(a)):a.s?a.ca?(a.g=\"Xbox\",a.j=\"MICROSOFT\",\na.Da?a.M=\"XBOXSERIES\":a.I&&(a.M=\"XBOXONE\")):a.P?a.g=\"Windows\":a.L?(a.g=\"macOS\",a.j=\"APPLE\"):a.O||a.ea?(a.g=\"ChromeOS\",a.aa=!0,a.l=7):a.da?(a.g=\"Android\",tb(a)):a.na&&(a.g=rb(a)):a.ja?a.g=\"Windows\":a.ga?(a.g=\"macOS\",a.j=\"APPLE\"):a.R?(a.g=\"Android\",tb(a)):a.S?a.g=rb(a):a.oa?a.g=\"FreeBSD\":(a.g=\"Unknown\",a.l=5);else if(a.U)a.vc?ub(a):(ub(a),a.aa=!0,a.l=5);else if(a.F)vb(a);else if(a.Qa)wb(a);else if(a.s&&(a.ca||a.P)||a.ja||a.I)ub(a);else if(a.s&&a.L||a.Nb||a.Na||a.ga)vb(a);else if(a.s&&(a.O||a.ea))a.g=\n\"ChromeOS\",qb(a);else if(a.xf)a.g=\"ccOS\",a.j=\"HKMC\",a.h=\"Chromium\";else if(a.s&&a.da||a.R)wb(a);else if(a.s&&a.na)a.g=rb(a),a.Cb||a.fa?(a.h=\"Unknown\",a.l=3):xb(a)||(a.h=\"Unknown\",a.l=5,k.d(\"{3c72abb}\",\"{54c6569}\"));else if(a.Af)a.g=\"WebOS\",a.j=\"LG\",a.h=\"Chromium\",a.browserFullVer=null!==(H=a.browserFullVer)&&void 0!==H?H:a.rg,a.m=null!==(aa=a.m)&&void 0!==aa?aa:a.mg,a.W=!1;else if(a.Ka){a.g=\"Tizen\";a.h=\"Samsung\";if(null===(ea=window.webapis)||void 0===ea?0:ea.productinfo)try{a.v=window.webapis.productinfo.getFirmware(),\na.deviceName=window.webapis.productinfo.getRealModel(),a.Za=window.webapis.productinfo.getLicensedVendor()}catch(D){k.e(\"{3c72abb}\",\"{bc7dd9b}\")}else k.e(\"{3c72abb}\",\"{844af47}\"),a.v=\"0\",a.deviceName=\"\";a.j=\"Samsung\"!==a.Za&&a.Za?\"TIZENLICENSED\":\"SAMSUNG\";H=/(([0-9]+\\.)*[0-9]+)\\/(([0-9]+\\.)*[0-9]+)/;if(aa=navigator.userAgent)if(H=aa.match(H),a.browserFullVer=null===H||void 0===H?void 0:H[0],H=null===H||void 0===H?void 0:H[1])H=H.split(\".\"),a.m=null===H||void 0===H?void 0:H[0]}else a.S?a.Ne?(a.g=\"Android\",\na.j=\"AMAZON\",sb(a),a.H=\"TV\"):a.xa?(a.g=\"Android\",a.j=\"SAMSUNG\",a.h=\"Samsung\",tb(a)):xb(a)?a.W?a.g=rb(a):!a.Ef||a.Bf||a.If?a.S&&(a.g=\"Linux\"):(a.g=rb(a),a.h=\"Chromium\",a.l=7):(a.g=\"Unknown\",a.h=\"Unknown\",a.l=0,k.d(\"{3c72abb}\",\"{be86380}\")):a.oa?(a.g=\"FreeBSD\",a.$?a.h=\"Chrome\":a.wa?sb(a):(a.h=\"Unknown\",a.l=3,k.d(\"{3c72abb}\",\"{a2c16e4}\"))):a.Va||a.cb||a.bb?(a.Na=!0,vb(a),a.l=7):a.xa?(wb(a),a.l=7):(a.g=\"Unknown\",a.h=\"Unknown\",a.l=0,k.d(\"{3c72abb}\",\"{f2eecc9}\"));a.W&&(a.v=\"0\",a.m=\"0\",a.browserFullVer=\n\"0\");a.Qc=performance.now();a.u.os=null!==(t=a.g)&&void 0!==t?t:\"Unknown\";a.u.browser=null!==(v=a.h)&&void 0!==v?v:\"Unknown\";a.u.osRawVer=null!==(q=a.sg)&&void 0!==q?q:\"0\";a.u.osVer=null!==(u=a.v)&&void 0!==u?u:\"0\";a.u.browserVer=null!==(w=a.m)&&void 0!==w?w:\"0\";t=null!==(x=a.browserFullVer)&&void 0!==x?x:void 0;a.u.browserFullVer=null!==t&&void 0!==t?t:\"0\";a.u.browserBestVer=null!==(y=null!==t&&void 0!==t?t:a.u.browserVer)&&void 0!==y?y:\"0\";a.u.confidence=null!==(K=null!==(C=null!==(E=null!==(A=\nnull!==(z=a.l)&&void 0!==z?z:\"Unknown\"===a.g?0:void 0)&&void 0!==A?A:\"Unknown\"===a.h?5:void 0)&&void 0!==E?E:a.Ze?6:void 0)&&void 0!==C?C:a.W?8:void 0)&&void 0!==K?K:10;a.u.forging=null!==(F=a.aa)&&void 0!==F?F:!1;a.u.spoofing=null!==(N=a.W)&&void 0!==N?N:!1;a.u.vendor=null!==(S=a.j)&&void 0!==S?S:\"\";a.u.vendorFull=null!==(T=a.Za)&&void 0!==T?T:a.u.vendor;x=void 0;switch(a.u.os){case \"ChromeOS\":x=\"CHROMEOS\";break;case \"Windows\":x=\"WINDOWS\";break;case \"macOS\":x=\"MACOS\";break;case \"Linux\":x=\"LINUX\";\nbreak;case \"iOS\":x=\"IOS\";break;case \"iPadOS\":x=\"IPADOS\";break;case \"Tizen\":x=\"TIZEN\";break;case \"WebOS\":x=\"WEBOS\";break;case \"Android\":x=\"ANDROID\";break;case \"Xbox\":x=\"XBOX\";break;case \"SteamOS\":x=\"STEAMOS\";break;case \"ccOS\":x=\"CCOS\"}a.u.deviceOS=x;\"iPadOS\"!==a.u.os||a.Oe?a.Bb?a.u.deviceModel=\"STEAMDECK\":a.M&&(a.u.deviceModel=a.M):a.u.deviceModel=\"VISIONPRO\";a.u.deviceType=null!==(U=a.H)&&void 0!==U?U:ab(a.u.os,a.u.deviceModel);a.u.totalTime=a.Qc-a.start;a.u.gpuDetail=a.gpuDetail})}\nfunction yb(a,b){if(!a.$f){for(const c of b)b=c.voiceURI||\"\",b.startsWith(\"Chrome OS\")?a.Ta=!0:b.startsWith(\"Google\")?a.Sa=!0:b.includes(\"moz-tts\")?(b.includes(\"android\")&&(a.Se=!0,a.R=!0),a.Ua=!0):\"English United States\"==b&&(a.Qa=!0),b.includes(\"Microsoft\")?(a.U=!0,b.includes(\"Online\")?a.he=!0:a.vc=!0):b.includes(\"com.apple\")?(a.F=!0,b.includes(\"Ellen\")&&(a.Qe=!0)):\"Zuzana\"==b&&(a.F=!0);a.We=a.F||a.U||a.Sa||a.Ta||a.Ua||a.Qa;a.$f=!0}}\nfunction gb(a){const b=window.speechSynthesis;if(b){const c=b.getVoices;let d=(null===c||void 0===c?void 0:c.call(b))||[];return new Promise(e=>{if(!c||d.length)yb(a,d),e();else{let f=0;const g=()=>{d=c.call(b);const h=performance.now();0==d.length&&(0==f||600>h-f)?(a.T&&clearTimeout(a.T),a.T=window.setTimeout(g,150)):(a.T&&(clearTimeout(a.T),a.T=0),yb(a,d),e())};void 0!==b.onvoiceschanged&&(b.onvoiceschanged=g);window.setTimeout(()=>{d=c.call(b);d.length?g():(a.T=window.setTimeout(g,150),f=performance.now())},\n0)}})}return new Promise(c=>{c()})}\nfunction db(a){return new Promise(b=>{let c=!1;const d=l=>{if(a.ka)clearTimeout(a.ka),a.ka=0;else if(c){k.w(\"{3c72abb}\",\"{c1bb269}\");zb(a,\"GL\",a.De-performance.now());return}if(!a.rc){var n=l.Qf;if(n.startsWith(\"ANGLE\")){var m=n.split(\",\");1<(null===m||void 0===m?void 0:m.length)&&(a.gpuDetail=m[1].trim())}else a.gpuDetail=n;m=n.toLowerCase();n.includes(\"SraKmd\")?(a.I=!0,n.includes(\"SraKmd_arden\")&&(a.Da=!0),(n=/D3D11-(\\d{2,}\\.\\d{1,}\\.\\d{5,}\\.\\d{4,})/.exec(n))&&1{\"string\"==typeof l?Ab(a,\"GL\",l):\"data\"in l?Bb(a,\"GL\",l):Cb(a,\"GL\",l);f=!0;k.e(\"{3c72abb}\",\"{9e45306}\",l)};let h=0;try{self.OffscreenCanvas&&(e=!0,Va(Db,d,g),h=150)}catch(l){f=!0,Eb(a,\"GL\",l),k.w(\"{3c72abb}\",\"{caf8cd7}\",l)}window.setTimeout(()=>{a.rc||(a.ka=window.setTimeout(()=>{a.ka=0;a.De=performance.now();f?k.w(\"{3c72abb}\",\"{fbe663c}\"):e?(k.w(\"{3c72abb}\",\"{2577061}\"),Fb(a,\"GL\")):(k.i(\"{3c72abb}\",\"{95c252e}\"),Gb(a,\n\"GL\"));const l=(new Db).nb();d(l);c=!0},h))},0)})}\nfunction eb(a){return new Promise(b=>{if(navigator.userAgentData){var c=n=>{var m;if(!a.Rf){var p=n.model,r=n.platform,t=n.platformVersion,v=n.uaFullVersion,q=n.bitness;\"\"==p&&\"\"==r&&\"\"==t&&\"\"==v?a.lb&&a.R||a.Ka||void 0==q||a.R&&!a.$||(a.o=!0):\"\"==q&&\"Android\"!=r&&(a.o=!0);p&&(\"Xbox\"===p?a.ca=!0:p.startsWith(\"AFT\")?(a.ef=!0,a.N=!0):p.includes(\"BRAVIA\")?(a.N=!0,a.Ye=!0):\"Chromecast\"===p?(a.N=!0,a.cf=!0,a.deviceName=\"CHROMECAST\"):\"SHIELD Android TV\"===p?(a.N=!0,a.mf=!0,a.deviceName=\"SHIELDTV\"):p.startsWith(\"MiTV\")?\n(a.N=!0,a.hf=!0,a.deviceName=\"MITV\"):p.startsWith(\"TVision\")&&(a.N=!0,a.uf=!0,a.deviceName=\"TVISION\"));\"Windows\"===r?a.P=!0:\"macOS\"===r?a.L=!0:\"Chrome OS\"===r||\"ChromeOS\"===r?a.O=!0:\"Chromium OS\"===r?a.ea=!0:\"Android\"===r?a.da=!0:\"Linux\"===r&&(\"\"==t?(a.da=!0,a.vf=!0):a.na=!0);p=w=>{if(w&&\"string\"==typeof w)return w.replace(/[-._,:;|#@]/g,\".\")};var u=w=>{if(!w||!a.qa||95>+a.qa)return w;switch(w.split(\".\").map(x=>Number.parseInt(x))[0]){case 0:return\"8-\";case 1:return\"10.0.10240\";case 2:return\"10.0.10586\";\ncase 3:return\"10.0.14393\";case 4:return\"10.0.15063\";case 5:return\"10.0.16299\";case 6:return\"10.0.17134\";case 7:return\"10.0.17763\";case 8:return\"10.0.18362+\";case 9:return\"10.0.9\";case 10:return\"10.0.19041+\";case 11:return\"10.0.11\";case 12:return\"10.0.12\";case 13:return\"11.0.0\";case 14:return\"11.0.22000.0\";case 15:return\"11.0.22621.0\";default:return\"11.0.22621.0+\"}};r=w=>a.P&&!a.ca?u(w):w;n.brands&&0{n&&(a.sa&&(clearTimeout(a.sa),a.sa=0),c(n),b())},e=!1,f=!1,g=n=>{\"string\"==typeof n?Ab(a,\"HE\",n):\"data\"in n?Bb(a,\"HE\",n):Cb(a,\"HE\",n);f=!0;k.e(\"{3c72abb}\",\"{217e106}\",n)},h=0;try{if(self.SharedWorker){e=!0;var l=Xa(Ib,d,g);h=300}}catch(n){f=!0,k.w(\"{3c72abb}\",\"{a583546}\",n),Eb(a,\"HE\",n)}a.sa=window.setTimeout(()=>{l&&$a(\"port\"in l?l.port:l);f?k.w(\"{3c72abb}\",\"{dbf4b42}\"):e?(k.w(\"{3c72abb}\",\"{0bf7a38}\"),Fb(a,\"HE\"),a.Ze=!0):(k.i(\"{3c72abb}\",\"{7a82b59}\"),Gb(a,\"HE\"));(new Ib).nb().then(n=>\n{d(n)})},h)}else b()})}async function fb(a){a.uc=window.chrome?await Jb():!1}function hb(a){return new Promise(b=>{var c=navigator.userAgent;c&&(c=c.match(a.ze))&&(a.rg=null===c||void 0===c?void 0:c[1],a.mg=null===c||void 0===c?void 0:c[2]);b()})}\nfunction ib(a){var b,c,d,e,f,g,h,l,n,m,p,r,t,v;const q=window,u=q.hasOwnProperty,w=q.navigator;u.call(q,\"MSMediaKeys\")?a.Le=!0:u.call(q,\"_firefoxTV_cachedScrollPosition\")?a.Ne=!0:void 0!==q.__edgeActiveElement||q.__edgeTrackingPreventionStatistics?a.bb=!0:q.safari?a.Ve=!0:q.opr?a.Pe=!0:q.oprt?a.ge=!0:w.brave?a.va=!0:void 0!==q.OperaTouch||q.ethereum?(a.lb=!0,a.R=!0):q.yandex?a.ya=!0:q.QuickAccess?a.xa=!0:q.chrome?a.$=!0:q.netscape?a.wa=!0:q.__firefox__?a.cb=!0:q.__gCrWeb?a.Va=!0:q.ReactNativeWebView&&\n(a.Re=!0);void 0!==q.contacts||void 0!==q.ContactsManager?a.R=!0:u.call(q,\"onwebOSAccessibilityAlertDone\")||q.webOSSystem||u.call(q,\"onwebosaccessibilityalertdone\")?a.Af=!0:q.tizen||q.TizenTVApiInfo||q.addEdgeEffectONSCROLLTizenUIF||q.tizentvwasm?a.Ka=!0:q.HardkeyEvent&&(a.xf=!0);const x=q.Intl;if(null===(b=w.mediaCapabilities)||void 0===b?0:b.decodingInfo)a.pe=!0;q.BigInt&&(a.fg=!0,q.BigInt64Array&&(a.ie=!0));q.PerformanceNavigationTiming&&(a.Ae=!0);q.WebAssembly&&q.WebAssembly.Exception&&(a.Me=\n!0);q.BroadcastChannel&&(a.je=!0);q.GPUBuffer&&(a.te=!0);q.SharedWorker&&(a.Ge=!0);q.MediaRecorder&&(a.xe=!0);q.CSSCounterStyleRule&&(a.ke=!0);b=null===(c=q.ArrayBuffer)||void 0===c?void 0:c.prototype;if(null===b||void 0===b?0:b.hasOwnProperty(\"transfer\"))a.cg=!0;u.call(q,\"ondevicelight\")&&(a.qe=!0);if(null===(d=q.AbortSignal)||void 0===d?0:d.abort)a.bg=!0;u.call(q,\"onbeforeinput\")&&(a.eg=!0);x&&(x.DisplayNames&&(a.Pa=!0),a.ue=\"pinyin\"==(null===(e=(new x.Collator(\"zh\",{collation:\"pinyin\"})).resolvedOptions())||\nvoid 0===e?void 0:e.collation));q.Credential&&(a.oe=!0);q.LargestContentfulPaint&&(a.we=!0);if(null===(f=q.CSS)||void 0===f?0:f.registerProperty)a.me=!0;c=null===(g=q.HTMLElement)||void 0===g?void 0:g.prototype;if(null===c||void 0===c?0:c.hasOwnProperty(\"autofocus\"))a.se=!0;w.contacts&&(a.ne=!0);q.TrustedHTML&&(a.Ie=!0);q.WakeLock&&(a.Ke=!0);if(null===(h=q.Promise)||void 0===h?0:h.any)a.Ce=!0;q.FileSystemHandle&&(a.re=!0);if(null===(l=q.Atomics)||void 0===l?0:l.waitAsync)a.dg=!0;if(null===(m=null===\n(n=q.CSS)||void 0===n?void 0:n.supports)||void 0===m?0:m.call(n,\"aspect-ratio: auto\"))a.le=!0;q.ReadableStreamBYOBReader&&(a.Ee=!0);if(null===(r=null===(p=q.CSS)||void 0===p?void 0:p.supports)||void 0===r?0:r.call(p,\"overflow: clip\"))a.ye=!0;g=null===(t=q.InputEvent)||void 0===t?void 0:t.prototype;if(null===g||void 0===g?0:g.hasOwnProperty(\"isComposing\"))a.ve=!0;t=null===(v=q.HTMLVideoElement)||void 0===v?void 0:v.prototype;a.Oe=null===t||void 0===t?void 0:t.hasOwnProperty(\"webkitSupportsPresentationMode\")}\nfunction jb(a){var b,c,d,e;const f=window.RequestCrowNativeApi;if(f){let g=0;const h=new Promise((r,t)=>{g=window.setTimeout(()=>{t(\"timeout\")},100)}),l=window.zoneless,n=null!==(c=null===(b=null===l||void 0===l?void 0:l.windowAddEventListener)||void 0===b?void 0:b.bind(window))&&void 0!==c?c:window.addEventListener.bind(window),m=null!==(e=null===(d=null===l||void 0===l?void 0:l.windowRemoveEventListener)||void 0===d?void 0:d.bind(window))&&void 0!==e?e:window.removeEventListener.bind(window);let p;\nb=(new Promise(r=>{p=t=>{r(t.detail)};n(\"CrowNativeApiEvent\",p);f(JSON.stringify({Wg:\"RequestBrowserVersion\"}))})).then(r=>{var t;if(r=null===(t=r.browserVersion)||void 0===t?void 0:t.match(a.ze))a.browserFullVer=null===r||void 0===r?void 0:r[1],a.m=null===r||void 0===r?void 0:r[2]});return Promise.race([b,h]).catch(()=>{k.d(\"{3c72abb}\",\"{841bf6f}\")}).finally(()=>{window.clearTimeout(g);m(\"CrowNativeApiEvent\",p)})}return Promise.resolve()}\nfunction kb(a){return new Promise(b=>{let c=!1;const d=l=>{if(a.pa)clearTimeout(a.pa),a.pa=0;else if(c){k.w(\"{3c72abb}\",\"{b02109c}\");zb(a,\"Plat\",a.ag-performance.now());return}a.sc||(l=l.platform,\"MacIntel\"===l?a.ga=!0:\"iPhone\"===l?a.Na=!0:\"Win32\"===l?a.ja=!0:\"iPad\"===l?a.Nb=!0:\"FreeBSD amd64\"===l?a.oa=!0:\"Windows\"===l&&(a.ja=!0,a.aa=!0),l.startsWith(\"Linux\")&&(a.S=!0),a.sc=!0);b()};let e=!1,f=!1;const g=l=>{\"string\"==typeof l?Ab(a,\"Plat\",l):\"data\"in l?Bb(a,\"Plat\",l):Cb(a,\"Plat\",l);f=!0;k.e(\"{3c72abb}\",\n\"{6350135}\",l)};let h=0;try{e=!0,Va(Kb,d,g),h=150}catch(l){f=!0,Eb(a,\"Plat\",l),k.w(\"{3c72abb}\",\"{79668e5}\",l)}window.setTimeout(()=>{a.sc||(a.pa=window.setTimeout(()=>{a.pa=0;a.ag=performance.now();f?k.w(\"{3c72abb}\",\"{d9e1e01}\"):e?(k.w(\"{3c72abb}\",\"{a8d68cb}\"),Fb(a,\"Plat\")):(k.i(\"{3c72abb}\",\"{53e2225}\"),Gb(a,\"Plat\"));const l=(new Kb).nb();d(l);c=!0},h))},0)})}function lb(a){const b=window;b.ApplePaySession&&b.ApplePaySession.canMakePayments&&(a.tc=!0)}\nfunction mb(a){var b=navigator.plugins;for(const c of b)b=c.name,\"Native Client\"!==b&&(b.startsWith(\"Microsoft Edge PDF\")?a.If=!0:b.startsWith(\"Chrome PDF\")?a.Bf=!0:b.startsWith(\"Chromium PDF\")?a.Ef=!0:b.startsWith(\"PPAPI SAMSUNGHEALTH\")&&(a.Ka=!0))}function nb(a){const b=window;a.pc=b.matchMedia(\"(hover: hover)\").matches;a.qc=b.matchMedia(\"(hover: none)\").matches;a.nc=b.matchMedia(\"(pointer: coarse)\").matches;a.oc=b.matchMedia(\"(pointer: fine)\").matches}\nfunction ob(a){return new Promise(b=>{const c=l=>{a.Oa&&(clearTimeout(a.Oa),a.Oa=0);l.Id&&(a.wf=l.Id,a.kg=l.sd,a.jg=l.Nd);b()};let d=!1,e=!1;const f=l=>{\"string\"==typeof l?Ab(a,\"TV\",l):\"data\"in l?Bb(a,\"TV\",l):Cb(a,\"TV\",l);e=!0;k.e(\"{3c72abb}\",\"{f49e1b4}\",l)};let g=0,h;try{self.SharedWorker&&(d=!0,h=Xa(Lb,c,f),g=150)}catch(l){e=!0,k.w(\"{3c72abb}\",\"{2066dd6}\",l),Eb(a,\"TV\",l)}a.Oa=window.setTimeout(()=>{h&&$a(\"port\"in h?h.port:h);e?k.w(\"{3c72abb}\",\"{cdb3848}\"):d?(k.w(\"{3c72abb}\",\"{f01188c}\"),Fb(a,\"TV\")):\n(k.i(\"{3c72abb}\",\"{db9e3f4}\"),Gb(a,\"TV\"));(new Lb).nb().then(l=>{c(l)})},g)})}function zb(a,b,c){a.G?L(a.G,\"WorkerOverlongDelay\",b,c.toString()):a.C.push({type:\"WorkerOverlongDelay\",name:b,data:c})}function Ab(a,b,c){a.G?L(a.G,\"WebWorkerProblem\",b,c):a.C.push({type:\"ErrorString\",name:b,data:c})}function Bb(a,b,c){a.G?L(a.G,\"WorkerMessageProblem\",JSON.stringify(c)):a.C.push({type:\"MessageEvent\",name:b,data:c})}\nfunction Cb(a,b,c){a.G?L(a.G,\"WorkerProblem\",b,`${c.message} in ${c.filename}@${c.lineno}:${c.colno}`,JSON.stringify(c.error)):a.C.push({type:\"ErrorEvent\",name:b,data:c})}function Eb(a,b,c){var d;a.G?L(a.G,\"WorkerCreateFailure\",b,null!==(d=null===c||void 0===c?void 0:c.stack)&&void 0!==d?d:\"\",JSON.stringify(c)):a.C.push({type:\"WorkerCreateFailure\",name:b,data:c})}function Fb(a,b){a.G?L(a.G,\"WorkerTimeout\",b):a.C.push({type:\"WorkerTimeout\",name:b})}\nfunction Gb(a,b){a.G?L(a.G,\"WorkerUnused\",b):a.C.push({type:\"WorkerUnused\",name:b})}function Hb(a,b){var c;a.ra=!0;b.mobile&&(a.Cb=!0);var d=b.brands||[];b=0;for(const e of d){d=e.brand;const f=e.version;\"Google Chrome\"===d?(a.ta=!0,a.m=f):\"Microsoft Edge\"===d?(a.$a=!0,a.m=f):\"Opera\"===d?(a.ua=!0,a.m=f):\"Yandex\"===d?(a.ab=!0,a.m=f):\"Chromium\"===d?(a.Z=!0,a.m=null!==(c=a.m)&&void 0!==c?c:f,a.qa=f):\"Android WebView\"===d?(a.Je=!0,a.m=f):b++}2\nb.blob());return createImageBitmap(a).then(()=>!0,()=>!1)}function pb(a,b){if(a==b)return!1;let c=/^(\\d+)[.]?(.*)/;a=c.exec(a);b=c.exec(b);if(null==a){if(null==b)return!0}else if(null!=b&&a[1]==b[1]&&\"\"==a[2])return!0;return!1}function qb(a){a.h=\"Chrome\";!a.m&&a.we&&(a.m=a.me?a.se?a.ne?a.Pa?a.Ie?a.Ke?a.Ce?a.re?a.dg?a.le?a.Ee?a.ye?\"90+\":\"89\":\"88\":\"87\":\"86\":\"85\":\"84\":\"83\":\"81\":\"80\":\"79\":\"78\":\"77\")}function rb(a){return a.Bb?\"SteamOS\":\"Linux\"}\nfunction sb(a){a.h=\"Firefox\";a.m=a.ue?a.Pa?a.eg?a.bg?a.qe?\"88\":\"89+\":\"87\":\"86\":\"85\":\"84-\"}\nfunction tb(a){var b,c,d,e;if(a.s&&a.N)a.H=\"TV\";else if(!a.Cb&&!a.fa&&a.wf)a.H=\"TV\",a.j=null!==(c=null!==(b=a.j)&&void 0!==b?b:a.kg)&&void 0!==c?c:\"\",a.deviceName=null!==(e=null!==(d=a.deviceName)&&void 0!==d?d:a.jg)&&void 0!==e?e:\"UNKNOWN\",a.l=7;else if(!a.pc||a.oc)a.da?a.vf?a.qc&&a.nc||(a.H=\"DESKTOP\"):a.pc&&a.oc&&(a.H=\"DESKTOP\"):a.qc&&a.nc||(a.H=\"DESKTOP\");a.H||(a.H=600<=(screen.width{b||(b={});b.brands||(b.brands=a.brands);b.mobile||(b.mobile=a.mobile);return b}):Promise.resolve(void 0)}}\nclass Lb{nb(){let a={Id:!1,Nd:\"\",sd:\"\"};if(navigator.userAgent){var b=navigator.userAgent.toUpperCase();const c=\"BRAVIA TIZEN PHILIPSTV GOOGLETV CRKEY CHROMECAST SHIELDTV\".split(\" \"),d=\"SONY SAMSUNG PHILIPS GOOGLE GOOGLE GOOGLE NVIDIA\".split(\" \");if(RegExp(\"BRAVIA|SMARTTV|SMART-TV|PHILIPSTV|GOOGLETV|CRKEY|CHROMECAST|SHIELD Android TV\",\"i\").test(b)&&(a.Id=!0,b=b.match(c.join(\"|\"))))for(let e=0;e{switch(a){case \"Windows\":return\"WINDOWS\";case \"MacOS\":return\"MACOS\";case \"Linux\":return\"LINUX\";case \"ChromeOS\":return\"CHROMEOS\";case \"iOS\":return\"IOS\";case \"iPadOS\":return\"IPADOS\";case \"WebOS\":return\"WEBOS\";case \"Tizen\":return\"TIZEN\";case \"Xbox\":return\"XBOX\";case \"Android\":return\"ANDROID\";case \"SteamOS\":return\"STEAMOS\";case \"Shield\":return\"SHIELD\";default:return\"UNKNOWN\"}},Zb=a=>{switch(a){case \"Desktop\":return\"DESKTOP\";case \"Laptop\":return\"LAPTOP\";case \"TV\":return\"TV\";case \"Phone\":return\"PHONE\";\ncase \"Tablet\":return\"TABLET\";case \"Console\":return\"CONSOLE\";default:return\"DESKTOP\"}},Yb=a=>{switch(a){case \"Chrome\":return\"CHROME\";case \"Safari\":return\"SAFARI\";case \"Yandex\":return\"YANDEX\";case \"Edge\":return\"EDGE\";case \"Edge_legacy\":return\"EDGE_LEGACY\";case \"Firefox\":return\"FIREFOX\";case \"Samsung\":return\"SAMSUNG\";case \"Chromium\":return\"CHROMIUM\";case \"Opera\":return\"OPERA\";case \"Brave\":return\"BRAVE\";case \"Silk\":return\"SILK\";case \"undefined\":return\"UNKNOWN\";default:return\"UNKNOWN\"}};let ac;function bc(a){a.splice(0,a.length)}var cc=class extends Array{constructor(){super();this.push=this.h}h(...a){a=Array.prototype.push.apply(this,a);this.g&&this.g();return a}};var dc=class{constructor(a){this.name=\"\";this.gdprLevel=\"behavioral\";this.parameters=a;this.ts=(new Date).toISOString()}},ec=class extends dc{constructor(a){super(a);this.name=\"GS_DebugInfo\";this.gdprLevel=\"technical\"}},fc=class extends dc{constructor(a){super(a);this.name=\"GS_ExceptionInfo\";this.gdprLevel=\"technical\"}},gc=class extends dc{constructor(a){super(a);this.name=\"GS_ClientMetricEvent\";this.gdprLevel=\"functional\"}},hc=class extends dc{constructor(a){super(a);this.name=\"GS_Sleep_Event\";this.gdprLevel=\n\"technical\"}},ic=class extends dc{constructor(a){super(a);this.name=\"GS_WsCallResult\";this.gdprLevel=\"functional\"}},jc=class extends dc{constructor(a){super(a);this.name=\"GS_HttpCallResult\";this.gdprLevel=\"functional\"}};function kc(a,b){a.l.length&&!a.o&&(a.o=window.setTimeout(()=>lc(a),b))}function mc(a,b){if(a.g)switch(b.gdprLevel){case \"functional\":return\"Full\"===a.g.deviceGdprFuncOptIn||\"Temp\"===a.g.deviceGdprFuncOptIn;case \"technical\":return\"Full\"===a.g.gdprTechOptIn;case \"behavioral\":return\"Full\"===a.g.gdprBehOptIn}return!1}\nfunction nc(a,b){var c;a={...a.g,events:[]};a.sentTs=(new Date).toISOString();for(const d of b)b={name:d.name,ts:d.ts,parameters:d.parameters},null===(c=a.events)||void 0===c?void 0:c.push(b);return JSON.stringify(a)}function lc(a){if(a.l.length&&a.m){var b=nc(a,a.l);a.l=[];Ca(a.m,{...a.L,body:b}).then(c=>{200<=c.status&&299>=c.status||k.e(\"{95feb49}\",\"{1dc64ee}\",c.status)}).catch(c=>{k.e(\"{95feb49}\",\"{a0b4bea}\",c)}).finally(()=>{a.o=0;a.l.length&&kc(a,2E3)})}else a.o=0}\nvar oc=class{constructor(a){this.telemetryEventIds={};this.m=\"\";this.l=[];this.o=0;this.L={method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:\"\",retryCount:3,timeout:2E3};this.F=a}configure(a){if(a.option)if(\"function\"===typeof a.option){k.i(\"{95feb49}\",\"{01ded8b}\");this.s=a.option;this.m=void 0;this.o&&(window.clearTimeout(this.o),this.o=0);for(const b of this.l)this.s(b);this.l=[]}else if(\"string\"===typeof a.option)k.i(\"{95feb49}\",\"{c76ea37}\"),this.m=a.option,this.s=void 0,this.g&&kc(this);\nelse return k.e(\"{95feb49}\",\"{328a30f}\"),!1;else return k.e(\"{95feb49}\",\"{e936979}\"),!1;return!0}updateTelemetryCommonData(a){var b,c,d,e,f,g,h,l,n,m;const p=null===(b=this.g)||void 0===b?void 0:b.sessionId;this.g={...a,events:[]};this.g.clientId=this.F.clientId;this.g.eventSchemaVer=this.F.eventSchemaVer;this.g.deviceMake=null!==(c=this.g.deviceMake)&&void 0!==c?c:\"undefined\";this.g.deviceModel=null!==(d=this.g.deviceModel)&&void 0!==d?d:\"undefined\";this.g.integrationId=null!==(e=this.g.integrationId)&&\nvoid 0!==e?e:\"undefined\";this.g.userId=null!==(f=this.g.userId)&&void 0!==f?f:\"undefined\";this.g.externalUserId=null!==(g=this.g.externalUserId)&&void 0!==g?g:\"undefined\";this.g.idpId=null!==(h=this.g.idpId)&&void 0!==h?h:\"undefined\";this.g.eventProtocol=null!==(n=null===(l=this.g)||void 0===l?void 0:l.eventProtocol)&&void 0!==n?n:\"1.5\";this.g.eventSysVer=\"2.0\";this.g.sessionId=null!==(m=this.g.sessionId)&&void 0!==m?m:p;this.g.sessionId||(this.g.sessionId=Ha(),k.i(\"{95feb49}\",\"{7d66b6c}\",this.g.sessionId));\nthis.L.headers[\"X-Event-Protocol\"]=this.g.eventProtocol;this.m&&(this.l=this.l.filter(r=>mc(this,r)),kc(this))}updateTelemetryEventIds(a){this.telemetryEventIds={...a}}h(a,b){a={name:a.name,parameters:a.parameters,gdprLevel:a.gdprLevel,ts:a.ts,clientConfig:this.F};this.s?this.s(a):this.m&&this.g?mc(this,a)&&(b?(b=nc(this,[a]),a=navigator.sendBeacon(this.m,new Blob([b],{type:\"text/plain\"})),k.i(\"{95feb49}\",\"{6267b70}\",a,b)):(this.l.push(a),kc(this))):this.l.push(a)}};window.RtcUtils=window.RtcUtils||{};var M={Ga:{},Vb:{type:\"UNKNOWN\",version:\"\"},Md:!0,$e:!1,fe:!0,ee:!1};\nfunction pc(a){var b,c,d,e,f;k.i(\"{11b33a0}\",\"{e65e133}\",JSON.stringify(a));fa(a);if(a.gxtOverrideData){const g=JSON.parse(a.gxtOverrideData);if(g.params)for(const h of g.params)\"pmCommunication\"===h.name&&(M.Ga.pmCommunication=h.value,M.Vb={type:\"GXT\",version:h.version})}if(a.overrideData){const g=new URLSearchParams(a.overrideData.toLowerCase());a=h=>{h=g.get(h);return da(h)};M.Md=null!==(b=a(\"log\"))&&void 0!==b?b:M.Md;M.$e=M.Md&&(null!==(c=a(\"console\"))&&void 0!==c?c:M.$e);M.fe=null!==(d=a(\"websocketsignaling\"))&&\nvoid 0!==d?d:M.fe;M.ee=null!==(e=a(\"webrtcstreamer\"))&&void 0!==e?e:M.ee;M.hdr=null!==(f=a(\"hdr\"))&&void 0!==f?f:M.hdr}};var qc=class extends dc{constructor(a){super(a);this.name=\"GridServer_GameLaunch_Request\";this.gdprLevel=\"functional\"}};const rc={clientName:\"GFN_GridServer\",clientId:\"93289439828086895\",eventSchemaVer:\"2.1\"};function sc(a,b,c){return{url:a,verb:b,statusCode:\"0\",requestStatusCode:\"\",sessionId:null!==c&&void 0!==c?c:\"\",subSessionId:tc.subSessionId,requestId:\"\",serverId:\"\",callDuration:0,response:\"None\"}}\nfunction uc(a,b,c){var d=tc,e,f,g;return{requestedZoneAddress:a,zoneName:\"\",networkSessionId:null!==(e=d.telemetryEventIds.networkTestId)&&void 0!==e?e:\"\",sessionId:null!==c&&void 0!==c?c:\"\",subSessionId:\"\",resumeType:b?\"MANUAL\":\"NONE\",overrideConfigType:M.Vb.type,overrideConfigVersion:M.Vb.version,result:\"\",codec:\"UNKNOWN\",ipVersion:\"UNKNOWN\",launchDuration:0,networkType:d.networkType,streamingProfileGuid:null!==(f=d.telemetryEventIds.streamingProfileGuid)&&void 0!==f?f:\"\",systemInfoGuid:null!==\n(g=d.telemetryEventIds.systemInfoGuid)&&void 0!==g?g:\"\",cmsId:String(d.cmsId)}}function vc(a){var b=tc;a=new jc({callDuration:a.callDuration,verb:a.verb,sessionId:a.sessionId,subSessionId:a.subSessionId,serverId:a.serverId,url:a.url,overrideConfigType:M.Vb.type,overrideConfigVersion:M.Vb.version,requestStatusCode:a.requestStatusCode,requestId:a.requestId,networkType:b.networkType,statusCode:a.statusCode,cmsId:String(b.cmsId),moduleName:\"GRID_SERVER\",response:a.response});b.h(a)}\nfunction wc(a){var b=tc,c,d;a.launchDuration=Math.round(a.launchDuration);a=new qc(a);a.parameters.sessionId||(a.parameters.sessionId=b.sessionId);a.parameters.subSessionId||(a.parameters.subSessionId=b.subSessionId);a.parameters.systemInfoGuid=null!==(c=b.telemetryEventIds.systemInfoGuid)&&void 0!==c?c:\"\";a.parameters.streamingProfileGuid=null!==(d=b.telemetryEventIds.streamingProfileGuid)&&void 0!==d?d:\"\";b.h(a)}\nfunction xc(){var a=tc;const b=new ec({key1:\"InvalidSessionStateTransition\",key2:\"Streaming\",key3:\"\",key4:\"\",key5:\"\",moduleName:\"GRID_SERVER\",networkType:a.networkType,overrideConfigType:M.Vb.type,overrideConfigVersion:M.Vb.version,cmsId:String(a.cmsId),sessionId:a.sessionId,subSessionId:a.subSessionId});a.h(b)}\nfunction yc(a,b,c){var d=tc,e,f;if(50<=d.v)var g=!1;else{var h=null!==(g=d.j.get(b))&&void 0!==g?g:0;10<=h?g=!1:(d.v++,d.j.set(b,h+1),g=!0)}g&&(!e&&a&&(e=a.name+\": \"+a.message),a=new fc({filename:c,lineno:0,stacktrace:null!==(f=null===a||void 0===a?void 0:a.stack)&&void 0!==f?f:\"\",colno:0,handled:\"TRUE\",category:null!==e&&void 0!==e?e:\"\",message:b,moduleName:\"GRID_SERVER\",sessionId:d.sessionId,subSessionId:d.subSessionId}),d.h(a))}function zc(a){var b=tc;b.subSessionId=a;b.j.clear();b.v=0}\nclass Ac extends oc{constructor(){super(rc);this.networkType=\"UNKNOWN\";this.subSessionId=this.sessionId=this.cmsId=\"\";this.j=new Map;this.v=0}setNetworkType(a){this.networkType=Pa(a)}}var tc=new Ac;function Bc(a){switch(a){case 15867905:case 15867906:case 15867907:return!0;default:return!1}}function Cc(a){switch(a){case \"ready_for_connection\":case \"streaming\":case \"paused\":return!0;default:return!1}};function Dc(a,b){a[\"content-type\"]=\"application/json\";void 0!==b.deviceOs&&(a[\"nv-device-os\"]=b.deviceOs);void 0!==b.deviceType&&(a[\"nv-device-type\"]=b.deviceType);void 0!==b.deviceMake&&(a[\"nv-device-make\"]=b.deviceMake);void 0!==b.deviceModel&&(a[\"nv-device-model\"]=b.deviceModel);void 0!==b.clientType&&(a[\"nv-client-type\"]=b.clientType);void 0!==b.clientAppVersion&&(a[\"nv-client-version\"]=b.clientAppVersion);void 0!==b.clientStreamer&&(a[\"nv-client-streamer\"]=b.clientStreamer);void 0!==b.clientId&&\n(a[\"nv-client-id\"]=b.clientId);void 0!==b.deviceId&&(a[\"x-device-id\"]=b.deviceId);void 0!==b.browserType&&(a[\"nv-browser-type\"]=b.browserType);if(b.clientHeaders)for(const [c,d]of b.clientHeaders)b=c,\"x-nv-client-identity\"!==b.toLowerCase()&&(a[b.toLowerCase()]=d)}function Ec(a){switch(a){case 1:return 2;case 2:return 3;case 3:return 4;case 4:return 5;case 5:return 6;default:return 0}}\nfunction Fc(a,b){switch(b){case 2:return 1==a||0==a;case 3:return 2==a||4==a;case 4:return 3==a;case 5:return 2==a||4==a;case 6:return 5!=a;default:return!1}}function Gc(a){switch(a){case 1:return\"initializing\";case 2:return\"ready_for_connection\";case 3:return\"streaming\";case 4:case 5:return\"paused\";case 6:return\"resuming\";case 7:return\"finished\";default:return\"unknown\"}}\nfunction Hc(a){switch(a){case 3237085186:return\"invalid operation\";case 15859712:return\"success\";case 3237093379:case 3237093381:return\"Invalid server response\";case 3237093384:return\"Exception\";case 15867907:case 15867905:case 15867906:return\"cancelled\";case 15868417:return\"no network\";case 3237089282:return\"network error\";default:return\"server error\"}}\nfunction Ic(a,b){var c,d;Dc(a.o.headers,b);a.s.set(\"component\",\"gridserver-core\");a.s.set(\"component.version\",\"2.0\");a.s.set(\"client.name\",\"GFN-PC\");a.s.set(\"client.version\",\"29.0\");a.s.set(\"client.os\",null!==(c=b.deviceOs)&&void 0!==c?c:\"\");a.s.set(\"client.os.version\",null!==(d=b.deviceOsVer)&&void 0!==d?d:\"\");a.serverAddress=b.serverAddress;a.clientPlatformName=b.clientPlatformName;a.deviceId=b.deviceId;if(a.serverAddress.startsWith(\"mockpm://\")||\"mockpm.com\"===a.serverAddress.toLocaleLowerCase())a.serverAddress=\na.serverAddress.replace(\"mockpm://\",\"\"),a.protocol=\"http://\";a.u||\"browser\"!==a.clientPlatformName||Rb().then(e=>{a.u=e});return!0}function Jc(a){const b=_opentelemetry$api.trace.getActiveSpan();if(b)for(const [c,d]of a.s)b.setAttribute(c,d)}\nfunction Kc(a,b,c,d,e){const f=Ha();return(new Promise((g,h)=>{const l=e?!0:!1;var n=()=>{var p;const r={code:3237085186,subSessionId:f};O(r.code);const t=uc(null!==(p=b.serverAddress)&&void 0!==p?p:\"\",l,e);t.result=G(r.code);t.subSessionId=f;wc(t);g(r)};if(Lc(a))if(a.I())k.e(\"{1daeef1}\",\"{3753849}\"),n();else{tc.cmsId=b.appId;zc(f);n=Mc(a,b,e);var m=(new URL(n)).hostname;a.g={resolve:g,reject:h,sessionId:e,subSessionId:f,Uf:d,Jd:Number.MAX_VALUE,dd:!1,Tc:c,Kd:uc(m,l),startTime:performance.now()};\nh=Nc(a,b,l,f);Oc(a,l?1:0,n,h,c).then(p=>{!l&&15859712===p.result&&p.session&&k.i(\"{1daeef1}\",\"{7c01bce}\",p.session.sessionId);a.O(p)}).catch(p=>{a.N(p)})}else k.e(\"{1daeef1}\",\"{3781843}\"),n()})).catch(g=>{a.l.clear();bc(a.h);a.g=void 0;Pc(g,\"startOrResumeSession\");O(3237093384);return{code:3237093384,subSessionId:f}})}function Lc(a){return-1===a.C.type||!!a.C.token}\nfunction O(a,b){const c=_opentelemetry$api.trace.getActiveSpan();c&&(Bc(a)?(c.setAttribute(\"error\",!1),c.setAttribute(\"error.description\",Hc(a))):15859712==a?c.setAttribute(\"error\",!1):(c.setAttribute(\"error\",!0),c.setAttribute(\"error.description\",null!==b&&void 0!==b?b:Hc(a))))}function Qc(a,b){let c=a.protocol;b&&a.v.has(b)?(a=a.v.get(b),void 0!==a&&(c+=a.server,0!=a.port&&(c+=\":\"+a.port))):c+=a.serverAddress;return c+(\"/v2/session/\"+b)}\nfunction Oc(a,b,c,d,e,f){var g;const h=r=>{if(Bc(r))return!1;if(15859712!==r)return!0;switch(b){case 3:return!1;default:return!0}};let l={method:(()=>{switch(b){case 0:return\"POST\";case 2:return\"DELETE\";case 1:case 4:return\"PUT\";default:return\"GET\"}})(),headers:a.o.headers,body:d,retryCount:a.o.retryCount,timeout:a.o.timeout};if(2===b||4===b)l.keepalive=!0,a.u&&\"Chrome\"==a.u.browser&&!Ja(a.u,81)&&(l.keepalive=!1);const n=performance.now();let m=sc(c,null!==(g=l.method)&&void 0!==g?g:\"\",f);m.statusCode=\n\"0\";let p=\"\";return Ca(c,l,a.C,e).then(r=>{p=r.data;var t=performance.now();m.statusCode=r.status.toString();m.callDuration=Math.round(t-n);if(!r.data)throw k.e(\"{1daeef1}\",\"{ea40865}\"),new SyntaxError(\"The response from server does not contain any data\");try{var v=JSON.parse(r.data)}catch(A){throw m.response=r.data,A;}if(!v.requestStatus)throw k.e(\"{1daeef1}\",\"{862f264}\",Rc(r.data)),new SyntaxError(\"RequestStatus missing in response\");r=v.requestStatus.serverId.toUpperCase();m.requestId=v.requestStatus.requestId;\nm.serverId=r;m.requestStatusCode=v.requestStatus.statusDescription;t=v.requestStatus;var q=3237093632;if(void 0!==t.statusCode){var u=t.statusCode;1==u?q=15859712:0u&&(q=3237093632+u);3237093636!=q&&3237093672!=q||!t.unifiedErrorCode||(q=t.unifiedErrorCode)}t.unifiedErrorCode&&k.i(\"{1daeef1}\",\"{d2c9cc8}\",G(t.unifiedErrorCode));r={result:q,kd:v,serverId:r};t=v.requestStatus;var w,x,y;if(q=_opentelemetry$api.trace.getActiveSpan()){u=new Map([[\"host.dc\",null!==(w=t.serverId)&&void 0!==w?w:\"\"],\n[\"request.id\",null!==(x=t.requestId)&&void 0!==x?x:\"\"],[\"request.status\",null!==(y=t.statusDescription)&&void 0!==y?y:\"\"]]);for(const [A,E]of u)q.setAttribute(A,E)}if(5===b){if(v=v.sessions)r.activeSessions=Sc(a,v)}else if(2!==b){if(w=v.session){r.session=Tc(a,w);var z;x=_opentelemetry$api.trace.getActiveSpan();null===x||void 0===x?void 0:x.setAttribute(\"session.status\",null!==(z=w.status)&&void 0!==z?z:\"\");m.sessionId=r.session.sessionId}if(v=v.otherUserSessions)r.activeSessions=Sc(a,v),r.activeSessions.length&&\nk.d(\"{1daeef1}\",\"{ba4be1c}\",r.activeSessions.length)}m&&h(r.result)&&(vc(m),m=void 0);return r}).catch(r=>{let t={result:3237089282};const v=performance.now();if(r.code){r=r.code;var q=3237093384;3237089281===r?q=15868417:3237089282===r?q=3237089282:3237093377===r?q=3237093377:3237093379===r?q=3237093379:3237089283===r?q=3237089283:15867905==r&&(q=15867907);t.result=q}else{q=!1;if(r instanceof SyntaxError||r instanceof TypeError&&r.message&&r.message.includes(\"Cannot read property\"))q=!0,k.e(\"{1daeef1}\",\n\"{d8979bb}\",r.name,r.message);q?(t.result=3237093379,k.e(\"{1daeef1}\",\"{04bcd6f}\",Rc(p))):(t.result=3237093384,k.e(\"{1daeef1}\",\"{94d55bb}\",r,r.stack),yc(r,\"performSessionRequest\",\"sessioncontrolimpl.ts\"))}m&&h(t.result)&&(m.callDuration=Math.round(v-n),vc(m));k.e(\"{1daeef1}\",\"{9c647aa}\",l.method,c);k.e(\"{1daeef1}\",\"{200d7ba}\",t.result,Hc(t.result));return t})}function Pc(a,b){k.e(\"{1daeef1}\",\"{32f1296}\",b,a.message);k.e(\"{1daeef1}\",\"{94d55bb}\",a,a.stack);yc(a,b,\"sessioncontrolimpl.ts\")}\nfunction Tc(a,b){var c;let d={sessionId:b.sessionId,subSessionId:\"\",appId:0,appLaunchMode:0,state:Gc(b.status),zoneAddress:\"\",zoneName:\"\",deviceId:\"\",gpuType:\"\",monitorSettings:[],connectionInfo:[],finalizedStreamingFeatures:b.finalizedStreamingFeatures};d.appId=b.sessionRequestData?b.sessionRequestData.appId:0;if(b.connectionInfo){var e=b.connectionInfo;if(\"browser\"===a.clientPlatformName){let g=!1;for(var f of e)if(2===f.usage){g=!0;d.connectionInfo.push(f);const h={ip:\"\",port:49100,appLevelProtocol:5,\nprotocol:1,usage:14};f=f.ip.split(\".\");h.ip=f[0]+\"-\"+f[1]+\"-\"+f[2]+\"-\"+f[3];h.ip+=b.sessionControlInfo.ip.substring(b.sessionControlInfo.ip.indexOf(\".\"));k.d(\"{1daeef1}\",\"{cf7d7ea}\",h.ip);d.connectionInfo.push(h);break}g||(d.connectionInfo=e)}else d.connectionInfo=e}b.monitorSettings&&(d.monitorSettings=b.monitorSettings);b.gpuType&&(d.gpuType=b.gpuType);switch(null===(c=b.sessionRequestData)||void 0===c?void 0:c.appLaunchMode){case 3:d.appLaunchMode=2;break;case 2:d.appLaunchMode=1}b.sessionControlInfo&&\n(c=b.sessionControlInfo.ip,b=b.sessionControlInfo.port,c&&b&&(a.v.has(d.sessionId)&&(e=a.v.get(d.sessionId),(null===e||void 0===e?void 0:e.server)===c&&(null===e||void 0===e?void 0:e.port)===b||k.i(\"{1daeef1}\",\"{f09f5be}\",d.sessionId,null===e||void 0===e?void 0:e.server,null===e||void 0===e?void 0:e.port,c,b)),a.v.set(d.sessionId,{server:c,port:b})),d.zoneAddress=c,d.zoneName=c.split(\".\")[0].toUpperCase());return d}function Sc(a,b){return b.map(c=>Tc(a,c))}\nfunction Uc(a,b,c,d,e,f,g){const h=()=>{Jc(a);let p=Qc(a,b),r={action:6,adUpdates:Array.from(a.h)};k.d(\"{1daeef1}\",\"{dbca4b1}\",JSON.stringify(r));bc(a.h);Oc(a,4,p,JSON.stringify(r),c,b).then(t=>{d(t)}).catch(t=>e(t))};for(var l=a.h.length-1,n=0;1<=l;)3===a.h[l].adAction&&2===a.h[l-1].adAction?(a.h.splice(l-1,2),n++,l-=2):3===a.h[l-1].adAction?l--:l-=2;n&&k.d(\"{1daeef1}\",\"{98a2816}\",n);n=!1;l=1E3*a.m.adsWaitTimeoutS;const m=a.h.length;m&&(4===a.h[m-1].adAction&&1{a.h.g=r});const p=new la(l,c.signal);Promise.race([p.promise,n]).then(()=>{a.h.g=void 0;p.cancel();a.h.length?a.h.length==m?ka(ha(),\"AdUpdateRequest\",h):Uc(a,b,c,d,e,f,g):(k.w(\"{1daeef1}\",\"{5e1dfd0}\"),g())}).catch(r=>{a.h.g=void 0;p.h?(k.i(\"{1daeef1}\",\"{d7114d7}\"),f()):e(r)})}}\nfunction Mc(a,b,c){var d,e,f;c?a=Qc(a,c):(c=null!==(d=b.serverAddress)&&void 0!==d?d:a.serverAddress,a=a.protocol+c+\"/v2/session\");a+=\"?keyboardLayout=\"+(null!==(e=b.keyboardLayout)&&void 0!==e?e:\"en_US\");return a+=\"&languageCode=\"+(null!==(f=b.clientLocale)&&void 0!==f?f:\"en_US\")}\nfunction Nc(a,b,c,d){var e,f,g,h,l,n,m,p,r;let t;switch(b.appLaunchMode){case 2:k.d(\"{1daeef1}\",\"{6d5cf87}\");t=3;break;case 1:t=2;break;default:t=1}let v=null!==(g=null===(f=null===(e=b.monitorSettings)||void 0===e?void 0:e[0])||void 0===f?void 0:f.sdrHdrMode)&&void 0!==g?g:0;if(M.hdr){v=1;for(const q of b.monitorSettings)q.sdrHdrMode=1}e={audioMode:2,remoteControllersBitmap:null!==(h=b.remoteControllersBitmap)&&void 0!==h?h:0,sdrHdrMode:v,networkTestSessionId:null,availableSupportedControllers:[],\nclientVersion:\"29.0\",deviceHashId:a.deviceId,internalTitle:null,clientPlatformName:a.clientPlatformName,metaData:[{key:\"SubSessionId\",value:d},{key:\"wssignaling\",value:M.fe?\"1\":\"0\"}],surroundAudioInfo:0,clientTimezoneOffset:null!==(l=b.clientTimeZoneOffset)&&void 0!==l?l:-6E4*(new Date).getTimezoneOffset(),clientIdentification:\"GFN-PC\",parentSessionId:null,appId:b.appId,streamerVersion:1,clientRequestMonitorSettings:b.monitorSettings,appLaunchMode:t,sdkVersion:\"1.0\",enhancedStreamMode:1,useOps:!0,\nclientDisplayHdrCapabilities:null,accountLinked:null!==(n=b.accountLinked)&&void 0!==n?n:!1,partnerCustomData:null!==(m=b.partnerCustomData)&&void 0!==m?m:\"\",enablePersistingInGameSettings:null!==(p=b.enablePersistingInGameSettings)&&void 0!==p?p:!1,secureRTSPSupported:!1,userAge:null!==(r=b.userAge)&&void 0!==r?r:0,requestedStreamingFeatures:b.streamingFeatures};M.ee||\"browser\"===a.clientPlatformName?e.metaData.push({key:\"GSStreamerType\",value:\"WebRTC\"}):e.secureRTSPSupported=!0;for(const q in b.metaData)e.metaData.push({key:q,\nvalue:b.metaData[q]});a=c?JSON.stringify({action:2,data:\"RESUME\",sessionRequestData:e,metaData:[]}):JSON.stringify({sessionRequestData:e});k.i(\"{1daeef1}\",\"{c6c3ed4}\",c?\"PUT\":\"POST\",Qa(a));return a}\nfunction Vc(a,b,c,d){var e,f,g,h,l,n,m=\"Configuring\",p=0;if(b.seatSetupInfo)switch(b.seatSetupInfo.seatSetupStep){case 0:m=\"Connecting\";break;case 1:m=\"InQueue\";p=b.seatSetupInfo.queuePosition{Jc(this);return Kc(this,a,b,c)})}resumeSession(a,b,c,d){return ka(ha(),\"ResumeSession\",()=>{Jc(this);return Kc(this,b,c,d,a)})}deleteSession(a,b){return ka(ha(),\"DeleteSession\",()=>{Jc(this);if(!Lc(this))return k.e(\"{1daeef1}\",\"{4fed44a}\"),O(3237085186),Promise.resolve(3237085186);const c=Qc(this,a);return Oc(this,2,c,\"\",b,a).then(d=>{15859712==d.result?(this.v.delete(a),k.d(\"{1daeef1}\",\"{6206c13}\",a)):\nk.e(\"{1daeef1}\",\"{4de47e3}\",a,G(d.result));O(d.result);return d.result}).catch(d=>{Pc(d,\"deleteSession\");O(3237093384);return 3237093384})})}getActiveSessions(a){return ka(ha(),\"GetSessionList\",()=>{Jc(this);return Lc(this)?Oc(this,5,this.protocol+this.serverAddress+\"/v2/session\",\"\",a).then(b=>{b={code:b.result,activeSessions:b.activeSessions,zoneName:b.serverId};O(b.code);15859712!==b.code?k.e(\"{1daeef1}\",\"{9d2bb75}\",G(b.code)):k.d(\"{1daeef1}\",\"{081857f}\");return b}).catch(b=>{Pc(b,\"getActiveSessions\");\nb={code:3237093384};O(b.code);return b}):(k.e(\"{1daeef1}\",\"{dc27839}\"),O(3237085186),Promise.resolve({code:3237085186}))})}getSessionInfo(a,b){return ka(ha(),\"GetSession\",()=>{const c=Qc(this,a);return Oc(this,3,c,\"\",b,a).then(d=>{d={code:d.result,session:d.session,zoneName:d.serverId};15859712!==d.code?k.e(\"{1daeef1}\",\"{021d0f4}\",G(d.code)):k.d(\"{1daeef1}\",\"{fa53c7c}\");return d}).catch(d=>{Pc(d,\"getSessionInfo\");d={code:3237093384};O(d.code);return d})})}I(){return!!this.g}updateAdState(a){if(!this.I())return k.e(\"{1daeef1}\",\n\"{20d9281}\"),3237085186;const b=this.l.get(a.adId);if(!b)return k.e(\"{1daeef1}\",\"{74daa9c}\",a.adId),3237093386;const c=Ec(a.adAction);if(!Fc(b.ed,c))return k.e(\"{1daeef1}\",\"{09d8184}\",a.adAction,a.adId,b.ed),3237093386;if(this.h.length){const d=this.h[this.h.length-1].adId;if(d!==a.adId){const e=this.h[this.h.length-1].adAction;if(4!=e&&5!=e)return k.e(\"{1daeef1}\",\"{c161587}\",d),3237093386}}a.clientTimestamp||(a.clientTimestamp=Math.round(Date.now()/1E3));this.h.push(a);b.ed=c;this.l.set(a.adId,b);\nreturn 15859712}M(){var a,b;if(this.g){var c=Qc(this,null!==(a=this.g.sessionId)&&void 0!==a?a:\"\");Oc(this,3,c,\"\",this.g.Tc,null!==(b=this.g.sessionId)&&void 0!==b?b:\"\").then(d=>{this.O(d)}).catch(d=>{this.N(d)})}}N(a){k.e(\"{1daeef1}\",\"{e3be7ea}\",a.message);yc(a,\"processSessionSetupException\",\"sessioncontrolimpl.ts\");Xc(this,3237093384)}O(a){var b,c,d;if(this.g){var e=()=>{Xc(this,f.dd?15867906:15867905)},f=this.g;a.session&&(a.session.subSessionId=this.g.subSessionId,this.g.ug=a.session,this.g.sessionId=\na.session.sessionId,f.dd=1==a.kd.session.seatSetupInfo.seatSetupStep);if(15859712===a.result&&a.session){const g=a.session;\"ready_for_connection\"===g.state||\"streaming\"===g.state?(\"streaming\"==g.state&&xc(),k.i(\"{1daeef1}\",\"{30d6f44}\",null!==(b=this.g.sessionId)&&void 0!==b?b:\"\"),Xc(this,15859712,a.serverId)):\"initializing\"==g.state||\"resuming\"==g.state?(b=Vc(this,a.kd.session,this.g.Jd,this.g.subSessionId),this.g.Uf(b),f.dd&&(this.g.Jd=b.queuePosition),b.ads.length?Uc(this,null!==(c=f.sessionId)&&\nvoid 0!==c?c:\"\",f.Tc,this.O.bind(this),this.N.bind(this),e,this.M.bind(this)):(new la(Wc(this,a.kd.session),null===(d=this.g.Tc)||void 0===d?void 0:d.signal)).promise.then(this.M.bind(this)).catch(e)):(k.e(\"{1daeef1}\",\"{ce47cd1}\",Rc(JSON.stringify(a.kd))),Xc(this,3237093378,a.serverId))}else 15867907===a.result?e():Xc(this,a.result,a.serverId,a.activeSessions)}}};function Rc(a){return Qa(a).replace(/(\"clientIp\" *: *\")(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)(?=\")/g,\"$1***\")};var Zc={Success:15859712,InvalidOperation:3237085186,NetworkError:3237089282,GetActiveSessionServerError:3237089283,AuthTokenNotUpdated:3237093377,SessionFinishedState:3237093378,ResponseParseFailure:3237093379,InvalidServerResponse:3237093381,PutOrPostInProgress:3237093382,GridServerNotInitialized:3237093383,DOMExceptionInSessionControl:3237093384,InvalidAdStateTransition:3237093386,SessionServerErrorBegin:3237093632,RequestForbidden:3237093634,ServerInternalTimeout:3237093635,ServerInternalError:3237093636,\nServerInvalidRequest:3237093637,ServerInvalidRequestVersion:3237093638,SessionListLimitExceeded:3237093639,InvalidRequestDataMalformed:3237093640,InvalidRequestDataMissing:3237093641,RequestLimitExceeded:3237093642,SessionLimitExceeded:3237093643,InvalidRequestVersionOutOfDate:3237093644,SessionEntitledTimeExceeded:3237093645,AuthFailure:3237093646,InvalidAuthenticationMalformed:3237093647,InvalidAuthenticationExpired:3237093648,InvalidAuthenticationNotFound:3237093649,EntitlementFailure:3237093650,\nInvalidAppIdNotAvailable:3237093651,InvalidAppIdNotFound:3237093652,InvalidSessionIdMalformed:3237093653,InvalidSessionIdNotFound:3237093654,EulaUnAccepted:3237093655,MaintenanceStatus:3237093656,ServiceUnAvailable:3237093657,SteamGuardRequired:3237093658,SteamLoginRequired:3237093659,SteamGuardInvalid:3237093660,SteamProfilePrivate:3237093661,InvalidCountryCode:3237093662,InvalidLanguageCode:3237093663,MissingCountryCode:3237093664,MissingLanguageCode:3237093665,SessionNotPaused:3237093666,EmailNotVerified:3237093667,\nInvalidAuthenticationUnsupportedProtocol:3237093668,InvalidAuthenticationUnknownToken:3237093669,InvalidAuthenticationCredentials:3237093670,SessionNotPlaying:3237093671,InvalidServiceResponse:3237093672,AppPatching:3237093673,GameNotFound:3237093674,NotEnoughCredits:3237093675,InvitationOnlyRegistration:3237093676,RegionNotSupportedForRegistration:3237093677,SessionTerminatedByAnotherClient:3237093678,DeviceIdAlreadyUsed:3237093679,ServiceNotExist:3237093680,SessionExpired:3237093681,SessionLimitPerDeviceReached:3237093682,\nForwardingZoneOutOfCapacity:3237093683,RegionNotSupportedIndefinitely:3237093684,RegionBanned:3237093685,RegionOnHoldForFree:3237093686,RegionOnHoldForPaid:3237093687,AppMaintenanceStatus:3237093688,ResourcePoolNotConfigured:3237093689,InsufficientVmCapacity:3237093690,InsufficientRouteCapacity:3237093691,InsufficientScratchSpaceCapacity:3237093692,RequiredSeatInstanceTypeNotSupported:3237093693,ServerSessionQueueLengthExceeded:3237093694,RegionNotSupportedForStreaming:3237093695,SessionForwardRequestAllocationTimeExpired:3237093696,\nSessionForwardGameBinariesNotAvailable:3237093697,GameBinariesNotAvailableInRegion:3237093698,UekRetrievalFailed:3237093699,EntitlementFailureForResource:3237093700,SessionInQueueAbandoned:3237093701,MemberTerminated:3237093702,SessionRemovedFromQueueMaintenance:3237093703,ZoneMaintenanceStatus:3237093704,GuestModeCampaignDisabled:3237093705,RegionNotSupportedAnonymousAccess:3237093706,InstanceTypeNotSupportedInSingleRegion:3237093707,InvalidZoneForQueuedSession:3237093710,SessionWaitingAdsTimeExpired:3237093711,\nUserCancelledWatchingAds:3237093712,StreamingNotAllowedInLimitedMode:3237093713,ForwardRequestJPMFailed:3237093714,MaxSessionNumberLimitExceeded:3237093715,GuestModePartnerCapacityDisabled:3237093716,SessionRejectedNoCapacity:3237093717,SessionServerErrorEnd:3237093887,SessionSetupCancelled:15867905,SessionSetupCancelledDuringQueuing:15867906,RequestCancelled:15867907,NoInternetDuringSessionSetup:15868417};var $c=_gamestream$core.Og;function ad(a){var b;const c={monitorSettings:[],...a};if(0===c.monitorSettings.length)for(const d of null!==(b=a.streamParams)&&void 0!==b?b:[])c.monitorSettings.push({heightInPixels:d.height,framesPerSecond:d.fps,widthInPixels:d.width});return c}\nfunction bd(a){var b={ip:\"\",port:0,protocol:\"\"};for(const c of a.connectionInfo)if(14===c.usage){b.ip=c.ip;b.port=c.port;b.protocol=5===c.appLevelProtocol?\"https\":\"http\";b.resourcePath=c.resourcePath;break}b={signalConnectionInfo:b,mediaConnectionInfo:a.connectionInfo,streamInfo:[],clientLocale:\"\",...a};for(const c of a.monitorSettings)b.streamInfo.push({width:c.widthInPixels,height:c.heightInPixels,fps:c.framesPerSecond,sdrHdrMode:c.sdrHdrMode});return b}\nfunction cd(a){let b=[];if(a)for(const c of a)b.push({sessionId:c.sessionId,appId:c.appId,state:c.state,appLaunchMode:c.appLaunchMode});return b}\nasync function dd(a){k.d(\"{6bae601}\",\"{1aef200}\");a.serverAddress?(await Oc(a,5,a.protocol+a.serverAddress+\"/v2/session\",\"\").then(b=>{let c={sessionList:cd(b.activeSessions)};if(15859712!=b.result){let d={code:b.result,description:Hc(b.result)};c.error=d;k.e(\"{6bae601}\",\"{9d2bb75}\",G(d.code))}else k.d(\"{6bae601}\",\"{081857f}\");O(b.result);a.j.emit(\"ActiveSessionsResult\",c)}).catch(b=>{k.e(\"{6bae601}\",\"{63f9b57}\",b.message);k.e(\"{6bae601}\",\"{94d55bb}\",b,b.stack);yc(b,\"getAllActiveSessions\",\"gridserver.ts\");\nb={sessionList:[],error:{code:3237093384,description:Hc(3237093384)}};O(3237093384);a.j.emit(\"ActiveSessionsResult\",b)}),k.d(\"{6bae601}\",\"{a9e5439}\")):(a.j.emit(\"ActiveSessionsResult\",{sessionList:[],error:{code:3237093383,description:\"GridServer not initialized\"}}),O(3237093383))}function ed(a,b,c=\"\"){k.d(\"{6bae601}\",\"{1e04fe6}\",c,b);a.subSessionId=b;tc.sessionId=c;zc(b);const d=a.P.get(b);void 0===d||\"\"===d?a.P.set(b,c):k.w(\"{6bae601}\",\"{7dd264b}\",c)}\nfunction fd(a,b,c){var d;const e=!!c;ed(a,Ha(),c);if(!a.serverAddress)return gd({code:3237093383,description:\"GridServer not initialized\"});if(a.F)return gd({code:3237093382,description:\"Previous PutOrPost call is still in progress\"});tc.cmsId=b.appId;a.zoneName=void 0;a.zoneAddress=void 0;a.gpuType=void 0;const f=uc(a.serverAddress,e,c);f.networkSessionId=null!==(d=b.networkSessionId)&&void 0!==d?d:\"\";b=ad(b);let g=Mc(a,b,c),h=Nc(a,b,e,a.subSessionId),l=performance.now();return(new Promise((n,m)=>\n{const p=new AbortController;a.F=p;Oc(a,e?1:0,g,h,p,c).then(r=>{var t,v,q,u,w;f.launchDuration=Math.round(performance.now()-l);if(null===(t=r.session)||void 0===t?0:t.sessionId)f.sessionId=null===(v=r.session)||void 0===v?void 0:v.sessionId,c=null===(q=r.session)||void 0===q?void 0:q.sessionId;a.zoneName=r.serverId||a.zoneName;let x;r.session&&(x=bd(r.session),x.subSessionId=a.subSessionId,hd(a,x));f.zoneName=null!==(u=a.zoneName)&&void 0!==u?u:\"\";p.signal.aborted&&!Bc(r.result)&&(r.result=15867905,\nk.d(\"{6bae601}\",\"{3ec0e11}\"));15859712==r.result?(k.d(\"{6bae601}\",\"{30536f4}\",c),ed(a,a.getSubSessionId(),c),\"ready_for_connection\"==(null===(w=r.session)||void 0===w?void 0:w.state)?(f.result=G(15859712),wc(f)):a.L.set(f.sessionId,f),O(r.result),n(x)):(15867907===r.result&&(r.result=15867905),r={code:r.result,sessionId:c,description:Hc(r.result),sessionList:cd(r.activeSessions)},k.e(\"{6bae601}\",\"{17f93f3}\",G(r.code)),f.result=G(r.code),wc(f),O(r.code),m(r))}).catch(r=>{let t={code:3237093384,sessionId:c,\ndescription:Hc(3237093384)};k.e(\"{6bae601}\",\"{4318505}\",r.message);k.e(\"{6bae601}\",\"{94d55bb}\",r,r.stack);yc(r,\"putOrPostSession\",\"gridserver.ts\");f.result=G(t.code);wc(f);O(t.code);m(t)})})).finally(()=>{a.F=void 0})}function gd(a){O(a.code,a.description);return Promise.reject(a)}function hd(a,b){a.zoneAddress=b.zoneAddress||a.zoneAddress;a.zoneName=b.zoneName||a.zoneName;a.gpuType=b.gpuType||a.gpuType}\nfunction id(a,b,c){if(!a.serverAddress)return gd({code:3237093383,description:\"GridServer not initialized\"});if(c)return(new Promise((d,e)=>{var f=Qc(a,b),g=(new URL(f)).hostname;(f=a.L.get(b))?a.L.delete(b):(k.e(\"{6bae601}\",\"{bb9b2e3}\",b),f=uc(g,!1,b));g=new AbortController;a.H=g;a.g={resolve:d,reject:e,sessionId:b,subSessionId:a.subSessionId,Uf:a.T,Jd:Number.MAX_VALUE,dd:!1,Tc:g,startTime:performance.now(),Kd:f};a.M()})).then(d=>{let e;d.session&&(e=bd(d.session),hd(a,e));if(15859712===d.code&&\ne)return e;throw{code:d.code,description:Hc(d.code)};}).finally(()=>{a.l.clear();bc(a.h);a.g=void 0});c=Qc(a,b);return Oc(a,3,c,\"\",void 0,b).then(d=>{O(d.result);if(15859712===d.result&&d.session)return bd(d.session);throw{code:d.result,description:Hc(d.result)};})}\nfunction jd(a,b){if(!a.serverAddress)return gd({code:3237093383,description:\"Gridserver not initialized\"});let c=Qc(a,b);return new Promise((d,e)=>{k.d(\"{6bae601}\",\"{bbad3ce}\",b);Oc(a,2,c,\"\",void 0,b).then(f=>{if(15859712==f.result)k.d(\"{6bae601}\",\"{6206c13}\",b),d();else{let g={code:f.result,description:Hc(f.result),sessionId:b};k.e(\"{6bae601}\",\"{4de47e3}\",b,G(f.result));e(g)}O(f.result)}).catch(f=>{const g={code:3237093384,description:Hc(3237093384)};k.e(\"{6bae601}\",\"{c4f620c}\",f.message);k.e(\"{6bae601}\",\n\"{94d55bb}\",f,f.stack);yc(f,\"sendDeleteRequestImpl\",\"gridserver.ts\");e(g)})})}\nvar kd=class extends Yc{constructor(a,b){super();this.subSessionId=\"\";this.P=new Map;this.R=!1;this.L=new Map;this.S=c=>{this.j.emit(\"TelemetryEvent\",c)};this.T=c=>{this.j.emit(\"SessionUpdate\",c);this.j.emit(\"ProgressUpdate\",{sessionId:c.sessionId,subSessionId:c.subSessionId,queuePosition:c.queuePosition,eta:c.eta,state:c.progressState})};this.u=a;this.j=new Sb(b);k.isCallbackRegistered()||(this.R=!0,k.setLogCallback(this.j.$.bind(this.j)));tc.configure({option:this.S})}initialize(a){var b;k.i(\"{6bae601}\",\n\"{6802390}\",\"0.66.9\");const c={deviceId:null!==(b=a.deviceHashId)&&void 0!==b?b:\"\",...a,clientStreamer:a.clientStreamer.toString()};Ic(this,c);a=tc;a.telemetryEventIds={};a.sessionId=\"\";a.subSessionId=\"\";a.cmsId=\"\";k.d(\"{6bae601}\",\"{5af3344}\")}uninitialize(){this.cancelSessionSetup();this.R&&k.setLogCallback();this.j.removeAllListeners()}addListener(a,b){this.j.addListener(a,b)}removeListener(a,b){this.j.removeListener(a,b)}updateTelemetryEventIds(a){tc.updateTelemetryEventIds(a)}getAllActiveSessions(){ka(ha(),\n\"GetSessionList\",()=>{Jc(this);return dd(this)})}getSessionId(){var a;return null!==(a=this.P.get(this.subSessionId))&&void 0!==a?a:\"\"}getSubSessionId(){return this.subSessionId}putOrPostSession(a,b,c){return ka(ha(),c?\"PutSession\":\"PostSession\",()=>{Jc(this);return fd(this,a,c)})}getSession(a,b){return ka(ha(),\"GetSession\",()=>{Jc(this);return id(this,a,b)})}sendDeleteRequest(a){return ka(ha(),\"DeleteSession\",()=>{Jc(this);return jd(this,a)})}cancelSessionSetup(){var a,b;k.i(\"{6bae601}\",\"{c73e640}\");\nnull===(a=this.F)||void 0===a?void 0:a.abort();null===(b=this.H)||void 0===b?void 0:b.abort();this.H=this.F=void 0}getZoneName(){var a;return null!==(a=this.zoneName)&&void 0!==a?a:\"\"}getZoneAddress(){var a;return null!==(a=this.zoneAddress)&&void 0!==a?a:\"\"}getGpuType(){var a;return null!==(a=this.gpuType)&&void 0!==a?a:\"\"}I(){return!!this.H}},ld=class extends kd{constructor(){super()}getAllActiveSessions(){window.setTimeout(()=>{k.d(\"{6bae601}\",\"{b575263}\");this.j.emit(\"ActiveSessionsResult\",{sessionList:[]})},\n1)}putOrPostSession(a){var b;k.d(\"{6bae601}\",\"{71c010f}\");ed(this,Ha(),null!==(b=a.sessionId)&&void 0!==b?b:\"PassThruSessionId\");return new Promise(c=>{window.setTimeout(()=>{var d;let e={sessionId:this.getSessionId(),subSessionId:this.getSubSessionId(),appId:parseInt(a.appId),state:\"ready_for_connection\",signalConnectionInfo:{ip:\"\",port:49100,protocol:\"http\"},mediaConnectionInfo:[],streamInfo:[],appLaunchMode:a.appLaunchMode?a.appLaunchMode:0,zoneName:this.getZoneName(),zoneAddress:this.getZoneAddress(),\ngpuType:this.getGpuType(),clientLocale:\"\",finalizedStreamingFeatures:null!==(d=a.streamingFeatures)&&void 0!==d?d:{}};this.serverAddress&&(e.signalConnectionInfo.ip=this.serverAddress);if(a.connectionInfo){e.mediaConnectionInfo=a.connectionInfo;for(const f of e.mediaConnectionInfo)14===f.usage&&(e.signalConnectionInfo.ip=f.ip,e.signalConnectionInfo.port=f.port,e.signalConnectionInfo.protocol=5===f.appLevelProtocol?\"https\":\"http\",e.signalConnectionInfo.resourcePath=f.resourcePath,k.d(\"{6bae601}\",\"{c6b8e0f}\",\nf.ip,f.port))}e.signalConnectionInfo.ip||k.e(\"{6bae601}\",\"{a43f57e}\");if(a.monitorSettings)for(const f of a.monitorSettings)e.streamInfo.push({width:f.widthInPixels,height:f.heightInPixels,fps:f.framesPerSecond,sdrHdrMode:f.sdrHdrMode});else for(const f of a.streamParams)e.streamInfo.push({width:f.width,height:f.height,fps:f.fps});k.d(\"{6bae601}\",\"{07dc276}\",e.sessionId);c(e)},1)})}getSession(){return new Promise((a,b)=>{b({code:-1,description:\"PassthruPollingNotSupported\"})})}sendDeleteRequest(){return new Promise(a=>\n{a()})}updateAdState(){return-1}};var md={VIDEO:\"video\",AUDIO:\"audio\"},nd={Unknown:0,ApproachingEntitlementTimeout:1,ApproachingIdleTimeout:2,ApproachingSessionMaxTimeLimit:3,ClearUserIdleTimeOut:4};var od={allowUnconfined:!1,preventNavigation:!1};var pd=class{constructor(){this.g=1}};function qd(a){if(0==(a^15868672)>>8)return 256;let b=32769;switch(a){case 15859712:case 15867908:case 15868418:b=0;break;case 3237093894:case 3237093899:b=32776;break;case 3237093898:b=32772;break;case 3237093900:b=32773;break;case 3237093901:b=32770;break;case 15867910:b=1;break;default:k.d(\"{c00be32}\",\"{233ad08}\",G(a))}return b}\nfunction rd(a){if(a.stopData){var b=sd(a.stopData);if(b||0===b)return k.d(\"{c00be32}\",\"{921626d}\",b),td(b)}if(a.nvstResult){k.d(\"{c00be32}\",\"{f30bc33}\",a.nvstResult);a=a.nvstResult;b=15868672;switch(a){case 2147680256:b=15868704;break;case 2147680257:b=15868705;break;case 2147680258:b=3237093635;break;case 2147680259:b=3237094152;break;case 2147680260:b=15868706;break;case 2147680262:b=15868707;break;case 2147680263:b=15868708;break;case 2147680264:b=15868736;break;case 2147680265:b=15868737;break;\ncase 2147680266:b=15868738;break;case 2147680267:b=15868739;break;case 2147680268:b=15868741;break;case 2147680269:b=15868740;break;case 2147680270:b=15868742;break;case 2147680271:b=3237094147;break;case 2147680275:b=15868743;break;case 2147680277:b=15868709;break;case 2147680278:b=15868744;break;case 2147680279:b=15868710;break;case 2147680280:b=15868711;break;case 2147680281:b=15868712;break;case 2147680283:b=3237094155;break;case 2147680284:b=3237094156;break;case 2147680285:b=3237094157;break;\ncase 2147680286:b=3237093678;break;case 2147680287:b=15868715;break;case 2147680288:b=15868716;break;case 2147680289:b=15868719;break;case 2147680300:b=15868688;break;case 2147680291:b=15868704;break;case 2147745794:b=3237093892;break;case 2147745796:b=3237094158;break;case 2147745797:b=3237093892;break;case 2147745803:b=3237093892;break;case 2147745804:b=3237094146;break;case 2147745805:b=3237094148;break;case 2147745806:b=3237094149;break;case 2147745807:b=3237094150;break;case 2148438786:b=15868718;\nbreak;default:k.d(\"{c00be32}\",\"{094c45e}\",G(a))}return b}return a.code?(k.d(\"{c00be32}\",\"{6210ab0}\",a.code),td(a.code)):15868672}\nfunction td(a){let b=15868672;switch(a){case 256:b=15868704;break;case 257:b=15868705;break;case 258:b=15868706;break;case 259:b=15868707;break;case 260:b=15868708;break;case 261:b=15868709;break;case 262:b=15868710;break;case 263:b=15868711;break;case 264:b=15868712;break;case 265:b=15868713;break;case 266:b=15868714;break;case 267:b=15868715;break;case 268:b=15868716;break;case 269:b=15868719;break;case 270:b=15868688;break;case 512:b=15868736;break;case 513:b=15868737;break;case 514:b=15868738;\nbreak;case 515:b=15868739;break;case 516:b=15868740;break;case 517:b=15868741;break;case 518:b=15868742;break;case 519:b=15868743;break;case 520:b=15868744;break;case 521:b=15868745;break;case 33025:b=3237094145;break;case 33026:b=3237094146;break;case 33027:b=3237094147;break;case 33028:b=3237094148;break;case 33029:b=3237094149;break;case 33030:b=3237094150;break;case 33031:b=3237094151;break;case 33032:b=3237094152;break;case 33034:b=3237094153;break;case 33035:b=3237094154;break;case 33040:b=\n3237094155;break;case 33041:b=3237094156;break;case 33042:b=3237094157;break;case 37634:b=15868718;break;case 32768:b=3237094158;break;case 768:b=15868717;break;case 0:b=15868752;break;default:k.d(\"{c00be32}\",\"{1be40ed}\",G(a))}return b}function sd(a){if(2>a.length)return null;const b=atob(a);let c=0;const d=()=>{const e=256*b.charCodeAt(c)+b.charCodeAt(c+1);c+=2;return e};return 0==d()?a.length{I=pa.get(I);a:{if(I)switch(I.toLowerCase()){case \"enable\":case \"on\":case \"1\":case \"true\":I=\n!0;break a;case \"disable\":case \"off\":case \"0\":case \"false\":I=!1;break a}I=void 0}return I};Ma=I=>{I=pa.get(I);return cf(I)};c=I=>{I=pa.get(I);a:{if(I&&(I=Number.parseFloat(I),!Number.isNaN(I)))break a;I=void 0}return I};sa=(I,Ce)=>{I=pa.get(I);if(null===I)return Ce;if(I)return I};Cd=(Bd=null!==(d=b(\"log\"))&&void 0!==d?d:Bd)&&(null!==(e=b(\"console\"))&&void 0!==e?e:Cd);Dd=null!==(f=b(\"gamepad\"))&&void 0!==f?f:Dd;Ed=null!==(g=b(\"webrtcstats\"))&&void 0!==g?g:Ed;Fd=null!==(h=b(\"statsupload\"))&&void 0!==\nh?h:Fd;ce=null!==(l=b(\"mic\"))&&void 0!==l?l:ce;ee=null!==(n=b(\"mousefilter\"))&&void 0!==n?n:ee;fe=null!==(m=b(\"unadjustedmovement\"))&&void 0!==m?m:fe;Gd=null!==(p=Ma(\"bitrate\"))&&void 0!==p?p:Gd;0=Gd&&(Gd*=1E3);Qd=null!==(r=b(\"gamepadtest\"))&&void 0!==r?r:Qd;if(d=pa.get(\"resolution\"))f=d.toLowerCase().split(\"x\"),2==f.length?(e=parseInt(f[0]),f=parseInt(f[1]),e&&f?(Hd=e,Id=f):k.e(\"{fbd6ce8}\",\"{c87835d}\",d)):k.e(\"{fbd6ce8}\",\"{c87835d}\",d);Yd=null!==(t=Ma(\"fps\"))&&void 0!==t?t:Yd;Jd=null!==\n(v=b(\"gamepadraf\"))&&void 0!==v?v:Jd;ge=null!==(q=Ma(\"gamepadpoll\"))&&void 0!==q?q:ge;Kd=null!==(u=b(\"advancedgestures\"))&&void 0!==u?u:Kd;Ld=null!==(w=b(\"forcetouchdevice\"))&&void 0!==w?w:Ld;t=b(\"touch\");void 0!==t&&(he=t?2:0,Ld=t);Nd=null!==(x=b(\"storetouch\"))&&void 0!==x?x:Nd;Od=null!==(y=b(\"storetouchgesture\"))&&void 0!==y?y:Od;Md=null!==(z=b(\"touchwarp\"))&&void 0!==z?z:Md;Pd=null!==(A=b(\"latency\"))&&void 0!==A?A:Pd;ie=sa(\"deviceos\",ie);je=sa(\"devicetype\",je);ke=sa(\"clientstreamer\",ke);le=sa(\"clienttype\",\nle);me=sa(\"clientplatformname\",me);De=sa(\"clientid\",De);x=pa.get(\"applaunchmode\");null!==x&&(he=cf(x));Rd=null!==(E=b(\"rsdmm\"))&&void 0!==E?E:Rd;Sd=null!==(C=b(\"rsdmmtoggle\"))&&void 0!==C?C:Sd;null===(K=b(\"ioswars\"))||void 0===K||K||(Xd=Wd=Td=Vd=Ud=!1);Ud=null!==(F=b(\"audioreset\"))&&void 0!==F?F:Ud;Td=null!==(N=b(\"sourcereset\"))&&void 0!==N?N:Td;Vd=null!==(S=b(\"autoplaychange\"))&&void 0!==S?S:Vd;Ee=null!==(T=c(\"bitsperpixel\"))&&void 0!==T?T:Ee;Fe=null!==(U=c(\"bitsperpixel1440p\"))&&void 0!==U?U:Fe;\nGe=null!==(H=b(\"1440p\"))&&void 0!==H?H:Ge;de=null!==(aa=b(\"stutter\"))&&void 0!==aa?aa:de;if(pa.has(\"meta\")){He={};for(const I of pa.getAll(\"meta\"))E=I.split(\"~\"),2===E.length&&(He[E[0]]=E[1])}Ie=null!==(ea=b(\"haptics\"))&&void 0!==ea?ea:Ie;Je=null!==(D=b(\"av1\"))&&void 0!==D?D:Je;Ke=null!==(wa=(I=>{I=pa.get(I);I=I?I.split(\",\"):void 0;return I})(\"codeclist\"))&&void 0!==wa?wa:Ke;be=null!==(xa=b(\"internaluser\"))&&void 0!==xa?xa:be;Le=null!==(na=b(\"hdr\"))&&void 0!==na?na:Le;Me=null!==(oa=b(\"sdr10\"))&&void 0!==\noa?oa:Me;Zd=null!==(La=b(\"hotkeys\"))&&void 0!==La?La:Zd;Ne=null!==($b=b(\"forcehotkeys\"))&&void 0!==$b?$b:Ne;Oe=null!==(ne=b(\"synthesizegamepadhid\"))&&void 0!==ne?ne:Oe;Pe=null!==(oe=b(\"synthesizedds4disabled\"))&&void 0!==oe?oe:Pe;Qe=null!==(pe=b(\"synthesizedds5disabled\"))&&void 0!==pe?pe:Qe;Re=null!==(qe=b(\"synthesizedds4fromds5disabled\"))&&void 0!==qe?qe:Re;Se=null!==(re=b(\"synthesizedds5fromds4disabled\"))&&void 0!==re?re:Se;Te=null!==(se=b(\"synthesizedds4fromgenericenabled\"))&&void 0!==se?se:Te;\nUe=null!==(te=b(\"synthesizedds5fromgenericenabled\"))&&void 0!==te?te:Ue;Ve=null!==(ue=b(\"synthesizedds4allgamesenabled\"))&&void 0!==ue?ue:Ve;We=null!==(ve=b(\"synthesizedds5allgamesenabled\"))&&void 0!==ve?ve:We;Xe=null!==(we=b(\"forceserverds4\"))&&void 0!==we?we:Xe;Ye=null!==(xe=b(\"forceserverds5\"))&&void 0!==xe?xe:Ye;Ze=null!==(ye=pa.get(\"cursor\"))&&void 0!==ye?ye:Ze;$e=null!==(ze=b(\"pointerlockescape\"))&&void 0!==ze?ze:$e;$d=null!==(Ae=b(\"computepressure\"))&&void 0!==Ae?Ae:$d;af=null!==(Be=b(\"disableworkerws\"))&&\nvoid 0!==Be?Be:af}pc(a);bf&&ef()}function ef(){var a=P.avp;a&&(P={...P,...a});if(a=M.Ga.pmCommunication)if(a=a.avp)M.Ga.pmCommunication={...M.Ga.pmCommunication,...a}};function ff(a,b){var c,d,e,f;a.G.za(void 0,null!==(c=null===b||void 0===b?void 0:b.message)&&void 0!==c?c:\"\",null!==(d=null===b||void 0===b?void 0:b.filename)&&void 0!==d?d:\"\",null!==(e=null===b||void 0===b?void 0:b.lineno)&&void 0!==e?e:0,null!==(f=null===b||void 0===b?void 0:b.colno)&&void 0!==f?f:0,!0,\"WorkerError\")}function gf(a){a.perf.RAFTS=0;a.perf.DCSend=0;a.perf.GetStats=0;a.perf.FrameInfo=0}\nfunction hf(){var a=Q,b;a.v||(null===(b=a.G)||void 0===b?void 0:L(b,\"Worker Thread Creation Failed\"));a.G=void 0;a.s=void 0}function jf(){var a=Q;a.h=!1;const b={stopStats:!0};a.g&&(k.d(\"{1f5ec29}\",\"{76b05dd}\"),a.g.postMessage(b))}function kf(a){return performance.now()-a.j}function lf(a,b){var c=Q,d;c.h&&(b={webrtcStats:{type:b,stats:a},ackid:null===(d=c.s)||void 0===d?void 0:d.g++},c.g&&c.g.postMessage(b,a))}\nfunction mf(){var a=Q;if(a.h){const b={clientEvent:{TS:kf(a),eventtype:\"SoftwareDecodeFallback\"}};a.g&&a.g.postMessage(b)}}\nvar Q=new class{constructor(){this.h=!1;this.g=null;this.j=0;this.o=[];this.m=[];this.v=!1;this.perf={RAFTS:0,DCSend:0,GetStats:0,FrameInfo:0};k.i(\"{1f5ec29}\",\"{139da36}\");try{const a=URL.createObjectURL(new Blob(['\\nvar p={size:70,version:1,name:\"DEPR\"},r={size:80,version:3,name:\"RTPV\"},t={size:48,version:1,name:\"RTPA\"},aa={size:88,version:1,name:\"TRAA\"},ba={size:44,version:1,name:\"TRAV\"},ca={size:12,version:1,name:\"VFMD\"},da={size:20,version:1,name:\"PFDA\"},ea={size:0,version:1,name:\"\"};function u(a,b=!1){const d=a.m+1;try{let f;a.sessionId&&(f=\"x-nv-sessionid.\"+a.sessionId);let l=a.url;b&&(l+=\"&reconnect=1\");let e=new WebSocket(l,f);e.onopen=()=>{var c;a.h(\"{48fa30b}\"+d);if(e===a.g){null===(c=a.j)||void 0===c?void 0:c.F();for(const g of a.l)g.stats?e.send(g.stats):e.send(JSON.stringify(g));for(const g of a.s)w(a,g);a.s=[]}};e.onclose=c=>{var g;a.h(\"{6406bff}\"+d);e===a.g&&(null===(g=a.j)||void 0===g?void 0:g.D({error:a.u,code:c.code,reason:c.reason,wasClean:c.wasClean}),x(a),a.u=\\n!1)};e.onerror=()=>{a.h(\"{7605058}\"+d);e===a.g&&(a.u=!0)};e.onmessage=c=>{if(a.j)try{let h=JSON.parse(c.data);a.o||a.h(\"{523f5b9}\");y(a);if(!h.hb){if(void 0!==h.ack){var g=h.ack;for(let m=a.l.length-1;0<=m;m--)a.l[m].ackid<=g&&a.l.splice(m,1)}if(void 0!==h.ackid){if(a.maxReceivedAckId{var b;a.h(\"{6c3505a}\"+(null===(b=a.g)||void 0===b?void 0:b.readyState)+\"{754f60b}\"+a.m);a.g||u(a,!0);y(a)},3E3)}\\nfunction w(a,b){void 0!==b.ackid&&void 0!==b.ackid&&a.l.push(b);a.g&&(b.stats?a.g.send(b.stats):a.g.send(JSON.stringify(b)))}\\nvar fa=class{constructor(){var a=A,b=B;this.sessionId=C;this.u=!1;this.l=[];this.s=[];this.maxReceivedAckId=this.o=0;this.url=\"\";this.m=0;this.h=a;this.C=b}initialize(a,b,d,f=!1){this.url=a;this.maxReceivedAckId=b;this.j=d;u(this,f);this.h(\"{fcf6f89}\"+this.m)}uninitialize(a){var b;this.maxReceivedAckId=0;this.l=[];this.s=[];this.j=void 0;z(this);null===(b=this.g)||void 0===b?void 0:b.close(a);x(this);this.h(\"{986b258}\"+a+\"{754f60b}\"+this.m)}send(a){this.j&&(this.g||u(this,!0),this.g&&this.g.readyState===\\nWebSocket.OPEN?w(this,a):this.s.push(a))}};const E=self;let F=[],I=[];function J(a){a.h&&(a.j(\"{890d3ae}\"+a.h),a.h=0);a.g.clear()}function ha(a){var b=K;let d=b.g.get(a.type);d||(d=[],b.g.set(a.type,d));for(const f of a.stats)d.push(f)}function ia(a){switch(a){case 0:return p;case 1:return r;case 2:return t;case 3:return ba;case 4:return aa;case 5:return ca;case 6:return da;default:return ea}}\\nlet K=new class{constructor(a){this.j=a;this.g=new Map;this.h=0;J(this)}size(){let a=0;for(let [,b]of this.g){let d=b;for(let f of d)a+=f.byteLength}return a+=9*this.g.size}write(a,b){var d=b;for(let [g,h]of this.g){b=g;var f=h,l=d,e=d;d=f.length;var c=ia(b);let m=c.name,q=new DataView(a.buffer);for(let k=0;4>k;k++)q.setUint8(e+k,m.charCodeAt(k));q.setUint8(e+4,c.version);q.setUint16(e+5,d,!0);q.setUint16(e+7,c.size,!0);l=d=l+9;e=a;c=0;for(let k of f)f=new Uint8Array(k),e.set(f,d+c),c+=k.byteLength;\\nd=l+c;1===b&&this.h++}return d}}(A),C=\"\",L=\"\",M=null,N=void 0,O=0,P=[],Q=[],R=[],S=[],T=[],U=0;function A(a){E.postMessage({log:a})}function B(a){E.postMessage({exception:a})}function V(){F=[];I=[];J(K);P=[];Q=[];R=[];S=[];T=[]}function W(a,b,d,f,l,e){for(let c=0;4>c;c++)a.setUint8(b+c,d.charCodeAt(c));a.setUint8(b+4,f);a.setUint16(b+5,l,!0);a.setUint16(b+7,e,!0)}function X(a){return 0>a?Math.max(a,-2147483648):Math.min(a,4294967295)}\\nfunction Y(){if((F.length||I.length||K.size())&&M)try{M.ackid=U;var a=JSON.stringify(M),b=a.length,d=b+2,f=new ArrayBuffer(d);const D=new DataView(f);D.setUint16(0,b);for(b=2;bf;f++)e.setUint8(l+f,n.charCodeAt(f));\\ne.setUint8(l+f,0);l+=64}a+=c}if(g){W(k,a,\"SQEV\",1,P.length,12);a+=9;c=k;n=a;for(e=0;eY(),5E3),E.postMessage({statsStarted:!0}),A(\"{5209d98}\")):b.stopStats?(self.clearInterval(O),Y(),V(),A(\"{b58b6ad}\")):b.webrtcStats?(b.ackid&&(U=b.ackid),b.webrtcStats.stats&&ha(b.webrtcStats)):b.sq?P.push(b.sq):b.startWebSocket?(L=b.startWebSocket.signInURL,na(b.startWebSocket.maxReceivedAckId,\\nb.startWebSocket.reconnect)):b.stopWebSocket?(null===N||void 0===N?void 0:N.uninitialize(),N=void 0):b.send?null===N||void 0===N?void 0:N.send(b.send):b.duration?Q.push(b.duration):b.inputChannelStats?R.push(b.inputChannelStats):b.garbageCollectionStats?S.push(b.garbageCollectionStats):b.qosMarker&&T.push(b.qosMarker)}catch(b){B(\"Worker onmessage exception: \"+b)}};\\n\\n\\n'],{type:\"text/javascript\"}));\nthis.g=new Worker(a);URL.revokeObjectURL(a);this.g.onmessage=this.F.bind(this);this.g.onerror=this.C.bind(this);k.i(\"{1f5ec29}\",\"{62dee75}\")}catch(a){k.e(\"{1f5ec29}\",\"{50fa2e5}\",a.message),this.m.push({name:\"RagnarokWorkerProblem\",error:JSON.stringify(a)})}}startWebSocket(a,b,c,d){this.l=c;a={startWebSocket:{signInURL:a,maxReceivedAckId:b,reconnect:d}};this.g&&(this.g.postMessage(a),k.d(\"{1f5ec29}\",\"{b3f6faa}\"))}stopWebSocket(){const a={stopWebSocket:!0};this.g&&(k.d(\"{1f5ec29}\",\"{7ac815d}\"),this.g.postMessage(a));\nthis.l=void 0}initialize(a,b,c){this.G=b;this.s=c;if(0Math.abs(e.a-this.a)?e:e.a>this.a?new c(Math.floor(this.a/e.a*e.w),e.g):new c(e.w,Math.floor(e.a/this.a*e.g))}h(){return[this.w,this.g]}}b=b.map(e=>new c(e[0],e[1]));const d=new c(a[0],a[1]);a=b[0];for(let e=1;ea.w?a.h():b.h()}function tf(a){return a[0]120>m.frameRate);d.length&&(b=d);b.sort((m,p)=>{var r=m.resolution,t=p.resolution,v=Math.abs(r.width/r.height-l)-Math.abs(t.width/t.height-l);if(.05=d?{width:1024,height:768}:1366>d?{width:1112,height:834}:{width:1600,height:1200}):(f=[[1920,1200],[1920,1080],[1280,1024],[1600,1200]],h&&f.unshift([3840,2160]),h=[[1280,800],[1280,720],[1280,1024],[1024,768]],d=[d,e],d=sf(d,\n0==a?f:h),b.resolution={width:d[0],height:d[1]});return b}function vf(a){var b;let c=0;ra(a)&&(c|=1);(a?\"iPadOS\"===a.os:/^(?!.*chrome).*safari/i.test(navigator.userAgent)&&!ra()&&Ea())&&(c|=2);(null===(b=window.webapis)||void 0===b?0:b.productinfo)&&window.webapis.productinfo.isUdPanelSupported()&&(c|=4);window.lge_webrtc_hevc_support&&(c|=8);return c}\nfunction wf(){var a,b;if(navigator.userAgent.includes(\"SamsungBrowser\"))return!1;const c=null===(a=window.webapis)||void 0===a?void 0:a.productinfo;if(null===c||void 0===c||!c.isUdPanelSupported())return!1;a=null===(b=c.getSmartTVServerVersion)||void 0===b?void 0:b.call(c);a:{if(a&&(b=a.match(/T-INFOLINK(\\d+)-(\\d+)/))){b={year:parseInt(b[1],10),version:parseInt(b[2],10)};break a}b=void 0}if(!b)return k.e(\"{d988e7f}\",\"{e227976}\",a),!1;a=b.year;b=b.version;k.i(\"{d988e7f}\",\"{fc40a4b}\",a,b);return 2021===\na||2023<=a||2022===a&&1008<=b}\nfunction xf(){if(!getComputedStyle(document.documentElement))return{top:0,left:0,bottom:0,right:0};getComputedStyle(document.documentElement).getPropertyValue(\"--sat\")||(document.documentElement.style.setProperty(\"--sat\",\"env(safe-area-inset-top)\"),document.documentElement.style.setProperty(\"--sar\",\"env(safe-area-inset-right)\"),document.documentElement.style.setProperty(\"--sab\",\"env(safe-area-inset-bottom)\"),document.documentElement.style.setProperty(\"--sal\",\"env(safe-area-inset-left)\"));return{top:parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sat\")),\nleft:parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sal\")),bottom:parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sab\")),right:parseInt(getComputedStyle(document.documentElement).getPropertyValue(\"--sar\"))}}function yf(a,b){return 0>a?0:a>b?b:a}\nfunction zf(a){var b=xf();b.top=Math.max(b.top,21);b.bottom=yf(b.bottom,10);let c={x:a.clientX,y:a.clientY},d=.5;0window.innerHeight-b.bottom&&(b=(a.clientY+Math.min(a.radiusY,10)-(window.innerHeight-b.bottom))/a.radiusY,b=yf(b,1),d+=.5*b*b);c.y=yf(c.y-a.radiusY+2*d*a.radiusY,window.innerHeight);return c}\nfunction Af(a){let b=a;if(P.offlineErrorsStreaming&&P.offlineErrorsStreaming.includes(G(a)))b=15868418;else if(P.offlineErrorsSessionSetup&&P.offlineErrorsSessionSetup.includes(G(a)))b=15868417;else switch(a){case 3237093906:case 3237093899:b=15868418;break;case 3237089282:b=15868417}b!==a&&k.i(\"{d988e7f}\",\"{b84d4c8}\",G(a),G(b));return b}\nfunction Bf(a,b){let c=a;if(P.sleepErrorsStreaming&&P.sleepErrorsStreaming.includes(G(a)))c=15867908;else if(P.sleepErrorsSessionSetup&&P.sleepErrorsSessionSetup.includes(G(a)))c=15867909;else switch(a){case 3237093906:B(b)&&(c=15867908);break;case 3237094159:c=15867908;break;case 3237093654:c=15867909}c!==a&&k.i(\"{d988e7f}\",\"{49e2182}\",G(a),G(c));return c}\nfunction R(a,b,c,d,e=1){const f=Math.floor(a*e)&4294967295;a=Math.floor(a/4294967296*e);d?(b.setUint32(c,f,!0),b.setUint32(c+4,a,!0)):(b.setUint32(c,a,!1),b.setUint32(c+4,f,!1))}function Cf(a,b){let c=!1;switch(a){case 3237093896:case 3237093897:case 3237093898:case 3237093906:case 3237093899:case 3237093901:case 15868418:case 3237094159:c=!0;break;case 15867908:B(b)&&(c=!0)}return c}function Df(a,b){a*=b;return 2764800<=a&&4953600>a}\nfunction Ef(a){switch(a){case \"H264\":return\"H264\";case \"H265\":return\"HEVC\";case \"AV1\":return\"AV1\";default:return\"UNKNOWN\"}}function Ff(a){var b;a=ua(a)||va(a)||ya(a)||\"Linux\"===a.os||B(a);return null!==(b=P.enableCpm)&&void 0!==b?b:a}function Gf(a){return void 0!==a?a?\"TRUE\":\"FALSE\":\"UNDEFINED\"}function Hf(a){return a?\"MANUAL\":\"NONE\"}function If(a){var b;return-1!==(null!==(b=P.requireDS4TrackpadForAppIds)&&void 0!==b?b:[]).indexOf(a)?!0:!1}let Jf=[];\nfunction Kf(a){return`${a.width.toFixed()}x${a.height.toFixed()}`}function Lf(a,b,c){try{const d=document.createElement(\"a\");d.style.display=\"none\";const e=URL.createObjectURL(new Blob(a,{type:c}));d.href=e;d.download=b;document.body.appendChild(d);d.click();URL.revokeObjectURL(e);document.body.removeChild(d);return!0}catch(d){return k.e(\"{d988e7f}\",\"{8d57ba9}\",d),!1}}\nfunction rf(a){const b=window.AudioContext||window.webkitAudioContext||void 0;if(b)return a?new b({sampleRate:a}):new b;k.w(\"{d988e7f}\",\"{b74c037}\")}function Mf(a,b){const c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(const e of c)if(a[e]!==b[e])return!1;return!0}function Nf(){var a;return!(null===(a=globalThis.PointerEvent)||void 0===a||!a.prototype)}\nasync function Of(a,b,c){var d;const e=new RTCPeerConnection;try{await e.setRemoteDescription({type:\"offer\",sdp:b}).catch(l=>{throw Error(\"Audio munging setRemoteDescription failed. \"+l);});const f=await e.createAnswer();await e.setLocalDescription({type:\"answer\",sdp:null===(d=f.sdp)||void 0===d?void 0:d.replace(\"opus/48000/2\",\"multiopus/48000/\"+a).replace(\"useinbandfec=1\",c)}).catch(l=>{throw Error(\"Audio munging setLocalDescription failed. \"+l);});const g=e.getReceivers()[0];if(!g.getParameters)return k.w(\"{d988e7f}\",\n\"{4be0bf6}\"),2;const {codecs:h}=g.getParameters();if(1===h.length&&\"audio/multiopus\"===h[0].mimeType&&h[0].channels===a)k.i(\"{d988e7f}\",\"{8919816}\",a,h[0]);else throw Error(\"Audio munging failed \"+h[0]);return a}catch(f){return k.e(\"{d988e7f}\",\"{4984c00}\",a,f),2}finally{e.close()}}\nasync function Pf(){let a=2;var b=\"minptime=10;useinbandfec=1;channel_mapping=0,4,1,2,3,5;num_streams=4;coupled_streams=2\";const c=Of(6,\"v=0\\no=- 0 3 IN IP4 127.0.0.1\\ns=-\\nt=0 0\\na=fingerprint:sha-256 A7:24:72:CA:6E:02:55:39:BA:66:DF:6E:CC:4C:D8:B0:1A:BF:1A:56:65:7D:F4:03:AD:7E:77:43:2A:29:EC:93\\nm=audio 9 UDP/TLS/RTP/SAVPF 100 101\\nc=IN IP4 0.0.0.0\\na=rtcp-mux\\na=sendonly\\na=mid:audio\\na=setup:actpass\\na=ice-ufrag:ETEn\\na=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l\\r\\na=rtpmap:100 multiopus/48000/6\\r\\na=fmtp:100 \"+b+\n\"\\r\\na=rtpmap:101 opus/48000/2\\na=fmtp:101 minptime=10;useinbandfec=1\\n\",b);b=\"minptime=10;useinbandfec=1;channel_mapping=0,6,1,2,3,4,5,7;num_streams=5;coupled_streams=3\";b=Of(8,\"v=0\\no=- 0 3 IN IP4 127.0.0.1\\ns=-\\nt=0 0\\na=fingerprint:sha-256 A7:24:72:CA:6E:02:55:39:BA:66:DF:6E:CC:4C:D8:B0:1A:BF:1A:56:65:7D:F4:03:AD:7E:77:43:2A:29:EC:93\\nm=audio 9 UDP/TLS/RTP/SAVPF 100 101\\nc=IN IP4 0.0.0.0\\na=rtcp-mux\\na=sendonly\\na=mid:audio\\na=setup:actpass\\na=ice-ufrag:ETEn\\na=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l\\r\\na=rtpmap:100 multiopus/48000/8\\r\\na=fmtp:100 \"+\nb+\"\\r\\na=rtpmap:101 opus/48000/2\\na=fmtp:101 minptime=10;useinbandfec=1\\n\",b);await Promise.all([c,b]).then(d=>{a=Math.max(Number(d[0]),Number(d[1]))});k.i(\"{d988e7f}\",\"{dc7ee29}\",a)}function Qf(a){var b;return(null!==(b=P.usePerfNowCaptureTimestamp)&&void 0!==b?b:!window.chrome)?kf(Q):a-Q.j}function Rf(a){if(!a)return 8;switch(null===a||void 0===a?void 0:a.bitDepth){case 1:return 10;case 0:return 8;default:return k.w(\"{d988e7f}\",\"{6f291f9}\",a.bitDepth),8}};function Sf(a,b=!1){b=b?zf(a):{x:a.clientX,y:a.clientY};return{identifier:a.identifier,clientX:b.x,clientY:b.y,deltaX:0,deltaY:0}}\nfunction Tf(a,b,c){let d=!1;const e=b.changedTouches,f=Qf(b.timeStamp);for(let g=0;gn.identifier==h.identifier);-1!=l&&(d=!0,xd(ud()),a.h.splice(l,1),0===a.h.length?(0!==a.l?(window.clearTimeout(a.l),a.l=0,c&&Uf(a.j,a.target,f,Sf(h,!0),a.m)):(2===a.g||4===a.g)&&Kd&&Vf(a.j,f),a.m=0,a.g=0):5===a.g?a.g=0:6===a.g&&(Kd&&Wf(a.j),a.g=0))}Xf(a.j)&&d&&b.preventDefault()}\nvar ag=class{constructor(a,b,c,d){this.target=a;this.videoAddEventListener=b;this.videoRemoveEventListener=c;this.j=d;this.h=[];this.g=this.m=this.l=0;this.C=e=>{let f=!1;const g=e.changedTouches,h=Qf(e.timeStamp);for(let l=0;l{this.l=0;1===this.m&&(this.g=2,Kd&&Yf(this.j,this.target,h,Sf(n)))},500)):1!==this.g&&(2===this.g||4===this.g?Kd&&Vf(this.j,h):6===this.g&&Kd&&Wf(this.j),\nthis.g=0),this.h.push(Sf(n)),this.h.length>this.m&&(this.m=this.h.length))}Xf(this.j)&&f&&e.preventDefault()};this.v=e=>{let f=!1;for(var g of this.h)g.deltaX=0,g.deltaY=0;g=e.changedTouches;const h=Qf(e.timeStamp);let l=[];for(let p=0;pv.identifier==r.identifier);if(-1!=t){f=!0;var n=this.h[t],m=r.clientX-n.clientX;n=r.clientY-n.clientY;let v=!1;if(0!==this.l){if(10Math.abs(this.h[0].deltaX)&&10>Math.abs(this.h[1].deltaX))?\n(this.g=5,Kd&&this.j.scroll(this.target,h,this.h)):(this.g=6,Kd&&$f(this.j,this.h))):this.g=0);Xf(this.j)&&f&&e.preventDefault()};this.o=e=>{Tf(this,e,!1)};this.s=e=>{Tf(this,e,!0)}}start(){const a={passive:!Kd};this.videoAddEventListener(\"touchstart\",this.C,a);this.videoAddEventListener(\"touchmove\",this.v,a);this.videoAddEventListener(\"touchcancel\",this.o,a);this.videoAddEventListener(\"touchend\",this.s,a)}stop(){this.videoRemoveEventListener(\"touchstart\",this.C);this.videoRemoveEventListener(\"touchmove\",\nthis.v);this.videoRemoveEventListener(\"touchcancel\",this.o);this.videoRemoveEventListener(\"touchend\",this.s);this.h=[];0!==this.l&&(window.clearTimeout(this.l),this.l=0);this.m=0;if(Kd)switch(this.g){case 6:Wf(this.j);break;case 2:case 4:Vf(this.j,performance.now())}this.g=0}};function bg(a,b){a.clientX=b.pageX-a.j.pb;a.clientY=b.pageY-a.j.vertical;a.radiusX=b.radiusX;a.radiusY=b.radiusY}function cg(a){const b=zf(a);a.h=.01p||lm)switch(c){case 2:case 8:break;case 1:continue;case 4:continue;default:continue}h=Math.min(Math.max(h,0),65535);l=Math.min(Math.max(l,0),65535);a:{n=a.P;p=c;r=v.radiusX;\nm=v.radiusY;var t=d;if(40<=f){g=!1;break a}const q=18+16*f;n.gb.setUint8(q,g);n.gb.setUint8(q+1,p);n.gb.setUint16(q+2,h,!1);n.gb.setUint16(q+4,l,!1);n.gb.setUint8(q+6,r);n.gb.setUint8(q+7,m);R(t,n.gb,q+8,!1,1E3);g=!0}if(!g){a.l+=b.length-f;break}f++}}0!=f&&(f>b.length?k.w(\"{ec05004}\",\"{4e60a66}\",f,b.length):(a=a.P,b=f,f=8+16*b,a.gb.setUint16(14,f,!1),a.gb.setUint16(16,b,!1),b=10,3<=a.La&&(f++,b--),f=new DataView(a.gb.buffer,b,f),V(a),V(a,f)||k.e(\"{ec05004}\",\"{56a8404}\")))}\nfunction gg(a,b,c){var d=performance.now(),e=Qf(b.timeStamp);let f=!1,g=[];const h=b.changedTouches;let l=[];for(let n=0;n{const g=performance.now(),h=Qf(f.timeStamp);let l=!1;this.j.lc(!1);const n=f.changedTouches;let m=[];for(let r=0;r{const g=performance.now(),h=Qf(f.timeStamp);let l=!1;const n=f.changedTouches;let m=[];for(let p=0;p{gg(this,f,8)};this.I=f=>{gg(this,f,2)};this.C=this.S.bind(this);this.O=this.R.bind(this)}S(){const a=this.h.length;if(a){var b=this.h[a-1].g-3E4,c=-1;for(let d=0;d\",{vkCode:190,shift:!0}],[\";\",{vkCode:186,shift:!1}],[\":\",{vkCode:186,shift:!0}],[\"/\",{vkCode:191,shift:!1}],[\"?\",{vkCode:191,shift:!0}],[\"`\",{vkCode:192,shift:!1}],[\"~\",{vkCode:192,shift:!0}],[\"[\",{vkCode:219,shift:!1}],[\"{\",{vkCode:219,shift:!0}],[\"\\\\\",{vkCode:220,shift:!1}],[\"|\",\n{vkCode:220,shift:!0}],[\"]\",{vkCode:221,shift:!1}],[\"}\",{vkCode:221,shift:!0}],[\"'\",{vkCode:222,shift:!1}],['\"',{vkCode:222,shift:!0}],[\" \",{vkCode:32,shift:!1}],[\"A\",{vkCode:65,shift:!0}],[\"B\",{vkCode:66,shift:!0}],[\"C\",{vkCode:67,shift:!0}],[\"D\",{vkCode:68,shift:!0}],[\"E\",{vkCode:69,shift:!0}],[\"F\",{vkCode:70,shift:!0}],[\"G\",{vkCode:71,shift:!0}],[\"H\",{vkCode:72,shift:!0}],[\"I\",{vkCode:73,shift:!0}],[\"J\",{vkCode:74,shift:!0}],[\"K\",{vkCode:75,shift:!0}],[\"L\",{vkCode:76,shift:!0}],[\"M\",{vkCode:77,\nshift:!0}],[\"N\",{vkCode:78,shift:!0}],[\"O\",{vkCode:79,shift:!0}],[\"P\",{vkCode:80,shift:!0}],[\"Q\",{vkCode:81,shift:!0}],[\"R\",{vkCode:82,shift:!0}],[\"S\",{vkCode:83,shift:!0}],[\"T\",{vkCode:84,shift:!0}],[\"U\",{vkCode:85,shift:!0}],[\"V\",{vkCode:86,shift:!0}],[\"W\",{vkCode:87,shift:!0}],[\"X\",{vkCode:88,shift:!0}],[\"Y\",{vkCode:89,shift:!0}],[\"Z\",{vkCode:90,shift:!0}],[\"a\",{vkCode:65,shift:!1}],[\"b\",{vkCode:66,shift:!1}],[\"c\",{vkCode:67,shift:!1}],[\"d\",{vkCode:68,shift:!1}],[\"e\",{vkCode:69,shift:!1}],[\"f\",\n{vkCode:70,shift:!1}],[\"g\",{vkCode:71,shift:!1}],[\"h\",{vkCode:72,shift:!1}],[\"i\",{vkCode:73,shift:!1}],[\"j\",{vkCode:74,shift:!1}],[\"k\",{vkCode:75,shift:!1}],[\"l\",{vkCode:76,shift:!1}],[\"m\",{vkCode:77,shift:!1}],[\"n\",{vkCode:78,shift:!1}],[\"o\",{vkCode:79,shift:!1}],[\"p\",{vkCode:80,shift:!1}],[\"q\",{vkCode:81,shift:!1}],[\"r\",{vkCode:82,shift:!1}],[\"s\",{vkCode:83,shift:!1}],[\"t\",{vkCode:84,shift:!1}],[\"u\",{vkCode:85,shift:!1}],[\"v\",{vkCode:86,shift:!1}],[\"w\",{vkCode:87,shift:!1}],[\"x\",{vkCode:88,shift:!1}],\n[\"y\",{vkCode:89,shift:!1}],[\"z\",{vkCode:90,shift:!1}]]);class lg extends DataView{constructor(a,b,c,d){super(a,b,c);this.shift=0;this.setUint8=(e,f)=>super.setUint8(e+this.shift,f);this.setUint16=(e,f,g)=>super.setUint16(e+this.shift,f,g);this.setUint32=(e,f,g)=>super.setUint32(e+this.shift,f,g);this.setInt8=(e,f)=>super.setInt8(e+this.shift,f);this.setInt16=(e,f,g)=>super.setInt16(e+this.shift,f,g);this.setInt32=(e,f,g)=>super.setInt32(e+this.shift,f,g);this.setFloat32=(e,f,g)=>super.setFloat32(e+this.shift,f,g);this.setFloat64=(e,f,g)=>super.setFloat64(e+\nthis.shift,f,g);this.shift=null!==d&&void 0!==d?d:0}}\nfunction V(a,b,c=!0,d=\"input_channel_v1\"){\"gamepad_channel_v1\"!=d&&0b.byteOffset?k.w(\"{57a6a4d}\",\"{0fc6121}\"):(b=new DataView(b.buffer,b.byteOffset-9,9+b.byteLength),b.setUint8(0,35),R(kf(Q),b,1,!1,1E3)));c=-1;switch(d){case \"gamepad_channel_v1\":void 0!==a.Zc&&(c=a.Zc,a.Zc=(a.Zc+1)%65536)}if(0<=c){if(3>b.byteOffset)return k.e(\"{57a6a4d}\",\"{e9ac06c}\"),!1;\nb=new DataView(b.buffer,b.byteOffset-3,3+b.byteLength);b.setUint8(0,37);b.setUint16(1,c)}try{let g=performance.now();switch(d){case \"gamepad_channel_v1\":a.Aa.send(b);break;case \"input_channel_v1\":a.Ja.send(b);break;default:throw Error(`Invalid input channel ${d}`);}ng(a.D,performance.now()-g);const h=window.performance.now();a.V.ld+=1;b=h-e;5{a.Kb=0;V(a)},b)}\nfunction tg(a,b,c,d,e,f,g=0,h=0){a.setUint32(b,12,!0);a.setUint16(b+4,26,!0);a.setUint16(b+6,c,!0);a.setUint16(b+8,h,!0);a.setUint16(b+10,20,!0);a.setUint16(b+12,d,!0);a.setUint16(b+14,e,!0);a.setInt16(b+16,Math.round(32767.5*(f[0]+1))-32768,!0);a.setInt16(b+18,Math.round(32767.5*(-f[1]+1))-32768,!0);a.setInt16(b+20,Math.round(32767.5*(f[2]+1))-32768,!0);a.setInt16(b+22,Math.round(32767.5*(-f[3]+1))-32768,!0);a.setUint16(b+24,0,!0);a.setUint16(b+26,85,!0);a.setUint16(b+28,0,!0);R(g,a,b+30,!0,1E3)}\nfunction ug(a,b,c,d,e,f=0,g=0){a=a.fb(38);tg(a,0,d,b,c,e,f,g);return a}function vg(a,b,c){a=a.fb(10);a.setUint32(0,18,!0);a.setUint8(4,b);a.setUint8(5,c);a.setUint32(6,1);return a}\nvar xg=class{constructor(a,b,c,d,e,f,g,h){this.La=this.ud=0;this.buffer=new ArrayBuffer(1150);this.ig=new DataView(this.buffer);this.Kg=new ArrayBuffer(658);this.gb=new DataView(this.Kg);this.Fb=new DataView(new ArrayBuffer(176));this.Jg=new ArrayBuffer(100);this.Kb=0;this.Ff=this.xg;this.fb=this.ng;this.Oc=[];this.Ba=a;this.ia=b;this.D=e;this.J=d;this.Ja=f;this.Ja.onmessage=l=>{l=new DataView(l.data);if(0===this.La){let n=l.getUint16(0,!0);526==n?(this.Fd=this.qg.bind(this),this.La=l.getUint16(2,\n!0)):(this.Fd=this.ad.bind(this),this.La=n);2==this.La?this.ia.m=!0:2=b){c=b-6;var d=a.getUint8(8),e=a.getUint8(9);if(5===d&&1===(e&1)){b=a.getUint8(12)<<8;const f=a.getUint8(13)<<8;for(const g of this.Oc){a=g;d=b;e=f;const h=a.U.get(c);void 0!==h&&wg(a,h,d,e)}}else k.w(\"{57a6a4d}\",\"{d8b7bec}\",d,e,b)}else k.w(\"{57a6a4d}\",\"{6135ec1}\",b);break;default:k.w(\"{57a6a4d}\",\"{25be6a3}\",c)}break;default:k.d(\"{57a6a4d}\",\"{ba4ff6a}\",c)}break;default:k.w(\"{57a6a4d}\",\"{aea35b8}\",c)}}}ad(a,b){var c=a.getUint16(b,!0);if(1==c)if(c=a.getUint16(b+\n2,!0),6>c)k.e(\"{57a6a4d}\",\"{1527181}\",c);else{6this.buffer.byteLength?(c=new DataView(new ArrayBuffer(c)),this.V.jd++):c=new DataView(this.buffer,0,c);c.setUint8(0,255);var g=1;for(d=0;dthis.buffer.byteLength){if(b=new DataView(new ArrayBuffer(b),b-c,c),this.V.jd++,a)for(c=b.byteLength-a.byteLength,d=0;d=a.byteLength-b)f=a.byteLength-b;else{f=b+1016;var e=!1;for(let g=\n0;4>g;g++)if(128!=(c.getUint8(f)&192)){e=!0;break}else f--;if(e)f-=b;else{k.e(\"{57a6a4d}\",\"{938b0d3}\");break}}e=new DataView(d,0,f+5);e.setUint8(0,34);e.setUint32(1,23,!0);(new Uint8Array(d)).set(new Uint8Array(a,b,f),5);b+=f;V(this,e,!1)}}stop(){0this.La||0>=a)){V(this);var b=null;2a?a+6:0,1))}Of(a){V(this,vg(this,4>a?a+6:0,3))}Wc(a,b,c,d,e){a=this.fb(72);a.setUint32(0,17,!0);a.setUint8(4,4>b?b+6:0);a.setUint8(5,4);a.setUint8(6,0);a.setUint8(7,1);a.setUint8(8,127.5*(e[0]+1));a.setUint8(9,127.5*(e[1]+1));a.setUint8(10,127.5*(e[2]+1));a.setUint8(11,127.5*(e[3]+1));b=0;e=!!(c&4);var f=!!(c&2);const g=!!(c&8),h=!!(c&1);e||f||g||h?h?b=\ng?1:e?7:0:f?b=g?3:e?5:4:g?b=2:e&&(b=6):b=8;e=0|(c&256?1:0)|(c&512?2:0)|(d&255?4:0)|(d&65280?8:0);e=e|(c&32?16:0)|(c&16?32:0)|(c&64?64:0)|(c&128?128:0);f=0|(c&65536?1:0)|(c&131072?2:0);a.setUint8(12,b|(c&16384?16:0)|(c&4096?32:0)|(c&8192?64:0)|(c&32768?128:0));a.setUint8(13,e);a.setUint8(14,f);a.setUint8(15,d&255);a.setUint8(16,(d&65280)>>8);a.setUint16(17,0,!0);a.setUint8(19,0);a.setInt16(20,0,!0);a.setInt16(22,0,!0);a.setInt16(24,0,!0);a.setInt16(26,0,!0);a.setInt16(28,0,!0);a.setInt16(30,0,!0);\na.setUint32(32,0,!0);a.setUint8(36,0);a.setUint8(37,11);a.setUint8(38,0);a.setUint8(39,0);a.setUint8(40,0);V(this,a)}},yg=class{constructor(){this.m=!1;this.j=0;this.l=Array(36);for(let a=0;ab?1<b?1<b?1<b?1<.5b?1:0)|(0a?4:0)|(0a[5]?2:0)|(0>a[4]?4:0)|(0d[0]?0:d[0];e[1]=-.1d[1]?0:d[1];e[2]=-.1d[2]?0:d[2];e[3]=-.1d[3]?0:d[3];d=e[a.Vf];e=e[a.Wf];const f=4-3*Math.min(1,Math.sqrt(d*d+e*e));a.Hc=d*a.scale/f;a.Ic=e*a.scale/f;b=!!(b&4224)||58752<=(c&65280);c=229.5<=(c&255);d=a.wc;e=a.xc;a.wc=b;a.xc=c;!b&&d&&uh(a,0,!1);!c&&e&&uh(a,2,!1);b&&!d&&uh(a,0,!0);c&&!e&&uh(a,2,!0)}\nfunction uh(a,b,c){b=new MouseEvent(c?a.Bd:a.Yd,{button:b,buttons:(a.wc?1:0)|(a.xc?2:0)});a.df.dispatchEvent(b)}\nvar vh=class{constructor(a,b){this.Lc=0;this.Bg=8;this.vb=this.ub=this.Ic=this.Hc=0;this.xc=this.wc=!1;this.scale=12;this.kc=\"mousemove\";this.Bd=\"mousedown\";this.Yd=\"mouseup\";this.Vf=2;this.Wf=3;this.u=b;this.df=a;this.Dg=this.Cg.bind(this);ma(this.u)&&(this.Vf=0,this.Wf=1)}$c(a,b,c,d,e,f){th(this,d,e,f)}Wc(a,b,c,d,e){th(this,c,d,e)}Cg(){this.ub=Math.sign(this.ub)!=Math.sign(this.Hc)?this.Hc:this.ub+this.Hc;this.vb=Math.sign(this.vb)!=Math.sign(this.Ic)?this.Ic:this.vb+this.Ic;var a=0;let b=0;if(1<=\nthis.ub||-1>=this.ub)a=Math.trunc(this.ub),this.ub-=a;if(1<=this.vb||-1>=this.vb)b=Math.trunc(this.vb),this.vb-=b;if(0!=a||0!=b){a={movementX:a,movementY:b,isPrimary:!0};let c;\"pointerrawupdate\"==this.kc||\"pointermove\"==this.kc?c=new PointerEvent(this.kc,a):c=new MouseEvent(\"mousemove\",a);this.df.dispatchEvent(c)}}start(){this.Lc&&this.stop();this.Lc=window.setInterval(this.Dg,this.Bg)}stop(){this.Lc&&(clearInterval(this.Lc),this.Lc=0)}reset(){this.wc&&uh(this,0,!1);this.xc&&uh(this,2,!1);this.ub=\nthis.vb=this.Hc=this.Ic=0;this.wc=this.xc=!1}Eb(){}Yc(){}Yb(){}Uc(){}};var wh=class{constructor(){this.y=this.x=0}jf(){return this.x}kf(){return this.y}update(a,b){this.x=a;this.y=b;return!0}},xh=class{constructor(){this.l=this.j=this.o=this.m=this.F=this.C=this.s=this.h=this.g=0;this.v=!1}jf(){return this.g}kf(){return this.h}update(a,b,c){if(0===a&&0===b)return this.v?this.l=this.j=0:this.v=!0,!1;this.v=!1;if(0===this.j&&0===this.l){if(cc-this.s&&0>d&&0!==f&&d*d>.81*e*f&&(d=Math.sqrt(e)/Math.sqrt(f),d=Math.abs(d-Math.trunc(d)),.5d&&(g=!1));d=a-this.g;e=b-this.h;if(g&&(f=1+.1*Math.max(1,Math.min(16,c-this.s)),g=2*f*Math.abs(this.C),f=2*f*Math.abs(this.F),f=Math.max(8100,g*g+f*f),g=d*d+e*ea.P){if(a.m=1,b=b.requestPointerLock({unadjustedMovement:d}))a.ua=!0,b.then(()=>{a.m=2;a.Ka=d;a.P=0}).catch(f=>{a.m=0;\"NotSupportedError\"===f.name&&d?(k.i(\"{70cc40b}\",\"{08fd91e}\"),a.o=!1,Fh(a)):(\"UnknownError\"==f.name?(a.P++,k.w(\"{70cc40b}\",\"{9f2ba9f}\",a.P)):k.e(\"{70cc40b}\",\"{4cdd98f}\",f.name,f.message),\nGh(a))})}else a.m=2}\nfunction Hh(a,b){let c=new Uint8Array(b.data);switch(c[0]){case 0:case 1:b=c[1];let g=c[2],h=c[3];var d=c[4];let l=5,n=()=>{const t=c[l]+(c[l+1]<<8);l+=2;return t};var e=\"\";0!=d&&(e=c.subarray(l,l+d),l+=d,e=(new TextDecoder(\"utf-8\")).decode(e));d=n();var f=\"\";0!=d&&(f=c.subarray(l,l+d),l+=d,f=(new TextDecoder(\"utf-8\")).decode(f));let m,p;l+4<=c.byteLength&&(m=n(),p=n());let r;l+2<=c.byteLength&&(r=n()/100);0==c[0]?Ih(a,b,m,p):Jh(a,b,g,h,e,f,m,p,r);break;case 10:a.Na.allowUnconfined&&Kh(a,1==c[1])}}\nfunction Lh(a){let b=\"canvasId1\";var c=document.getElementById(b);if(c&&c instanceof HTMLCanvasElement&&c.parentElement===a.parentElement)return c;if(c){do b=\"canvasId\"+Math.round(1E4*Math.random()),c=document.getElementById(b);while(c)}c=document.createElement(\"canvas\");c.id=b;c.style.touchAction=\"none\";c.style.pointerEvents=\"none\";c.style.willChange=\"transform\";a.insertAdjacentElement(\"afterend\",c);return c}\nfunction Mh(a){var b,c;if(0===a.cursorType){var d=a.v.getBoundingClientRect(),e=null!==(c=null===(b=a.v.parentElement)||void 0===b?void 0:b.getBoundingClientRect())&&void 0!==c?c:new DOMRect(0,0,0,0);b=d.left-e.left+a.J.ma*a.J.Xa;d=d.top-e.top+a.J.ma*a.J.Ra;a.j.style.position=\"absolute\";a.j.style.left=b+\"px\";a.j.style.top=d+\"px\";a.j.style.zIndex=\"200\"}}\nfunction Nh(a){var b=a.j.getContext(\"2d\");if(b&&(a.h.pg=b,b=window.devicePixelRatio,a.h.wb!=b)){k.i(\"{70cc40b}\",\"{b786ba9}\",b);a.h.wb=b;a.h.bd=!0;for(const c of a.W.values())c.style=void 0;Oh(a)}}function Ph(a,b){if(a.T&&a.I!==b)switch(a.C&&Qh(a),a.I=b,a.C&&Rh(a),b){case 1:a.H=4;break;case 2:a.H=8;break;case 3:a.H=16;break;default:a.H=0}}function Ih(a,b,c,d){b>=a.U.length?k.e(\"{70cc40b}\",\"{de8eabe}\",b):Sh(a,a.U[b],c,d)}function Th(a){a.O&&(window.clearTimeout(a.O),a.O=0)}\nfunction Uh(a){if(a.h.Vc){a.h.Vc=!1;var b=a.g.sb,c=a.g.tb;if(0===a.cursorType)if(a.Z&&a.g.rb){var d=Vh(a.h.wb/a.g.cursor.scale);a.h.bd&&(a.h.bd=!1,Wh(a,d));const e=a.g.cursor,f=a.h.wb;d/=f;b=(b*a.J.ma-e.Ha*d)*f;c=(c*a.J.ma-e.Ia*d)*f;a.ca||(b=Math.round(b),c=Math.round(c));a.j.style.transform=\"translate(\"+b/f+\"px, \"+c/f+\"px)\";a.h.od||(a.h.od=!0,a.j.style.visibility=\"visible\")}else Xh(a)}}function Yh(a,b,c){Zh(a,b-a.J.Xa,c-a.J.Ra)}function Oh(a){a.h.Vc=!0}\nfunction $h(a,b){if(b instanceof PointerEvent){if(ai(b))return;b.preventDefault()}let c=performance.now();if(a.s.h&&(!Ch(a)||Eh(a))&&(0!==b.movementX||0!==b.movementY)){a.lc(!0);var d=1,e=0,f=a.g.rb,g=a.ia.h,h=l=>{if(a.R.update(l.movementX,l.movementY,l.timeStamp)){var n=a.R.jf(),m=a.R.kf();if(f){if(a.g.yd){var p=a.S?a.h.wb:1;Zh(a,a.g.sb+n/p,a.g.tb+m/p)}else Yh(a,l.offsetX,l.offsetY);a.h.Vc=!0;n=a.g.sb;m=a.g.tb}else a.S&&(p=a.h.wb,n+=a.g.Sd,m+=a.g.Td,a.g.Sd=n%p,a.g.Td=m%p,n/=p,m/=p);a:{p=a.ia;l=Qf(l.timeStamp);\nif(0!==e%d&&02*b?1:Math.max(b-a.ia.h-4,1);l.length>b&&(d=Math.ceil(l.length/b),a.V.Rc+=l.length);for(let n of l)h(n)}}else h(b);1g&&(a.ia.l[g].jb=a.ia.h-g)}}function Zh(a,b,c){a.g.sb=Math.min(Math.max(b,0),a.J.eb);a.g.tb=Math.min(Math.max(c,0),a.J.Wa);Oh(a)}function bi(a,b){if(a.J.eb&&a.J.Wa){const c=b.Wa/a.J.Wa;a.g.sb*=b.eb/a.J.eb;a.g.tb*=c}a.J=b;Mh(a);Nh(a)}function Vh(a){return 1.499<=a&&1.999>a?2:Math.max(1,Math.floor(a+.001))}\nfunction Wh(a,b){const c=a.g.cursor;if(c.image){var d=a.h.wb,e=a.h.pg,f=c.image.width*b;b*=c.image.height;var g=Math.ceil(f),h=Math.ceil(b);g!==a.j.width||h!==a.j.height?(a.j.style.width=f/d+\"px\",a.j.style.height=b/d+\"px\",a.j.width=g,a.j.height=h,e.scale(1,1),e.imageSmoothingEnabled=!1):e.clearRect(0,0,a.j.width,a.j.height);e.drawImage(c.image,0,0,f,b)}else k.e(\"{70cc40b}\",\"{bc9bdcd}\")}function Xh(a){a.h.od&&(a.h.od=!1,a.j.style.visibility=\"hidden\")}\nfunction Gh(a){const b=a.v;!a.yb()||Ch(a)&&!Eh(a)||2==a.cursorType?b.style.cursor=\"default\":b.style.cursor=0===a.cursorType?\"none\":a.g.style}\nfunction ci(a,b){const c=()=>{a.g.Ac=void 0;a.g.cursor=b;a.h.bd=!0;if(0===a.cursorType)Oh(a);else{if(!b.style){var d=a.h.wb,e=1,f=1;void 0!==a.Da&&(e=Vh(d/b.scale),f=e/d);Wh(a,e);d=a.j.toDataURL(\"image/bmp\");e=b.Ha*f;f=b.Ia*f;const g=a.h.wb,h=a.Da;b.style=h?`${h}(url(${d}) ${g}x) ${e} ${f}, auto`:`url(${d}) ${e} ${f}, auto`}a.g.style=b.style;Gh(a)}};if(0!==a.cursorType&&b.style)c();else if(\"none\"!==b.style)if(b.image)0!==b.image.width||0!==b.image.height?c():a.g.Ac=b.image;else{const d=new Image;\nb.image=d;!d.decode&&d.decoding&&(d.decoding=\"sync\");d.src=`data:${b.zf};base64,${b.Ma}`;d.decode?(a.g.Ac=d,d.decode().then(()=>{a.g.Ac===d&&c()}).catch(()=>{a.g.Ac===d&&(a.g.Ac=void 0,ci(a,a.U[1]))})):c()}else a.g.cursor=b,Xh(a)}function Jh(a,b,c,d,e,f,g,h,l){if(0{this.O=0;Ch(this)&&!Eh(this)&&(this.Db=!0,Fh(this))};this.u=g;this.D=b;this.v=c;this.G=e;this.Na=f;this.N=h;this.V=l;this.ia=n;this.l=m;d.onmessage=H=>Hh(this,H);this.J={eb:c.clientWidth||\nwindow.screen.width,Wa:c.clientHeight||window.screen.height,Sf:1,Xa:0,Ra:0,videoWidth:0,videoHeight:0,Pc:0,offsetX:0,offsetY:0,ma:1};a=window.zoneless;this.documentAddEventListener=null!==(t=null===(r=null===a||void 0===a?void 0:a.documentAddEventListener)||void 0===r?void 0:r.bind(document))&&void 0!==t?t:document.addEventListener.bind(document);this.documentRemoveEventListener=null!==(q=null===(v=null===a||void 0===a?void 0:a.documentRemoveEventListener)||void 0===v?void 0:v.bind(document))&&void 0!==\nq?q:document.removeEventListener.bind(document);this.videoAddEventListener=null!==(y=null!==(w=null===(u=null===a||void 0===a?void 0:a.videoAddEventListener)||void 0===u?void 0:u.bind(c))&&void 0!==w?w:null===(x=null===a||void 0===a?void 0:a.documentAddEventListener)||void 0===x?void 0:x.bind(document))&&void 0!==y?y:c.addEventListener.bind(c);this.videoRemoveEventListener=null!==(C=null!==(A=null===(z=null===a||void 0===a?void 0:a.videoRemoveEventListener)||void 0===z?void 0:z.bind(c))&&void 0!==\nA?A:null===(E=null===a||void 0===a?void 0:a.documentRemoveEventListener)||void 0===E?void 0:E.bind(document))&&void 0!==C?C:c.removeEventListener.bind(c);this.fa=this.na.bind(this);this.xa=this.$a.bind(this);this.pa=this.oa.bind(this);this.ya=this.bb.bind(this);this.qa=this.Ta.bind(this);this.va=this.ab.bind(this);this.wa=this.Va.bind(this);this.ja=this.ga.bind(this);this.ka=this.Qa.bind(this);this.ta=this.Ua.bind(this);this.sa=this.Za.bind(this);this.da=this.Oa.bind(this);this.ea=this.Pa.bind(this);\nthis.aa=!!f.windowedStreaming;this.cursorType=null!==(F=null!==(K=gi())&&void 0!==K?K:f.cursorType)&&void 0!==F?F:this.aa?2:0;k.i(\"{70cc40b}\",\"{3277c0e}\",this.cursorType);this.g={rb:!1,yd:0===this.cursorType&&!f.allowUnconfined,sb:0,tb:0,Sd:0,Td:0,style:\"\",cursor:this.U[0]};this.h={wb:1,Vc:!1,bd:!1,od:!1};this.Da=[\"image-set\",\"-webkit-image-set\"].find(H=>CSS.supports(\"cursor\",`${H}(url(image.bmp) 2x) 0 0, auto`));0===this.cursorType?(this.j=Lh(this.v),this.j.style.visibility=\"hidden\",this.j.style.display=\n\"none\"):this.j=document.createElement(\"canvas\");Mh(this);Nh(this);this.T=\"onpointerrawupdate\"in this.v;this.$=(this.L=Nf())&&\"getCoalescedEvents\"in PointerEvent.prototype&&\"Firefox\"!==g.browser;k.i(\"{70cc40b}\",\"{f30b8ee}\",this.$?\"supported\":\"not supported\");this.T&&(c=hi(),void 0!==c?Ph(this,c):ua(g)?Ph(this,3):Ph(this,1),k.i(\"{70cc40b}\",\"{20be0c0}\",this.H,void 0!==c?\" (overridden)\":\"\"));this.o=null!==(N=f.unadjustedMovement)&&void 0!==N?N:va(this.u)?!this.aa&&Ja(this.u,84,0,4147,78):ua(this.u)||\nya(this.u)?Ja(this.u,86,0,4240,198):\"Safari\"===this.u.browser?!0:!1;f=ua(g)&&Ja(this.u,84,0,4147,94)&&!Ja(this.u,88,0,4324,139);f=va(this.u)||!f||!Ja(this.u,84,0,4147,94);(null!==(S=ee)&&void 0!==S?S:f)?this.R=new xh:this.R=new wh;[\"pointerlockchange\",\"mozpointerlockchange\"].forEach(H=>this.documentAddEventListener(H,this.ta));[\"pointerlockerror\",\"mozpointerlockerror\"].forEach(H=>this.documentAddEventListener(H,this.sa));ii(this.s,0,this.da);ii(this.s,2,this.ea);ta(this.u)||za(this.u)?this.S=!0:\"Chrome\"!=\ng.browser||Ja(g,99,0,4844,44)||ya(g)?this.S=!1:this.S=!0;1===this.cursorType&&Ih(this,1);this.cb=1===this.cursorType&&(null!==(U=null!==(T=$e)&&void 0!==T?T:P.pointerLockEscape)&&void 0!==U?U:!0);this.lb=1===this.cursorType&&\"Safari\"===g.browser;k.d(\"{70cc40b}\",\"{ec7c4c5}\")}uninitialize(){[\"pointerlockerror\",\"mozpointerlockerror\"].forEach(a=>this.documentRemoveEventListener(a,this.sa));[\"pointerlockchange\",\"mozpointerlockchange\"].forEach(a=>this.documentRemoveEventListener(a,this.ta));ji(this.s,0,\nthis.da);ji(this.s,2,this.ea);Th(this)}$a(a){ai(a)||(a.preventDefault(),this.na(a),2===this.cursorType&&this.v.setPointerCapture(a.pointerId))}na(a){var b;null===(b=this.D.R)||void 0===b?void 0:2==b.g&&(k.i(\"{4c846ba}\",\"{89b1a9f}\"),ki(b),li(b),mi(b));ni(this.s,!0);this.Db=!0;b=Qf(a.timeStamp);Ch(this)&&!Eh(this)?(Fh(this),this.g.rb&&(Yh(this,a.offsetX,a.offsetY),Oh(this),rg(this.l,this.g.sb,this.g.tb,b))):(this.lb&&this.g.rb&&(Th(this),this.O=window.setTimeout(this.Sa,500)),xd(ud()),this.Jb(a.button,\nb))}bb(a){ai(a)||(a.preventDefault(),this.oa(a))}oa(a){xd(ud());this.Ab(a.button,Qf(a.timeStamp))}Ta(a){this.aa&&a.target!==this.v||(pg(this.l,a.deltaY,Qf(a.timeStamp)),a.preventDefault())}Qa(a){if(!ai(a)){a.preventDefault();if(-1!==a.button){let b;switch(a.button){case 1:b=2;break;case 2:b=1;break;default:b=a.button}const c=Qf(a.timeStamp);a.buttons&1<=this.H?V(this.l):sg(this.l,this.H-a))}Pa(a){this.Db=a;Fh(this);Gh(this)}Ua(){if(document.pointerLockElement instanceof HTMLElement)this.m=2;else{var a=2===this.m;this.m=0;di(this);var b=()=>{k.i(\"{70cc40b}\",\"{d4b3de3}\");this.Db=!1;Gh(this)},c=this.Ba.Ya.has(27);this.cb&&a&&!c?this.M=window.setTimeout(()=>{b();0!==this.M&&(di(this),oi(this.Ba,!0))},50):(a&&b(),oi(this.Ba,!1))}}Za(){this.ua||(this.m=0,this.o?\n(this.o=!1,k.e(\"{70cc40b}\",\"{7599808}\"),Fh(this)):(k.e(\"{70cc40b}\",\"{d633cd1}\"),Gh(this)))}yb(){return this.C}Oa(a){a?(this.s.j&&(this.Db=!0,Fh(this)),Nh(this)):(Fh(this),0!==this.M&&(di(this),oi(this.Ba,!1)))}Jb(a,b){this.F.has(a)||(this.F.add(a),this.l.Jb(a,b))}Ab(a,b){this.F.has(a)&&(this.F.delete(a),this.l.Ab(a,b))}lc(a){this.Z!=a&&(Oh(this),this.Z=a)}};function hi(){const a=P.mouseCoalesceInterval;if(void 0!==a)return(new Map([[0,0],[4,1],[8,2],[16,3]])).get(a)}\nfunction ai(a){return a.isPrimary&&\"touch\"!==a.pointerType&&\"pen\"!==a.pointerType?!1:!0}function gi(){switch(Ze){case \"hw\":return 1;case \"sw\":return 0;case \"free\":return 2}};const ri=[{Bc:8,fc:128,rd:qi(),Wb:27,Xb:[]},{Bc:46,fc:128,rd:qi(),Wb:27,Xb:[]}];function Yf(a,b,c,d){1===a.J.ma&&(si(a,b,d,c),a.I.delay(()=>{a.Jb(0,c)}))}function Vf(a,b){1===a.J.ma&&(ti(a.I),a.Ab(0,b))}function Wf(a){var b=a.h;b.ca=!1;Oh(b);1.1>a.J.ma&&ui(a,a.J.offsetX,a.J.offsetY,1)}function Xf(a){return a.aa?(mg(a),!1):a.v.h}function Zf(a,b,c,d){1!==a.J.ma||a.kb||void 0!==a.s?ui(a,a.J.offsetX+d.deltaX,a.J.offsetY+d.deltaY,a.J.ma):si(a,b,d,c)}\nfunction $f(a,b){if(2===b.length){var c=a.h;c.ca=!0;Oh(c);c=b[0];b=b[1];var d=Math.hypot(c.clientX-b.clientX,c.clientY-b.clientY),e=Math.hypot(c.clientX-c.deltaX-(b.clientX-b.deltaX),c.clientY-c.deltaY-(b.clientY-b.deltaY));const f=a.j.getBoundingClientRect(),g=vi(a);d=d/e*a.J.ma;d=Math.min(Math.max(d,1),3);e=(c.clientX+b.clientX)/2-f.left;e+=a.J.offsetX-g.pb-(f.width-e)/a.J.ma;e=(d/a.J.ma-1)*e*-1;e+=a.J.offsetX+(c.deltaX+b.deltaX)/2;let h=(c.clientY+b.clientY)/2-f.top;h+=a.J.offsetY-g.vertical-(f.height-\nh)/a.J.ma;h=(d/a.J.ma-1)*h*-1;h+=a.J.offsetY+(c.deltaY+b.deltaY)/2;ui(a,e,h,d)}}function Uf(a,b,c,d,e){ti(a.I);switch(e){case 1:si(a,b,d,c);a.I.delay(()=>{wi(a,0,c)});break;case 2:a.ka++;be&&0===a.F&&(a.F=window.setTimeout(()=>{2===a.ka?a.D.toggleOnScreenStats():3===a.ka&&a.D.toggleOnScreenStats(!0);xi(a)},300));wi(a,2,c);break;case 3:a.ga++;be&&0===a.F&&(a.F=window.setTimeout(()=>{2===a.ga?a.D.ja():3===a.ga&&yi(a.S);xi(a)},300));wi(a,1,c);break;case 4:wi(a,3,c);break;case 5:wi(a,4,c)}}\nfunction oi(a,b){b&&(zi(a),k.i(\"{8bacfa5}\",\"{f46c4da}\"),W(a.g,3,27,0),W(a.g,4,27,0))}function Ai(a){Bi(a);a.fa=window.setTimeout(()=>{a.S.send()},350)}function Ci(a,b){b.getEntriesByType(\"longtask\").forEach(c=>{let d=Math.round(c.duration);var e=Q;e.h&&(c={duration:{timestamp:c.startTime-e.j,duration:d}},e.g&&e.g.postMessage(c));var f;null===(f=a.D.h)||void 0===f?void 0:(e=f.g,e.L=Math.max(d,e.L));k.i(\"{8bacfa5}\",\"{7071359}\",d)})}\nfunction Di(a,b){if(b)for(const e of b){b=e.remote.code;if(!b)continue;b=ig.get(b);if(!b)continue;var c=e.remote.modifiers,d=[];c&1&&d.push(162);c&2&&d.push(164);c&4&&d.push(91);c&8&&d.push(160);c=d;d=e.local.key;const f=e.local.code;f?(d=ig.get(f))&&a.W.set(d,{Bc:d,fc:e.local.modifiers,rd:qi(),Wb:b,Xb:c}):d&&a.Z.set(d,{Ld:d,fc:e.local.modifiers,rd:qi(),Wb:b,Xb:c})}else for(c of ri)c.Ld?a.Z.set(c.Ld,c):c.Bc&&a.W.set(c.Bc,c)}\nfunction Ei(a){var b,c,d,e,f,g,h;for(const l of a.W.values())k.i(\"{8bacfa5}\",\"{e7c6e9b}\",null===(b=l.Bc)||void 0===b?void 0:b.toString(16),null===(c=l.fc)||void 0===c?void 0:c.toString(16),null===(d=l.Wb)||void 0===d?void 0:d.toString(16),null===(e=l.Xb)||void 0===e?void 0:e.map(n=>n.toString(16)));for(const l of a.Z.values())k.i(\"{8bacfa5}\",\"{b5e3a31}\",l.Ld,null===(f=l.fc)||void 0===f?void 0:f.toString(16),null===(g=l.Wb)||void 0===g?void 0:g.toString(16),null===(h=l.Xb)||void 0===h?void 0:h.map(n=>\nn.toString(16)))}function Fi(a,b){(a.aa=b)&&15!==a.m&&(a.oa=a.m,a.toggleUserInput(!0));b?Gi(a).forEach(c=>a.documentAddEventListener(c,a.xa)):Gi(a).forEach(c=>a.documentRemoveEventListener(c,a.xa))}function Bi(a){0!==a.fa&&(window.clearTimeout(a.fa),a.fa=0)}\nfunction Hi(a,b){if(!a.na||20!==b.keyCode)if(!B(a.u)||20===b.keyCode){var c=16;a.O&&a.ja||!b.getModifierState(\"CapsLock\")||(c|=1);a.$a&&(c|=96,b.getModifierState(\"NumLock\")&&(c|=2),b.getModifierState(\"ScrollLock\")&&(c|=4));if(c!=a.ca){a.ca=c;a=a.g;b=a.fb(5);b.setUint32(0,19,!0);b.setUint8(4,c);try{V(a,b),k.d(\"{57a6a4d}\",\"{56c9613}\",c.toString(2))}catch(d){k.e(\"{57a6a4d}\",\"{cbe483c}\",d),a.G.za(d,\"LockKeys state synchronize exception\",\"{57a6a4d}.ts\",0,0,!0)}}}}\nfunction ui(a,b,c,d){a.J.ma=d;let e=vi(a);e.pb-=a.J.Xa;e.vertical-=a.J.Ra;let f=Math.max(e.vertical+Math.max(0,a.J.Wa-a.J.Pc+2*a.J.Ra),0),g=Math.max(e.vertical,0);e.pb=Math.max(e.pb,0);b=Math.min(Math.max(b,-1*e.pb),e.pb);c=Math.min(Math.max(c,-1*f),g);a.j.style.transform=`translate3d(${b}px,${c}px,0px) scale3d(${d},${d},1)`;a.J.offsetX=b;a.J.offsetY=c;bi(a.h,a.J)}\nfunction Ii(a,b){var c;if(a.P){if(a.o&&a.kb)return a=(null===(c=b.code)||void 0===c?0:c.length)?ig.get(b.code):ig.get(b.key),null!==a&&void 0!==a?a:0;b=b.code?ig.get(b.code):jg.get(b.key);return null!==b&&void 0!==b?b:0}return b.keyCode}\nfunction Ji(a,b){var c;if(null===(c=Dh(a.D))||void 0===c?0:c.isVisible())return!1;if(a.na)switch(b.code){case \"Tab\":return b.altKey?!1:!0;case \"ZoomToggle\":case \"SelectTask\":case \"BrightnessDown\":case \"BrightnessUp\":case \"AudioVolumeMute\":case \"AudioVolumeDown\":case \"AudioVolumeUp\":return!1}return!0}\nfunction Ki(a,b){var c=0;b.ctrlKey&&!b.code.startsWith(\"Control\")&&(c|=2);b.altKey&&!b.code.startsWith(\"Alt\")&&(c|=4);b.metaKey&&!b.code.startsWith(\"Meta\")&&(c|=8);let d=void 0;B(a.u)&&1===b.key.length&&('!@#$%^&*()~_+{}|:\"<>?'.includes(b.key)?d=1:\"1234567890`-=[]\\\\;',./\".includes(b.key)&&(d=0));void 0===d&&b.shiftKey&&!b.code.startsWith(\"Shift\")&&(d=1);return c|(null!==d&&void 0!==d?d:0)}\nfunction zi(a){if(0=f&&c&&(d=~d);d&&W(a.g,3,160,0,performance.now());W(a.g,3,f,d,performance.now());W(a.g,4,f,d,performance.now());d&&W(a.g,4,160,0,performance.now())}a.textInputElement.value=\"\"}\nfunction vi(a){return{pb:a.J.eb*(a.J.ma-1)/2,vertical:a.J.Wa*(a.J.ma-1)/2}}function si(a,b,c,d){ti(a.I);const e=b.getBoundingClientRect();b=(c.clientX-e.left)/a.J.ma;c=(c.clientY-e.top)/a.J.ma;a.lc(!0);Yh(a.h,b,c);const {sb:f,tb:g}=a.h.g;rg(a.g,f,g,d)}function wi(a,b,c){a.Jb(b,c);a.I.delay(()=>{a.Ab(b,c)})}\nvar aj=class{constructor(a,b,c,d,e,f,g,h,l,n,m,p,r,t,v,q,u){var w,x,y,z,A,E,C,K,F,N,S,T,U,H,aa,ea,D,wa,xa,na,oa,La;this.v=t;this.ra=!1;this.Ya=new Set;this.m=0;this.kb=!1;this.P=!0;this.F=0;this.I=new Oi;this.T=!1;this.H=0;this.ja=this.qa=!1;this.fa=this.ga=this.ka=0;this.ua=this.ta=\"off\";this.Z=new Map;this.W=new Map;this.pa=!1;this.Ta=()=>{k.d(\"{8bacfa5}\",\"{9c2578a}\");Ai(this)};this.Sa=()=>{this.pa=!0};this.Qa=()=>{this.pa=!1};this.u=m;this.D=a;this.j=b;this.G=e;this.Ba=p;this.S=r;this.J={eb:b.clientWidth||\nwindow.screen.width,Wa:b.clientHeight||window.screen.height,Sf:1,Xa:0,Ra:0,videoWidth:0,videoHeight:0,Pc:0,offsetX:0,offsetY:0,ma:1};p=window.zoneless;this.windowAddEventListener=null!==(x=null===(w=null===p||void 0===p?void 0:p.windowAddEventListener)||void 0===w?void 0:w.bind(window))&&void 0!==x?x:window.addEventListener.bind(window);this.windowRemoveEventListener=null!==(z=null===(y=null===p||void 0===p?void 0:p.windowRemoveEventListener)||void 0===y?void 0:y.bind(window))&&void 0!==z?z:window.removeEventListener.bind(window);\nthis.documentAddEventListener=null!==(E=null===(A=null===p||void 0===p?void 0:p.documentAddEventListener)||void 0===A?void 0:A.bind(document))&&void 0!==E?E:document.addEventListener.bind(document);this.documentRemoveEventListener=null!==(K=null===(C=null===p||void 0===p?void 0:p.documentRemoveEventListener)||void 0===C?void 0:C.bind(document))&&void 0!==K?K:document.removeEventListener.bind(document);this.videoAddEventListener=null!==(T=null!==(N=null===(F=null===p||void 0===p?void 0:p.videoAddEventListener)||\nvoid 0===F?void 0:F.bind(b))&&void 0!==N?N:null===(S=null===p||void 0===p?void 0:p.documentAddEventListener)||void 0===S?void 0:S.bind(document))&&void 0!==T?T:b.addEventListener.bind(b);this.videoRemoveEventListener=null!==(ea=null!==(H=null===(U=null===p||void 0===p?void 0:p.videoRemoveEventListener)||void 0===U?void 0:U.bind(b))&&void 0!==H?H:null===(aa=null===p||void 0===p?void 0:p.documentRemoveEventListener)||void 0===aa?void 0:aa.bind(document))&&void 0!==ea?ea:b.removeEventListener.bind(b);\nthis.Na=this.Ka.bind(this);this.Pa=this.Oa.bind(this);this.va=this.wa.bind(this);this.sa=this.bb.bind(this);this.ea=this.da.bind(this);this.Va=this.Nb.bind(this);this.Ua=this.lb.bind(this);this.xa=this.cb.bind(this);this.ab=this.Cb.bind(this);this.L=this.Bb.bind(this);this.N=l;this.preventNavigation=!!g.preventNavigation;l=new yg;this.g=new xg(this,l,v,this.J,this.D,c,this.G,q);this.R=new vh(this.j,this.u);this.h=new pi(this,a,b,d,e,g,m,this.R,v,l,this.g,this.v);h?Ld||Fa()?(this.s=new hg(this.j,this.videoAddEventListener,\nthis.videoRemoveEventListener,this.g,this),k.i(\"{8bacfa5}\",\"{60f3637}\")):k.w(\"{8bacfa5}\",\"{32104d3}\"):k.i(\"{8bacfa5}\",\"{6be89bf}\");!Ld&&!Fa()||Ga(this.u)||(this.C=new ag(this.j,this.videoAddEventListener,this.videoRemoveEventListener,this));this.M=f;this.ca=0;this.$a=va(this.u);this.na=ua(this.u);this.O=ya(this.u);this.o=\"Android\"===this.u.os;this.Da=\"VISIONPRO\"===this.u.deviceModel;a=\"Safari\"===this.u.browser;b=!!g.windowedStreaming;k.i(\"{8bacfa5}\",\"{fa2e72c}\",b?\"on\":\"off\");this.$a?(k.d(\"{8bacfa5}\",\n\"{da5ae1d}\"),this.$=[20,144,145]):this.na||\"Linux\"===this.u.os?(k.d(\"{8bacfa5}\",\"{b7becf9}\"),this.$=[]):(k.d(\"{8bacfa5}\",\"{098ce9c}\"),this.$=[20]);this.U=this.aa=!1;PerformanceObserver?this.perf=new PerformanceObserver($b=>Ci(this,$b)):this.perf=null;ii(this.v,2,this.va);k.d(\"{8bacfa5}\",\"{cc9c05b}\");window.ResizeObserver?(this.Za=new ResizeObserver(()=>{this.da()}),this.Za.observe(this.j)):this.windowAddEventListener(\"resize\",this.ea);(B(m)||za(m))&&window.IntersectionObserver&&(this.ya=new IntersectionObserver(()=>\n{this.da()},{threshold:[1]}),this.ya.observe(this.j));this.j.addEventListener(\"resize\",this.ea);this.windowAddEventListener(\"orientationchange\",this.Ta);if(m=window.visualViewport)this.J.Pc=m.height,m.addEventListener(\"resize\",this.Va);this.l=n;bh(this.l,this.g);this.g.Oc.push(this.l);ch(this.l,this.R);this.l.G=this.G;this.wa(this.v.j);ii(this.v,0,this.sa);this.perf&&PerformanceObserver.supportedEntryTypes&&PerformanceObserver.supportedEntryTypes.includes(\"longtask\")&&this.perf.observe({entryTypes:[\"longtask\"]});\nPd&&ud().initialize(this.j,this.u);if(Ga(this.u)||this.o||B(this.u))this.textInputElement=u,this.o&&(this.ta=null!==(wa=null===(D=this.textInputElement)||void 0===D?void 0:D.getAttribute(\"autocapitalize\"))&&void 0!==wa?wa:\"off\",this.ua=null!==(na=null===(xa=this.textInputElement)||void 0===xa?void 0:xa.getAttribute(\"autocorrect\"))&&void 0!==na?na:\"off\",null===(oa=this.textInputElement)||void 0===oa?void 0:oa.setAttribute(\"autocapitalize\",\"off\"),null===(La=this.textInputElement)||void 0===La?void 0:\nLa.setAttribute(\"autocorrect\",\"off\"));if(Ne||Zd&&(a||b))Di(this,g.streamingHotkeys),Ei(this)}uninitialize(){var a,b,c,d,e,f,g;Fi(this,!1);var h=this.j.paused;h=void 0!==h?h?\"paused\":\"playing\":\"unknown\";(this.j.paused||1>(null!==(a=this.j.currentTime)&&void 0!==a?a:1))&&L(this.G,\"VideoPaused\",h,null===(b=this.j.currentTime)||void 0===b?void 0:b.toFixed(2));k.i(\"{8bacfa5}\",\"{fdc8bf7}\",h,this.j.currentTime);null===(c=this.ya)||void 0===c?void 0:c.disconnect();null===(d=this.Za)||void 0===d?void 0:d.disconnect();\nthis.g.stop();this.perf&&this.perf.disconnect();this.toggleUserInput(!1);this.windowRemoveEventListener(\"resize\",this.ea);this.windowRemoveEventListener(\"orientationchange\",this.Ta);this.j.removeEventListener(\"resize\",this.ea);null===(e=window.visualViewport)||void 0===e?void 0:e.removeEventListener(\"resize\",this.Va);a=this.l;if(a.s){b=!0;for(var l of a.h)l&&(l.Fa.state=eh(a,l.Fa.state,!0),Qg(a,l.ba.index,!0,b),b=!1);Gg(a);a.j=0;a.s=0;a.g.qb=!1;a.Eb();a.gamepadPollInterval=100;ih(a);a.h=[];a.Z=!1}l=\nthis.g;a=l.Oc.indexOf(this.l);-1=a.videoWidth||\n0>=a.videoHeight)){var c=0,d=0;if(a.clientWidth/a.clientHeight>a.videoWidth/a.videoHeight){var e=a.clientHeight/a.videoHeight;var f=a.videoWidth*e;var g=a.videoHeight*e;d=(a.clientWidth-f)/2}else e=a.clientWidth/a.videoWidth,f=a.videoWidth*e,g=a.videoHeight*e,c=(a.clientHeight-g)/2;var h=1,l=1;this.J.eb&&this.J.Wa&&(h=f/this.J.eb,l=g/this.J.Wa);this.J.eb=f;this.J.Wa=g;this.J.Sf=e;this.J.Ra=c;this.J.Xa=d;this.J.videoWidth=a.videoWidth;this.J.videoHeight=a.videoHeight;ui(this,this.J.offsetX*h,this.J.offsetY*\nl,this.J.ma);bi(this.h,this.J);null===(b=this.s)||void 0===b?void 0:(a=this.J,c=this.j.getBoundingClientRect(),e=this.J.ma,b.F={pb:c.left+window.pageXOffset+this.J.Xa*this.J.ma,vertical:c.top+window.pageYOffset+this.J.Ra*this.J.ma},b.m=65535/a.eb,b.o=65535/a.Wa,b.m/=e,b.o/=e);b=this.S;a=this.J.Xa;b.Ra=this.J.Ra;b.Xa=a;Ai(this)}}Nb(){this.J.Pc=window.visualViewport.height;ui(this,this.J.offsetX,this.J.offsetY,this.J.ma)}lb(){k.d(\"{8bacfa5}\",\"{b6fbd34}\");history.pushState(null,document.title,location.href)}Ka(a){var b,\nc;let d=this.pa;this.qa=!1;const e=Qf(a.timeStamp);if(this.v.h){Ji(this,a)&&a.preventDefault();var f=this.O&&this.ja?\"CapsLock\"==a.code:!1;f&&(d=d||f);Hi(this,a);var g;!(g=\"CapsLock\"==a.code&&(\"Alphanumeric\"==a.key||\"Katakana\"==a.key||\"Hiragana\"==a.key))&&(g=\"KanaMode\"==a.code)&&(g=a.key,g=\"Hiragana\"==g||\"Katakana\"==g||\"Romaji\"==g||\"KanaMode\"==g);g=g?!0:!1;var h=\"Lang1\"==a.code||\"HangulMode\"==a.key;d=d||g||h;if(!this.$.includes(a.keyCode)||g||f)if(f=f?160:Ii(this,a),0===f)this.ra=!0,this.M.emit(\"TextComposition\",\n{compositionText:a.key,imeRecommendation:!0});else if(this.ra&&(this.ra=!1,this.M.emit(\"TextComposition\",{compositionText:\"\"})),!this.Ya.has(f)){this.Ya.add(f);g=!1;var l=Dh(this.D);h=void 0;if(187==f){g=this.D;var n;if(null===(n=g.R)||void 0===n)var m=0;else 1==n.g?(k.i(\"{4c846ba}\",\"{1f67b97}\"),n.g=2,m=!0):m=!1;m?(Pi(g,{latencyTrigger:!0}),g=!0):g=!1;g=!g}else if(a.ctrlKey&&a.altKey)if(!be&&!de||119!=f&&219!=f)if(be)switch(f){case 48:m=this.h;var p=\"UNSUPPORTED\";if(m.T)switch(Ph(m,(m.I+1)%4),m.I){case 1:p=\n\"4ms\";break;case 2:p=\"8ms\";break;case 3:p=\"16ms\";break;default:p=\"OFF\"}Qi(m.D,\"Non-vsync mouse events: \"+p);k.i(\"{70cc40b}\",\"{bac28ff}\",p);break;case 49:this.D.Cb();break;case 56:this.D.sendCustomMessage({messageType:\"GpuViewStartRequest\",messageRecipient:\"GPUViewTraceControl\",data:\"GpuView\"});k.i(\"{93c7910}\",\"{0915cd3}\");break;case 68:m=this.D;var r;null===(r=m.R)||void 0===r?p=0:0==r.g?(r.g=1,k.i(\"{4c846ba}\",\"{008dc86}\"),li(r),mi(r),p=!0):p=!1;p&&Pi(m,{pcmDumpTrigger:!0});break;case 71:this.Mc();\nbreak;case 76:null===l||void 0===l?void 0:Ri(l,!l.isVisible());Fh(this.h);break;case 83:yi(this.S);break;case 115:m=this.D;m.pa?(jf(),m.pa=!1,Si(m),Qi(m,\"Profiler: OFF, Stats: OFF\")):(Ti(m),Ui(m),Qi(m,\"Profiler: ON, Stats: ON\"));break;case 116:m=this.D;Vi(m)?(Si(m),Qi(m,\"Stats: OFF\")):(Ui(m),Qi(m,\"Stats: ON\"));break;case 117:this.D.toggleOnScreenStats(a.shiftKey);break;case 118:case 192:m=this.D;m.perfIndicator=!m.perfIndicator;Pi(m,{perfIndicator:{on:m.perfIndicator}});break;case 120:m=this.h;m.o=\n!m.o;Qi(m.D,\"UnadjustedMovement: \"+(m.o?\"ON\":\"OFF\"));k.i(\"{70cc40b}\",\"{796c5cb}\",m.o?\"ON\":\"OFF\");break;case 189:this.P=!this.P;Qi(this.D,\"Position dependent keys: \"+(this.P?\"ON\":\"OFF\"));k.i(\"{8bacfa5}\",\"{61d2ab5}\",this.P?\"ON\":\"OFF\");break;case 77:this.D.ja();break;default:g=!0}else g=!0;else this.D.toggleStutterIndicator();else{a:{if(a.ctrlKey||a.shiftKey||a.metaKey||a.altKey)if((h=this.W.get(f))||(h=this.Z.get(a.key)),h){n=h.fc;128==n&&(n=this.O?4:1);r=a.ctrlKey;const v=a.altKey,q=a.metaKey,u=a.shiftKey;\nif((n&1?r:!r)&&(n&2?v:!v)&&(n&4?q:!q)&&(n&8?u:!u))break a}h=void 0}if(h){l=Ki(this,a);for(m of h.rd)n=l&~Wi(m),l!=n&&(l=n,W(this.g,4,m,l,e)),this.Ya.delete(m);for(p of h.Xb)l|=Wi(p),W(this.g,3,p,l,e);W(this.g,3,h.Wb,l,e);W(this.g,4,h.Wb,l,e);for(var t of h.Xb)l&=~Wi(t),W(this.g,4,t,l,e);this.Ya.delete(f)}else if(null===l||void 0===l?0:l.isVisible())if(13==f)l.toggle(),Fh(this.h);else if(82==f)l.reset(),Fh(this.h);else if(65==f)Xi(l,!l.ac.checked);else if(83==f)if(l.ec.length){m=`LDAT_${(new Date).toISOString()}.csv`;\np=[\"Sample #,Total,Render,Decode,Begin,Server + Rtd + Receive,Input Callback\"];for(t=0;t{this.g=0;bj(this)},cj))}}var cj=30;\nfunction qi(){let a=[];a.push(162);a.push(163);a.push(164);a.push(165);a.push(91);a.push(92);a.push(160);a.push(161);return a}function Wi(a){switch(a){case 162:case 163:return 2;case 164:case 165:return 4;case 91:case 92:return 8;case 160:case 161:return 1}return 0};function dj(a,b,c){var d=b.packetsLost-c.packetsLost;let e=100-d/(b.packetsReceived-c.packetsReceived+d)*100;if(isNaN(e)||void 0===e)e=0;b=b.pliCount-c.pliCount;0{a=a.state;let b=2;\"granted\"==a?b=5:\"prompt\"==a&&(b=1);return b}).catch(()=>0):Promise.resolve(0)}function hj(a,b,c=!0){a.h=b;3===a.h&&(a.N=!0);a.L&&c&&a.L.emit(\"MicCapture\",{state:a.h})}function ij(a){!1!==ce&&(a.v||3==a.h||2==a.h||6==a.h||7==a.h?hj(a,a.h):gj().then(b=>{0!==b&&hj(a,b)}))}\nfunction jj(a){if(a.initialized)if(kj){a.l=!1;a.paused=!0;var b=a.h;navigator.mediaDevices.ondevicechange=()=>{};if(a.C){k.d(\"{223689a}\",\"{6faf5bb}\");let d=lj();var c=a.C.getSenders()[0];c?c.replaceTrack(d.getTracks()[0]).then(()=>{k.d(\"{223689a}\",\"{797fa55}\");hj(a,5,!1);3===b&&(a.F=!0)}).catch(e=>{k.e(\"{223689a}\",\"{79f26cc}\",e);hj(a,7,!1)}).finally(()=>{let e=a.g;a.g=null;e&&e.getTracks().forEach(f=>{f.stop()});hj(a,a.h);B(a.u)&&!J(a.u,!1,15,4)&&a.j()}):(k.e(\"{223689a}\",\"{f7f0250}\"),a.g=null)}else k.e(\"{223689a}\",\n\"{9e75fa2}\"),hj(a,0)}else hj(a,6)}function mj(a,b){var c;a.o=!0;a.s.set(b,(null!==(c=a.s.get(b))&&void 0!==c?c:0)+1);k.d(\"{223689a}\",\"{30f8637}\",b)}\nasync function nj(a,b){a.v=!0;return navigator.mediaDevices.getUserMedia({audio:b}).then(c=>{k.d(\"{223689a}\",\"{b204737}\");hj(a,5,!1);a.v=!1;a.g=c;B(a.u)&&(c.getTracks()[0].onended=()=>{a.O=performance.now();k.i(\"{223689a}\",\"{6b60d82}\");jj(a)});a.g.oninactive=()=>{k.d(\"{223689a}\",\"{eee54f1}\");a.M.clear();a.g=null};if(a.paused)k.d(\"{223689a}\",\"{21e76e1}\"),a.g=null,hj(a,7);else{var d=a.C.getSenders()[0];d?d.replaceTrack(c.getTracks()[0]).then(()=>{var e;k.i(\"{223689a}\",\"{6c92139}\");const f=null!==(e=\na.Ea)&&void 0!==e?e:a.K;if(B(a.u)&&!J(a.u,!1,15,4)&&f&&!f.muted){let g;f.srcObject&&(g=f.play(),k.i(\"{223689a}\",\"{23a6493}\",f.tagName));g?g.then(()=>{k.d(\"{223689a}\",\"{5593cbe}\");a.j()}).catch(h=>{a.j();try{L(a.G,\"WAR: Play Error\",null===h||void 0===h?void 0:h.name,null===h||void 0===h?void 0:h.message),k.e(\"{223689a}\",\"{69aae72}\",null===h||void 0===h?void 0:h.name,null===h||void 0===h?void 0:h.message)}catch(l){}}):k.e(\"{223689a}\",\"{b6a6508}\")}hj(a,3);a.F=!1;J(a.u,!1,15,4)&&(a.o=!1,a.I=!1)}).catch(e=>\n{k.e(\"{223689a}\",\"{5c42246}\",e);a.g=null;hj(a,7)}):(k.e(\"{223689a}\",\"{f7f0250}\"),a.g=null)}}).catch(c=>{var d,e;B(a.u)&&!J(a.u,!1,15,4)&&a.j();a.v=!1;c instanceof DOMException&&\"NotAllowedError\"===c.name?(k.e(\"{223689a}\",\"{3f9bd66}\"),hj(a,2),a.I&&!a.o&&mj(a,\"permissionDenied\")):c instanceof DOMException&&\"NotFoundError\"===c.name?(k.e(\"{223689a}\",\"{7f04869}\"),hj(a,4)):(c instanceof DOMException&&\"NotReadableError\"===c.name?(a.M.add(null!==(d=b.deviceId)&&void 0!==d?d:\"default\"),k.e(\"{223689a}\",\"{af7e08c}\",\nnull!==(e=b.deviceId)&&void 0!==e?e:\"default\",c.name,c.message),navigator.mediaDevices.enumerateDevices().then(f=>{for(const g of f)if(\"audioinput\"===g.kind&&\"default\"!==g.deviceId&&!a.M.has(g.deviceId)){k.d(\"{223689a}\",\"{655d8b0}\",g.deviceId,g.label);b.deviceId=g.deviceId;nj(a,b);break}}).catch(f=>{k.e(\"{223689a}\",\"{930e826}\",f.name,f.message)})):k.e(\"{223689a}\",\"{c361fc5}\",c.name,c.message),hj(a,7))})}\nasync function oj(a){if(a.initialized)if(kj){if(a.l=!0,null==a.g&&!a.v){a.paused=!1;hj(a,1,!1);var b={sampleRate:48E3};ua(a.u)&&(b.googAutoGainControl2=!1);navigator.mediaDevices.ondevicechange=()=>{k.i(\"{223689a}\",\"{50d0169}\",!!a.g,a.v);null!=a.g||a.v||(k.d(\"{223689a}\",\"{c849290}\"),oj(a))};await nj(a,b);a.H||pj(a)}}else k.e(\"{223689a}\",\"{999b07b}\"),hj(a,6)}\nfunction pj(a){return navigator.mediaDevices.enumerateDevices().then(b=>{let c=0;k.d(\"{223689a}\",\"{fa1ec18}\",JSON.stringify(b));for(const d of b)\"audioinput\"==d.kind&&c++;switch(c){case 0:a.H=\"No Audio Input\";a.m.Qd++;break;case 1:a.H=\"Built-in Microphone\";a.m.wd++;break;default:a.H=\"Headset Microphone\",a.m.Gd++}k.d(\"{223689a}\",\"{0d14ab6}\",a.H)}).catch(()=>{k.e(\"{223689a}\",\"{21131d5}\")})}\nfunction lj(){let a=rf(48E3);if(a){let b=a.createMediaStreamDestination().stream.getAudioTracks()[0];a.close();b.enabled=!0;return new MediaStream([b])}throw Error(\"Mic stream is not supported\");}\nfunction qj(a){if(!1!==ce){if(null!=a.g){let b=a.g;a.M.clear();a.g=null;navigator.mediaDevices&&(navigator.mediaDevices.ondevicechange=()=>{});b.getTracks().forEach(c=>{c.stop()})}a.l=!1;hj(a,5);X(a.G,\"AudioInputType\",a.N?\"started\":\"not started\",0,a.m.Qd,a.m.wd,a.m.Gd);J(a.u,!1,15,4)&&X(a.G,\"LowAudioVolume\",\"\",0,a.s.get(\"permissionDenied\"),a.s.get(\"visibilityChange\"),a.s.get(\"deviceChange\"));a.C=null;a.L=null;a.K=void 0;a.Ea=void 0;a.initialized=!1;a.m={Qd:0,wd:0,Gd:0};for(const [b]of a.s)a.s.set(b,\n0);a.o=!1;a.F=!1;a.I=!1;a.N=!1}}function rj(a){return\"Built-in Microphone\"===a.H}function sj(a,b){pj(a).then(()=>{0!==b&&J(a.u,!1,15,4)&&!a.o&&rj(a)&&(a.l||a.F)&&mj(a,\"deviceChange\")})}\nvar tj=class{constructor(a,b){this.L=null;this.h=0;this.l=!1;this.M=new Set;this.initialized=this.P=!1;this.O=0;this.F=this.I=this.o=!1;this.m={Qd:0,wd:0,Gd:0};this.s=new Map([[\"permissionDenied\",0],[\"visibilityChange\",0],[\"deviceChange\",0]]);this.N=!1;this.u=a;this.G=b;this.g=this.C=null;this.paused=this.v=!1;J(a,!1,15)&&(this.P=!0)}initialize(a,b,c,d){if(!1!==ce){this.C=a;this.L=b;this.K=c;this.Ea=d;if(kj){a=lj();if(null==a){k.w(\"{223689a}\",\"{360f38b}\");return}this.C.addTrack(a.getAudioTracks()[0],\na);this.l&&oj(this)}else k.w(\"{223689a}\",\"{5813c2b}\");this.initialized=!0}}j(){var a,b,c;if(Ud&&this.P){var d=null!==(b=null===(a=this.Ea)||void 0===a?void 0:a.srcObject)&&void 0!==b?b:null===(c=this.K)||void 0===c?void 0:c.srcObject;if(d){k.i(\"{223689a}\",\"{ad4b8c2}\");var e=d.getAudioTracks()[0];e.enabled=!1;setTimeout(()=>{e.enabled=!0},0)}}}getMicState(){return this.h}},kj=null!=navigator.mediaDevices&&(window.AudioContext||window.webkitAudioContext||!1);var uj={clientName:\"Ragnarok\",clientId:\"62677554106929725\",eventSchemaVer:\"3.2\"},vj=class extends dc{constructor(a){super(a);this.name=\"Streamer_Start\";this.gdprLevel=\"functional\"}},wj=class extends dc{constructor(a){super(a);this.name=\"Streamer_Exit\";this.gdprLevel=\"functional\"}},xj=class extends dc{constructor(a){super(a);this.name=\"Streamer_InputDevice\";this.gdprLevel=\"functional\"}};function yj(a,b){const c=a.j.get(b);if(c){a.h=c;for(const d of a.g)d(a.getCurrentNetworkType())}else k.d(\"{aac1655}\",\"{1e3c13d}\",b)}\nclass zj{constructor(){var a;this.j=new Map([[\"Ethernet\",\"ETHERNET\"],[\"5GHz_WiFi\",\"WIFI_5_0\"],[\"2.4GHz_WiFi\",\"WIFI_2_4\"],[\"Others\",\"OTHER\"],[\"disconnected\",\"UNKNOWN\"],[\"wifi\",\"WIFI\"],[\"ethernet\",\"ETHERNET\"],[\"none\",\"UNKNOWN\"],[\"bluetooth\",\"BLUETOOTH\"],[\"wimax\",\"WIMAX\"],[\"other\",\"OTHER\"],[\"mobile\",\"MOBILE\"],[\"unknown\",\"UNKNOWN\"],[\"NONE\",\"UNKNOWN\"],[\"UNKNOWN\",\"UNKNOWN\"],[\"ETHERNET\",\"ETHERNET\"],[\"WIFI\",\"WIFI\"],[\"NET_PROXY\",\"OTHER\"],[\"2G\",\"MOBILE_2G\"],[\"2.5G\",\"MOBILE_2G\"],[\"3G\",\"MOBILE_3G\"],[\"4G\",\"MOBILE_4G\"]]);\nthis.h=\"UNKNOWN\";this.g=[];window.addEventListener(\"GFNNetworkInfo\",c=>{k.d(\"{aac1655}\",\"{2925c9d}\",c.detail.state);yj(this,c.detail.state)});const b=navigator.connection;if(null===b||void 0===b?0:b.type)yj(this,b.type),b.addEventListener(\"change\",()=>{var c;const d=null===(c=navigator.connection)||void 0===c?void 0:c.type;d&&(k.d(\"{aac1655}\",\"{4a9e05b}\",d),yj(this,d))});if(null===(a=window.tizen)||void 0===a?0:a.systeminfo){a=c=>{if(c=c.networkType)k.d(\"{aac1655}\",\"{e9b5f27}\",c),yj(this,c)};try{window.tizen.systeminfo.getPropertyValue(\"NETWORK\",\na),window.tizen.systeminfo.addPropertyValueChangeListener(\"NETWORK\",a)}catch(c){k.w(\"{aac1655}\",\"{7d035ae}\",c)}}}registerCallback(a){this.g.push(a)}unregisterCallback(a){const b=this.g.findIndex(c=>c==a);-1!==b&&this.g.splice(b,1)}getCurrentNetworkType(){return this.h}}var Aj=new zj;function L(a,b,c,d,e,f){b=new ec({key1:null!==b&&void 0!==b?b:\"\",key2:null!==c&&void 0!==c?c:\"\",key3:null!==d&&void 0!==d?d:\"\",key4:null!==e&&void 0!==e?e:\"\",key5:null!==f&&void 0!==f?f:\"\",moduleName:\"RAGNAROK\",networkType:Pa(Aj.getCurrentNetworkType()),overrideConfigType:zd.type,overrideConfigVersion:zd.version,cmsId:String(a.cmsId),sessionId:a.sessionId,subSessionId:a.subSessionId});a.h(b)}\nfunction Vg(a,b,c,d,e,f,g,h,l){50<=a.H||(a.H++,b=new xj({deviceName:b,deviceType:\"GAMEPAD\",vendorId:c,productId:d,deviceIndex:e,reportIndex:g?0:e,hapticsSupported:Gf(f),hapticsFeedbackCount:0,state:h,eventMapReceived:l,eventMapProcessed:l,sessionId:a.sessionId,subSessionId:a.subSessionId,cmsId:String(a.cmsId)}),a.h(b))}\nfunction X(a,b,c,d,e,f,g){b=new gc({metricName:b,moduleName:\"RAGNAROK\",valueInt1:e,valueInt2:f,valueInt3:g,valueString:c,valueDouble:d,networkType:Pa(Aj.getCurrentNetworkType()),cmsId:String(a.cmsId),sessionId:a.sessionId,subSessionId:a.subSessionId});a.h(b)}function Bj(a,b,c,d,e){var f=Y;f.subSessionId=a;f.sessionId=b;f.cmsId=c;f.isResume=d;f.zoneAddress=e}\nfunction Cj(a,b,c){var d=Y,e,f,g;const h=new vj({zoneAddress:d.zoneAddress,networkSessionId:null!==(e=d.telemetryEventIds.networkTestId)&&void 0!==e?e:\"\",sessionId:d.sessionId,subSessionId:d.subSessionId,resumeType:Hf(d.isResume),overrideConfigType:zd.type,overrideConfigVersion:zd.version,result:b,codec:Ef(c),ipVersion:\"UNKNOWN\",launchDuration:Math.round(a),networkType:Pa(Aj.getCurrentNetworkType()),streamingProfileGuid:null!==(f=d.telemetryEventIds.streamingProfileGuid)&&void 0!==f?f:\"\",systemInfoGuid:null!==\n(g=d.telemetryEventIds.systemInfoGuid)&&void 0!==g?g:\"\",cmsId:d.cmsId});d.h(h)}\nclass Dj extends oc{constructor(){super(uj);this.cmsId=this.subSessionId=this.sessionId=\"\";this.isResume=!1;this.zoneAddress=\"\";this.H=0;this.v=new Map;this.C=0}za(a,b,c,d,e,f,g){var h;if(50<=this.C)var l=!1;else{var n=null!==(l=this.v.get(b))&&void 0!==l?l:0;10<=n?l=!1:(this.C++,this.v.set(b,n+1),l=!0)}l&&(a instanceof DOMException&&(a={name:a.name,message:a.message}),a=new fc({filename:c,lineno:d,stacktrace:null!==(h=null===a||void 0===a?void 0:a.stack)&&void 0!==h?h:\"\",colno:e,handled:Gf(f),category:null!==\ng&&void 0!==g?g:\"\",message:b,moduleName:\"RAGNAROK\",sessionId:this.sessionId,subSessionId:this.subSessionId}),this.h(a))}}var Y=new Dj;function Ej(a,b){a.I.hasListener(\"TelemetryEvent\")?a.I.emit(\"TelemetryEvent\",b):Fj(a.j,b)}function Gj(a,b){a.j.I=b}\nfunction Hj(a,b,c,d,e,f,g,h,l,n){b=new vj({zoneAddress:e,networkSessionId:n,sessionId:b,subSessionId:c,resumeType:Hf(d),overrideConfigType:zd.type,overrideConfigVersion:zd.version,result:g,codec:Ef(h),ipVersion:\"UNKNOWN\",launchDuration:Math.round(f),networkType:Pa(Aj.getCurrentNetworkType()),streamingProfileGuid:Ij(a.j),systemInfoGuid:Jj(a.j),cmsId:l});Ej(a,{name:b.name,gdprLevel:b.gdprLevel,parameters:b.parameters,ts:b.ts,clientConfig:uj})}\nfunction Kj(a,b){let c=!1;a.clientShutDownCallback&&(c=a.clientShutDownCallback(b),k.d(\"{9838627}\",\"{caf81d9}\",c));if(!c){k.d(\"{9838627}\",\"{e939db1}\");a=a.j;var d;k.d(\"{f7c1592}\",\"{01dcfe5}\",null===(d=b.parameters)||void 0===d?void 0:d.sessionId);Lj(a,b);Mj(Nj(a,a.h.eventPayload))}}function Oj(a){if(a.clientShutDownCallback)return k.d(\"{9838627}\",\"{c7dcc4e}\"),Pj(a.j).then(b=>{for(const c of b)Kj(a,c);Qj(a.j)}).catch(()=>{k.d(\"{9838627}\",\"{41cf828}\")});k.d(\"{9838627}\",\"{77df598}\");return Rj(a.j)}\nvar Sj=class extends Dj{constructor(a,b){super();this.I=a;this.j=b;this.j.H=this.za.bind(this)}h(a){Ej(this,{name:a.name,gdprLevel:a.gdprLevel,parameters:a.parameters,ts:a.ts,clientConfig:uj})}};function Tj(a,b){switch(a){case 0:var c,d=window.RTCPeerConnection;if(d)if(B(b))b=J(b,!1,14,3);else{a=!1;Ga(b)&&(a=!0);window.chrome&&(\"Chrome\"==b.browser?Ja(b,77)&&(a=!0):a=!0);switch(b.browser){case \"Edge_Legacy\":a=!1;break;case \"Safari\":const e=null===d||void 0===d?void 0:d.prototype;if(d=e&&(null===(c=e.hasOwnProperty)||void 0===c?0:c.call(e,\"canTrickleIceCandidates\")))b:if(\"Safari\"!=b.browser)d=!1;else{try{d=Ka(b.browserVer,!1,16,4);break b}catch(f){k.w(\"{d988e7f}\",\"{07fd1dd}\")}d=!0}d&&(a=!0)}b=\na}else b=!1;return b;case 1:return kj;default:return!1}}function Uj(a){return!(ta(a)||za(a)||B(a))}\nfunction Vj(a,b,c){var d,e,f,g;const h=4953600<=a*b;var l=30===c?1.25*c:Math.min(c,60);let n=a*b*l;Df(a,b)||h?(a=null!==(e=null!==(d=Fe)&&void 0!==d?d:P.bitsPerPixel1440p)&&void 0!==e?e:.325,d=2073600*l,l=d+(3686400*l-d)/3,n=h?l+(n-l)/12:d+(n-d)/3):a=null!==(g=null!==(f=Ee)&&void 0!==f?f:P.bitsPerPixel)&&void 0!==g?g:.3;n=n*a/1200;120<=c&&!h&&(n=Math.min(5E4,Math.round(1.15*n)));return[Math.round(n),5E4]}\nfunction Wj(a,b){b*=1E3;b=3600*(120===a?.916*b+293098:.678*b+910569)/1E9/8;30===a&&(b*=.625);return b=Math.round(.95*b)};async function Xj(a){let b=0;\"iOS\"===a.os&&(b|=1);\"iPadOS\"===a.os&&(b|=2);za(a)&&wf()&&(b|=4);ta(a)&&navigator.userAgent.includes(\"PWA\")&&window.lge_webrtc_hevc_support&&(b|=8);\"VISIONPRO\"===a.deviceModel&&(b|=16);return Yj(b)}\nasync function Yj(a){var b=screen.width,c=screen.height,d=window.devicePixelRatio,e,f,g,h=!!(a&4)||!!(a&8)||!!(a&16),l,n;var m=null!==(n=null!==(l=Le)&&void 0!==l?l:P.forceHdrSupport)&&void 0!==n?n:!1;var p,r;l=null!==(r=null!==(p=Me)&&void 0!==p?p:P.forceSdr10Support)&&void 0!==r?r:!1;[b,c]=tf([b,c]);c={width:Math.round(b*d),height:Math.round(c*d),fps:60,scaleFactor:Math.round(100*d)};d=void 0;h?d={width:3840,height:2160,fps:c.fps}:a&2&&1366<=b&&(d={width:1600,height:1200,fps:c.fps});a=[{width:2560,\nheight:1600,fps:120},{width:3840,height:1080,fps:120}];h&&a.push({width:3840,height:2160,fps:60});h=!1;m&&(h=null===(e=window.matchMedia)||void 0===e?void 0:e.call(window,\"(dynamic-range: high)\").matches,e=null===(f=window.matchMedia)||void 0===f?void 0:f.call(window,\"(video-dynamic-range: high)\").matches,f=null===(g=window.matchMedia)||void 0===g?void 0:g.call(window,\"(color-gamut: p3)\").matches,k.i(\"{5083445}\",\"{f9f1c3b}\",h,e,f),h=(h||e)&&f);g=qf();return Zj={displayMode:c,maxAutoMode:d,maxSupportedModes:a,\nfeatures:{vsync:0,vvsync:!1,hdr:h,reflex:!1,audioChannelCount:g,bitDepth:m?10:8,sdrBitDepth:l?10:8}}}let Zj;function ak(a){let b=0;if(null===a||void 0===a?0:a.supported)b|=1;if(null===a||void 0===a?0:a.smooth)b|=2;if(null===a||void 0===a?0:a.powerEfficient)b|=4;return b}\nfunction bk(a,b=1920,c=1080,d=60){const e=navigator.mediaCapabilities;return e?e.decodingInfo({type:\"webrtc\",video:{contentType:\"video/\"+a,width:b,height:c,framerate:d,bitrate:1E3*Vj(b,c,d)[0]}}).catch(f=>{k.w(\"{5083445}\",\"{f5c2155}\",a,f)}):Promise.resolve(void 0)}function ck(){var a=dk;return a.l?Promise.resolve(a.l):a.g?a.g:a.m()}function ek(a,b){b&&(a.refreshRate=void 0);return a.refreshRate?Promise.resolve(a.refreshRate):a.j?a.j:fk(a)}async function gk(){return 117<=await ek(dk,!1)?!0:!1}\nfunction fk(a){a.j=hk().then(b=>{a.refreshRate=b;return a.refreshRate},()=>{var b;return null!==(b=a.refreshRate)&&void 0!==b?b:0});return a.j}\nfunction hk(){return new Promise((a,b)=>{let c=!1;const d=window.setTimeout(()=>{c=!0},4E3),e=[];let f,g=window.innerWidth,h=window.innerHeight,l=window.screenX,n=window.screenY;const m=()=>{window.requestAnimationFrame(()=>{if(c)k.w(\"{5083445}\",\"{0b0c6f9}\",\"Timed out during the refreshRate loop\"),window.clearTimeout(d),b();else{if(window.innerWidth!=g||window.innerHeight!=h||l!=window.screenX||n!=window.screenY){g=window.innerWidth;h=window.innerHeight;l=window.screenX;n=window.screenY;var p=!0}else p=\n!1;p?(k.w(\"{5083445}\",\"{824b461}\"),e.length=0,m()):(p=performance.now(),e.length&&e[0]<=p-2E3?(f=Math.floor(e.length/2),k.d(\"{5083445}\",\"{8c3d290}\",f,e[e.length-1]-e[0]),p=f,window.clearTimeout(d),a(p)):(e.push(p),m()))}})};m()})}var dk=new class{constructor(){Jf.push(this.s.bind(this));Jf.push(this.m.bind(this));Jf.push(this.o.bind(this))}m(){return this.g=bk(\"av1\").then(a=>this.l=a)}o(){return this.h=Promise.resolve(void 0)}async s(){return 117<=await ek(this,!0)?!0:!1}};\nasync function ik(a,b){var c,d,e;const f=null!==(d=null!==(c=Je)&&void 0!==c?c:P.enableAv1Support)&&void 0!==d?d:(ua(b)||va(b))&&\"Chrome\"==b.browser;c=null!==(e=P.enableAv1ByResolutionAndFps)&&void 0!==e?e:7;if(!f||4953600<=a.width*a.height&&!(c&4)||Df(a.width,a.height)&&!(c&2)||120===a.fps&&!(c&1))return!1;if(ta(b)&&void 0!=window.lge_webrtc_av1_support)return window.lge_webrtc_av1_support;a=await ck();return(null===a||void 0===a?0:a.powerEfficient)?!0:!1}\nasync function jk(a){if(ta(a)&&void 0!=window.lge_webrtc_hevc_support)return window.lge_webrtc_hevc_support;if(za(a))return!0;a=dk;a=await (a.v?Promise.resolve(a.v):a.h?a.h:a.o());return(null===a||void 0===a?0:a.powerEfficient)?!0:!1}async function kk(a,b){var c;let d=[];const e=null!==(c=Ke)&&void 0!==c?c:P.codecList;if(e)for(const f of e)d.push(f);else a=ik(a,b),b=jk(b),await a&&d.push(\"AV1\"),await b&&d.push(\"H265\"),d.push(\"H264\");return d};function lk(a){let b={origin:\"\",time:\"\",ob:new Map,media:[]},c=new Map,d=void 0,e=void 0,f=!1;const g=()=>{if(f)if(e&&d)b.media.push({mediaType:e,Fc:d,attributes:c}),d=e=void 0;else return k.e(\"{eb7c2d0}\",\"{adc37a7}\"),!1;else b.ob=c,f=!0;c=new Map;return!0};for(const l of a.split(/\\r?\\n/))if(!(2>l.length||\"=\"!==l[1])){var h=l[0];a=l.substr(2);if(\"m\"==h){if(!g())return;e=a.split(\" \")[0]}else if(\"a\"==h){if(h=a.split(\":\",2),1!==h.length){if(2!==h.length){k.e(\"{eb7c2d0}\",\"{f6bdb84}\",a);return}a=h[0];\nh=h[1];if(\"msid\"===a)if(void 0===d)d=h;else{k.e(\"{eb7c2d0}\",\"{dc7fbec}\",h);return}else c.set(a,h)}}else if(\"t\"==h){if(f){k.e(\"{eb7c2d0}\",\"{14fc069}\");return}b.time=a}else if(\"o\"==h){if(f){k.e(\"{eb7c2d0}\",\"{eb0287a}\");return}b.origin=a}}if(g())if(\"\"===b.time||\"\"===b.origin)k.e(\"{eb7c2d0}\",\"{8e7e486}\");else return b}\nfunction mk(a,b,c,d){const e=/^([^[.]+)(?:\\[(\\d+)\\])?\\.([^:]+): *(.+)$/;let f=!0;for(const l of a.split(/\\r?\\n/)){var g=e.exec(l);if(g){var h=g[1];a=void 0!==g[2]?Number.parseInt(g[2]):void 0;const n=g[4];g=h+\".\"+g[3];h=nk(h);const m=ok(b,h,a),p=ok(c,h,a);m&&p?p.has(g)?(k.d(\"{eb7c2d0}\",\"{2beb68f}\",d,g,n),m.set(g,n)):(k.w(\"{eb7c2d0}\",\"{cc4fdef}\",d,g,n),f=!1):(k.w(\"{eb7c2d0}\",\"{a649ad8}\",d,h,a),f=!1)}}return f}\nfunction nk(a){switch(a){case \"video\":case \"vqos\":case \"qscore\":case \"bwe\":case \"clientPerfBr\":case \"packetPacing\":return\"video\";case \"audio\":case \"aqos\":case \"audioBitrate\":return\"audio\";case \"ri\":return\"application\";case \"mic\":return\"mic\"}}function pk(a,b,c){a.set(c?\"vqos.dfc.adjustResAndFps\":\"vqos.drc.enable\",b?\"1\":\"0\")}\nfunction qk(a,b){let c=!0;const d=(f,g)=>{if(f=f.get(g))if(f=parseInt(f),!Number.isNaN(f))return f;k.e(\"{eb7c2d0}\",\"{0a60213}\",g);c=!1;return 0};a.xd=d(b.ob,\"general.clientCapture\");let e=0;for(const f of b.media){if(\"video\"===f.mediaType&&ee.mediaType===b)[null!==c&&void 0!==c?c:0])||void 0===d?void 0:d.attributes}\nfunction rk(a,b){let c=`v=0\\no=${a.origin}\\ns=-\\nt=${a.time}\\n`;const d=(e,f)=>{for(const [g,h]of e){e=g;const l=h;l!==f.get(e)&&(c+=`a=${e}:${l}\\n`)}};d(a.ob,b.ob);for(const e of a.media)c+=`m=${e.mediaType} 0 RTP/AVP\\n`,c+=`a=msid:${e.Fc}\\n`,a=b.media.find(f=>f.Fc===e.Fc),d(e.attributes,a.attributes);return c}function sk(a){switch(a){case 0:return 0;case 1:return 1;case 2:return k.w(\"{eb7c2d0}\",\"{30c875c}\"),0;default:return k.w(\"{eb7c2d0}\",\"{7cd5754}\",a),0}};function tk(a){const b=a.j-a.g;return 0!=b?(a.l-a.h)/b:0}class uk{constructor(){this.j=this.g=this.l=this.h=0}update(a,b){0==this.h&&0==this.g?(this.h=a,this.g=b):(this.j=b,this.l=a)}reset(){this.h=this.l;this.g=this.j}}function vk(a,b,c){var d,e,f,g;let h=null!==(d=b.bytesReceived)&&void 0!==d?d:0;d=null!==(e=c.bytesReceived)&&void 0!==e?e:0;b=null!==(f=b.timestamp)&&void 0!==f?f:0;c=null!==(g=c.timestamp)&&void 0!==g?g:0;b!=c&&(a.o=(h-d)/(125*(b-c)))}\nfunction wk(a,b){b.frameWidth&&b.frameHeight&&(a.streamingResolution={width:b.frameWidth,height:b.frameHeight});if(b.framesDecoded){const c=a.R,d=b.timestamp;c!==d&&(a.fps=Math.floor((b.framesDecoded-a.C)/(d-c)*1E3));a.C=b.framesDecoded;b.totalDecodeTime&&(a.m.update(b.totalDecodeTime,b.framesDecoded),a.zd=1E3*b.totalDecodeTime/b.framesDecoded)}b.framesReceived&&(a.O=b.framesReceived,b.totalInterFrameDelay&&(a.P=1E3*b.totalInterFrameDelay/(b.framesReceived-1)));b.framesDropped&&(a.I=b.framesDropped);\nb.packetsLost&&(a.N=b.packetsLost);b.pliCount&&(a.s=b.pliCount);a.R=b.timestamp}function xk(a,b){a.M.innerText=yk(a,b);a.j={value:0,count:0,max:0};a.l={value:0,count:0,max:0};a.m.reset()}\nfunction yk(a,b){var c=`Seat: ${a.h.zoneName} (${a.h.Ud}) / ${a.h.gpuType}\\n`,d=`Game: CMS ${a.h.appId}`;void 0!==a.avgGameFps&&(d+=` / fps ${a.avgGameFps.toFixed()}`);c=c+(d+\"\\n\")+`Stream: Current ${Kf(a.streamingResolution)}@${a.fps} / Default: ${a.h.streamInfo.width}x${a.h.streamInfo.height}@${a.h.streamInfo.fps} / Codec ${a.codec}${a.hdr?\" HDR\":\"\"} ${a.bitDepth} bpc\\n`+`Network: RTD ${a.rtd}ms / FL ${a.s} / PL ${a.N} / J ${a.H.toFixed(2)}ms / Bitrate ${a.o.toFixed(2)}Mbps / BWU ${a.Ob.toFixed(2)}%\\n`+\n`QOS: frame ${a.C} / FT ${a.P.toFixed(2)} / D ${(1E3*tk(a.m)).toFixed(2)} / Q ${Math.floor(a.v.qualityScore)} / Marker ${a.S}\\n`+`Client: ${a.u.os} ${a.h.clientAppVersion} ${a.h.clientLocale} Resolution ${Kf({width:window.innerWidth*window.devicePixelRatio,height:window.innerHeight*window.devicePixelRatio})}\\n`+`Input ${a.g.qf}\\n`;d=`DC ${zk(a.j)}ms (${a.j.max.toFixed(2)}ms) / Blocked ${a.L}\\n`;const e=`Stats ${zk(a.l)}ms (${a.l.max.toFixed(2)}ms) / FR ${a.O} / FDR ${a.I}\\n`,f=`Latency ${a.v.latencyScore.toFixed(1)} / Network ${a.v.networkLossScore.toFixed(1)} / Bandwidth ${a.v.bandwidthScore.toFixed(1)}\\n`,\ng=`VP ${a.g.tf?\"y\":\"n\"} / AP ${a.g.rf?\"y\":\"n\"} / UI ${a.g.yb?\"y\":\"n\"} / VKB ${a.g.kb?\"y\":\"n\"} / MS ${a.g.yf} / RSDMM ${+a.g.cd}\\n`;a=`KBL ${a.g.keyboardLayout} / ALM ${+a.g.appLaunchMode} / SWD ${a.U?\"y\":\"n\"} / ${a.cc}`;b&&(c+=d+e+f+g+a);return c}\nvar Ak=class{constructor(a,b,c){this.o=this.fps=0;this.Ob=4;this.N=this.rtd=this.H=this.I=this.O=this.C=this.R=this.F=0;this.streamingResolution={width:0,height:0};this.L=this.P=0;this.j={count:0,max:0,value:0};this.l={count:0,max:0,value:0};this.m=new uk;this.T=this.s=this.zd=0;this.codec=\"UNKNOWN\";this.hdr=!1;this.bitDepth=8;this.U=!1;this.cc=\"\";this.S=0;this.K=a;this.u=b;this.h=c;this.v={qualityScore:0,bandwidthScore:0,networkLossScore:0,latencyScore:0};a=document.getElementById(\"overlay-543d9968\");\na||(a=document.createElement(\"div\"),a.id=\"overlay-543d9968\",a.style.display=\"none\",a.style.position=\"fixed\",B(this.u)?(a.style.top=\"env(safe-area-inset-top, 0)\",a.style.left=\"max(24px, env(safe-area-inset-left, 0))\"):(a.style.top=\"0\",a.style.left=\"0\"),a.style.padding=\"0.5em\",a.style.backgroundColor=\"rgba(0,0,0,0.5)\",a.style.zIndex=\"300\",a.style.fontSize=\"12px\",a.style.fontFamily=\"monospace\",a.style.color=\"white\",a.style.whiteSpace=\"pre\",a.style.lineHeight=\"100%\",a.style.pointerEvents=\"none\",this.K.insertAdjacentElement(\"afterend\",\na));this.M=a;this.g={tf:!1,rf:!1,yb:!1,kb:!1,yf:0,cd:!1,keyboardLayout:\"\",appLaunchMode:0,qf:\"\"}}};function zk(a){let b=0;0=this.j&&(this.framesDropped=b-this.j,this.j=b);const c=new ArrayBuffer(Fk.size),d=new DataView(c);d.setUint32(0,a.framesDecoded||0,!0);d.setUint32(4,b,!0);d.setUint32(8,a.frameHeight||0,!0);d.setUint32(12,a.frameWidth||0,!0);d.setUint32(16,a.framesReceived||0,!0);d.setFloat64(20,a.jitterBufferDelay||0,\n!0);R(a.jitterBufferEmittedCount||0,d,28,!0);d.setFloat64(36,kf(Q),!0);lf([c],3)}};function Kk(a,b,c,d,e){return new Promise((f,g)=>{window.setTimeout(()=>{a:if(0>=d||0>=e)var h=-1;else{var l=(new OffscreenCanvas(d,e)).getContext(\"2d\");if(l){try{l.drawImage(a,b,c,d,e,0,0,d,e),h=l.getImageData(0,0,d,e).data}catch(m){k.e(\"{0c7ed7c}\",\"{b16b792}\",m);h=-1;break a}var n=l=0;for(let m=0;m{var e=c.presentedFrames,f;if(a.g.length){var g=a.g[a.g.length-1];if(e!==g.presentedFrames)k.d(\"{0c7ed7c}\",\"{06323ea}\",e);else{for(g.fd=d;32a.m)){d=0;\nlet h;const l={presentedFrames:e,td:g.td,presentationTime:g.presentationTime,receiveTime:g.receiveTime,processingDuration:g.processingDuration,Ub:0,Ec:0};for(;a.h.length&&a.h[0].Ub<(null!==(f=g.receiveTime)&&void 0!==f?f:g.presentationTime);)d++,h=a.h.shift();h&&(1b.x||0>b.y||b.x+b.width>a.K.videoWidth||b.y+b.height>a.K.videoHeight?!1:!0}\nfunction Pk(a){const b={isPrimary:!0,pointerId:1,button:0};a.K.dispatchEvent(new PointerEvent(\"pointerdown\",b));a.K.dispatchEvent(new MouseEvent(\"mousedown\"));window.setTimeout(()=>{a.K.dispatchEvent(new PointerEvent(\"pointerup\",b));a.K.dispatchEvent(new MouseEvent(\"mouseup\"))},100)}\nvar Qk=class{constructor(a){this.active=!1;this.m=.06;this.l=new DOMRect(0,0,0,0);this.g=[];this.h=[];this.K=a;this.j=this.v.bind(this)}o(){return this.active}v(a){if(!this.g.length)k.w(\"{0c7ed7c}\",\"{fe08a50}\");else if(!(this.h.length&&100>a.timeStamp-this.h[this.h.length-1].Ub))for(this.h.push({Ub:a.timeStamp,Ec:performance.now()});32{f=parseFloat(f.target.value);var g=a.j;0>=f||1<=f?k.e(\"{0c7ed7c}\",\"{1cbd879}\",f.toFixed(2)):g.m=f;a.S.innerHTML=(100*f).toFixed()+\"%\"};a.ac.oninput=f=>{Xi(a,f.target.checked)};a.s.oninput=f=>{a.U.innerHTML=f.target.value};\na.C.oninput=f=>{a.W.innerHTML=f.target.value+\" ms\"};a.zb.oninput=f=>{a.zb.checked=f.target.checked};const e=(f,g)=>{g.value=Math.max(Math.min(parseInt(f.target.value),100),0).toFixed(0);Zi(a,parseInt(a.Sb.value||\"50\")/100,parseInt(a.Tb.value||\"50\")/100)};a.Sb.oninput=f=>e(f,a.Sb);a.Tb.oninput=f=>e(f,a.Tb);a.H.onclick=()=>Uk(a,\"Start\"===a.H.value);a.h.onclick=()=>Sk(a,\"Show hotkeys\"===a.h.value);a.g.onmouseup=a.P.bind(a);a.g.onmousedown=()=>{a.o()&&Pk(a.j)};ii(a.Z,2,a.$);a.K.addEventListener(c,a.aa);\na.K.addEventListener(d,a.ca)}else Uk(a,!1),a.O.oninput=null,a.ac.oninput=null,a.s.oninput=null,a.C.oninput=null,a.zb.oninput=null,a.Sb.oninput=null,a.Tb.oninput=null,a.H.onclick=null,a.h.onclick=null,a.g.onmouseup=null,a.g.onmousedown=null,a.m.onmousedown=null,ji(a.Z,2,a.$),a.K.removeEventListener(c,a.aa),a.K.removeEventListener(d,a.ca)}}\nfunction Uk(a,b){b&&!Ok(a.j)?Vk(a):b&&a.M?k.e(\"{50c79eb}\",\"{89742e9}\"):(Lk(a.j,b),Rk(a),b?(a.H.value=\"Stop\",a.ac.checked&&(k.i(\"{50c79eb}\",\"{5974b2c}\"),a.M=!0,a.da=parseInt(a.s.value),a.N=window.setInterval(()=>{0{l.preventDefault();c=l.clientX;d=l.clientY;document.onmouseup=()=>{document.onmouseup=g;document.onmousemove=h};document.onmousemove=n=>{n.preventDefault();e=c-n.clientX;f=d-n.clientY;c=n.clientX;d=n.clientY;a.style.top=a.offsetTop-f+\"px\";a.style.left=a.offsetLeft-e+\"px\"}}}function Vk(a){a.R.style.display=\"block\";window.setTimeout(()=>a.R.style.display=\"none\",5E3)}\nfunction Wk(a){window.clearInterval(a.N);a.N=0;a.M=!1}function Xk(a){0!==a.I&&(window.clearTimeout(a.I),a.I=0)}function Yk(a){a.F.innerHTML=\"\";a.F.style.display=\"none\"}function Yi(a){var b;const c=null!==(b=a.processingDuration)&&void 0!==b?b:0;return{pf:a.Ec-a.Ub,Tf:a.receiveTime?a.receiveTime-a.Ec:0,Xe:a.receiveTime&&a.processingDuration?a.presentationTime-a.processingDuration-a.receiveTime:0,decode:c,Pf:a.td-a.presentationTime,total:a.td-a.Ub}}\nfunction Zi(a,b,c){const d=a.K.getBoundingClientRect(),e=a.g.getBoundingClientRect(),{paddingTop:f,paddingRight:g,paddingBottom:h,paddingLeft:l}=$k(a.K);b=d.left+l+(d.width-l-g)*b-e.width*b;a.g.style.top=(d.top+f+(d.height-f-h)*c-e.height*c).toString()+\"px\";a.g.style.left=b.toString()+\"px\";a.P()}\nfunction al(){const a=document.createElement(\"div\");a.style.display=\"none\";a.style.position=\"absolute\";a.style.color=\"white\";a.style.backgroundColor=\"rgb(105, 105, 105, 0.7)\";a.style.padding=\"2px\";return a}function bl(a){const b=document.createElement(\"div\");b.style.width=\"100%\";b.style.borderBottom=\"1px dashed darkgray\";b.style.paddingBottom=\"2px\";b.innerHTML=a;return b}\nfunction cl(a){const b=document.createElement(\"input\");b.type=\"button\";b.value=a;b.style.margin=\"5px\";b.style.backgroundColor=\"rgb(132, 130, 143, .7)\";b.style.color=\"white\";b.style.padding=\"8px 40px\";b.style.border=\"none\";b.style.borderRadius=\"4px\";b.style.cursor=\"pointer\";return b}function dl(){const a=document.createElement(\"input\");a.type=\"checkbox\";return a}function el(a){const b=document.createElement(\"label\");b.innerHTML=a;return b}\nfunction fl(a,b,c,d=1){const e=document.createElement(\"input\");e.type=\"range\";e.min=b.toString();e.max=c.toString();e.step=d.toString();e.value=a.toString();return e}\nfunction gl(a){const b=document.createElement(\"div\"),c=el(\"Loupe Position:\"),d=el(\"X\"),e=el(\"Y\");d.style.paddingLeft=\"10px\";e.style.paddingLeft=\"10px\";d.style.paddingRight=\"2px\";e.style.paddingRight=\"2px\";const f=()=>{const g=document.createElement(\"input\");g.type=\"number\";g.min=\"0\";g.max=\"100\";g.step=\"1\";g.placeholder=\"Int\";g.style.width=\"40px\";return g};a.Sb=f();a.Tb=f();b.appendChild(c);b.appendChild(d);b.appendChild(a.Sb);b.appendChild(el(\"%\"));b.appendChild(e);b.appendChild(a.Tb);b.appendChild(el(\"%\"));\nreturn b}function $k(a){const b=c=>{if(!c)return 0;const d=c.length;if(\"%\"===c.substring(d-1))return parseInt(c.substring(0,d-1));if(\"px\"===c.substring(d-2))return parseInt(c.substring(0,d-2));k.w(\"{50c79eb}\",\"{3351f27}\",c);return 0};return{paddingTop:b(a.style.paddingTop),paddingRight:b(a.style.paddingRight),paddingBottom:b(a.style.paddingBottom),paddingLeft:b(a.style.paddingLeft)}}\nvar hl=class{constructor(a,b){this.Z=b;this.visible=!1;this.ec=[];this.M=!1;this.da=this.N=0;this.T={x:0,y:0};this.I=0;this.K=a;this.j=new Qk(a);this.$=this.ga.bind(this);this.aa=this.fa.bind(this);this.ca=this.onmousemove.bind(this);b=al();var c=bl(\"Latency Display Analysis Tool (LDAT)\");this.H=cl(\"Start\");this.h=cl(\"Show hotkeys\");b.style.bottom=\"0px\";b.style.left=\"0px\";b.style.margin=\"5px\";this.h.style.border=\"1px solid white\";this.h.style.fontSize=\"10px\";this.h.style.padding=\"5px\";this.h.style.position=\n\"absolute\";this.h.style.right=\"0px\";b.appendChild(c);b.appendChild(this.H);b.appendChild(this.h);c=b.appendChild;var d=document.createElement(\"div\"),e=this.j.m;this.O=fl(e,.01,.2,.01);this.S=document.createElement(\"span\");var f=el(\"Activation Level\"),g=document.createElement(\"span\");this.S.innerHTML=(100*e).toFixed()+\"%\";g.style.paddingRight=\"2px\";g.title=\"% increase in luminance used to determine whether a flash occurred\";g.innerHTML=\" i \";d.appendChild(f);d.appendChild(g);d.appendChild(this.O);\nd.appendChild(this.S);c.call(b,d);c=b.appendChild;d=document.createElement(\"div\");this.l=document.createElement(\"div\");this.ac=dl();this.s=fl(20,5,100,5);this.C=fl(1E3,500,5E3,100);e=el(\"Autofire\");f=el(\"# Shots\");g=el(\"Shot Delay\");this.U=document.createElement(\"span\");this.W=document.createElement(\"span\");this.U.innerHTML=this.s.value;this.W.innerHTML=this.C.value+\" ms\";this.s.id=\"shot-count-slider\";this.l.appendChild(f);this.l.appendChild(this.s);this.l.appendChild(this.U);this.l.appendChild(document.createElement(\"br\"));\nthis.l.appendChild(g);this.l.appendChild(this.C);this.l.appendChild(this.W);d.appendChild(e);d.appendChild(this.ac);d.appendChild(this.l);c.call(b,d);b.appendChild(gl(this));this.zb=dl();c=document.createElement(\"span\");c.title=\"Simulate mouse move event whenever a mouse click is detected. Introduces two 300 ms delays between move events and requires a minimum shot delay of 1 sec.\";c.innerHTML=\" i \";b.appendChild(el(\"Move On Click\"));b.appendChild(c);b.appendChild(this.zb);this.L=b;b=\nal();c=bl(\"Loupe\");this.m=document.createElement(\"div\");this.m.style.cursor=\"move\";this.m.style.width=\"100%\";this.m.style.height=\"100%\";this.m.innerHTML=\"Click here to drag the loupe to the area of the screen where flashes will occur. Then, press start.\";b.appendChild(c);b.appendChild(this.m);this.g=b;b=al();b.style.position=\"relative\";b.style.backgroundColor=\"gray\";b.style.textAlign=\"center\";b.innerHTML=\"Warning: Must place loupe over video element to activate the LDAT. Please reposition the loupe and then click start.\";\nthis.R=b;b=al();c=bl(\"LDAT Hot Keys\");d=document.createElement(\"ul\");b.style.bottom=\"195px\";b.style.left=\"0px\";b.style.margin=\"5px\";d.style.listStyle=\"none\";d.style.paddingLeft=\"2px\";d.style.margin=\"5px\";for(var h of[\"Enter - Start/Stop\",\"R - Reset\",\"A - Turn On/Off Auto-Fire Mode\",\"S - Save Log File\",\"C - Center Loupe on Screen\"])e=document.createElement(\"li\"),e.innerHTML=h,d.append(e);b.appendChild(c);b.appendChild(d);this.v=b;h=al();h.style.bottom=\"325px\";h.style.left=\"0px\";h.style.margin=\"5px\";\nthis.F=h;a.insertAdjacentElement(\"afterend\",this.L);this.L.insertAdjacentElement(\"afterend\",this.g);this.g.insertAdjacentElement(\"afterend\",this.R);this.L.insertAdjacentElement(\"beforebegin\",this.v);this.v.insertAdjacentElement(\"beforebegin\",this.F);this.j.s=this.ea.bind(this);Xi(this,!1);this.zb.checked=!1;Rk(this,!0)}stop(){this.L.remove();this.g.remove();this.R.remove();this.v.remove();this.F.remove();Ri(this,!1);this.ec=[]}reset(){Uk(this,!1);Zk(this.O,.06);Zk(this.s,20);Zk(this.C,1E3);Xi(this,\n!1);this.zb.checked=!1;Rk(this,!0);Sk(this,!1);this.Sb.value=\"\";this.Tb.value=\"\";this.ec=[]}isVisible(){return this.visible}toggle(){Uk(this,!this.o())}o(){return this.j.o()}Db(){return!this.isVisible()||this.o()}fa(a){if(this.zb.checked&&this.o()&&!a.gf){const b=(e,f)=>{switch(e){case 0:this.K.dispatchEvent(new PointerEvent(\"pointerup\",f));this.K.dispatchEvent(new MouseEvent(\"mouseup\",f));break;case 1:e=new PointerEvent(\"pointerdown\",f);f=new MouseEvent(\"mousedown\",f);e.gf=!0;f.gf=!0;this.K.dispatchEvent(e);\nthis.K.dispatchEvent(f);break;case 2:this.K.dispatchEvent(new PointerEvent(\"pointerrawupdate\",f)),this.K.dispatchEvent(new PointerEvent(\"pointermove\",f)),this.K.dispatchEvent(new MouseEvent(\"mousemove\",f))}},c={button:2,isPrimary:!0,pointerId:1},d={clientX:(Math.max(a.clientX,0)||this.T.x)+64,clientY:Math.max(a.clientY,0)||this.T.y,movementX:64,isPrimary:!0};b(1,c);window.setTimeout(()=>{b(2,d);window.setTimeout(()=>{d.clientX-=64;d.movementX=-64;b(2,d);window.setTimeout(()=>b(0,c),300)},300)},300)}}onmousemove(a){this.T=\n{x:a.clientX,y:a.clientY}}P(){var a=this.K.getBoundingClientRect();const b=this.g.getBoundingClientRect();if(this.K.style.paddingTop||this.K.style.paddingRight||this.K.style.paddingBottom||this.K.style.paddingLeft){const {paddingTop:c,paddingRight:d,paddingBottom:e,paddingLeft:f}=$k(this.K);a.x+=f;a.y+=c;a.width-=f+d;a.height-=c+e}b.x=(b.x-a.x)/a.width;b.y=(b.y-a.y)/a.height;b.width/=a.width;b.height/=a.height;a=this.j;0>=b.width||0>=b.height?k.e(\"{0c7ed7c}\",\"{3e0eb8f}\",b.width,b.height):a.l=b}ga(){this.P()}ea(a){Xk(this);\nthis.ec.push(a);const b=Yi(a),c=b.total.toFixed(),d=`Flash occurred at frame ${a.presentedFrames}. Latency: ${c} ms.`;k.i(\"{50c79eb}\",\"{78905f8}\",a.presentedFrames,c);k.d(\"{50c79eb}\",\"{d3d4a0c}\",c,b.pf.toFixed(),b.Tf.toFixed(),b.Xe.toFixed(),b.decode.toFixed(),b.Pf.toFixed());this.F.innerHTML=d;this.F.style.display=\"block\";this.I=window.setTimeout(()=>{Yk(this);this.I=0},5E3)}};var il=class extends Map{constructor(){super([[\"TCP\",0],[\"MDNS\",0],[\"IPV6\",0],[\"IPV4\",0],[\"UNKNOWN\",0]])}};\nfunction jl(a){a.O=a.C.createDataChannel(\"stats_channel\",{ordered:!1,reliable:!1,maxRetransmits:0});a.O.binaryType=\"arraybuffer\";kl(a.Ba,a.O,{open:()=>{a.U=1},close:()=>{ll(a);a.U=2}});a.O.onmessage=b=>{b=new DataView(b.data);var c=b.getUint8(0);if(2<=c){a.W=b.getFloat64(1,!0)/1E6;a.jitter=1E3*b.getFloat64(9,!0);a.rtd=b.getFloat64(17,!0);a.g.H=a.jitter;a.g.rtd=a.rtd;if(3<=c&&(a.fa=b.getFloat64(25,!0),a.g.avgGameFps=a.fa,4<=c)){c=b.getFloat32(33,!0);var d=b.getFloat32(37,!0),e=b.getFloat32(41,!0);\nlet f=b.getFloat32(45,!0),g=b.getFloat32(49,!0),h=b.getFloat32(53,!0),l=b.getFloat32(57,!0),n=b.getFloat32(61,!0),m=b.getFloat32(65,!0);b=b.getFloat32(69,!0);k.d(\"{5cea617}\",\"{9721183}\",c,d,e,f,g,h,l,n,m,b)}b=a.L;c=a.W;d=a.g;(e=a.W)&&d.o<=e&&(d.Ob=d.o/e*100);d.F=e;e=100;25<=d.Ob&&(e=(c-b.g)/(b.maxBitrate-b.g)*100);100e||(b.bandwidthScore=15*b.bandwidthScore/16+e/16,b.bandwidthScore=Math.min(b.bandwidthScore,100));b=a.L;c=a.rtd;d=0;250>c&&(d=100*(250-c)/240,void 0===\nd||isNaN(d))&&(d=0);b.latencyScore=15*b.latencyScore/16+d/16;b.latencyScore=Math.min(b.latencyScore,100)}else k.e(\"{5cea617}\",\"{4f9f4b7}\",c)}}function ml(a){var b,c,d,e;a.m=window.setInterval(()=>{nl(a)},null!==(b=P.getStatsInterval)&&void 0!==b?b:96);window.chrome&&(a.F=window.setInterval(()=>{ol(a)},null!==(c=P.getDeprecatedStatsInterval)&&void 0!==c?c:201));null===(e=(d=a.K).requestVideoFrameCallback)||void 0===e?void 0:e.call(d,a.sa)}\nfunction pl(a,b){var c=performance.now();if(c>=a.$&&\"video\"===a.mediaType){ql(a,b);var d=a.g,e=a.Ba,f,g,h,l,n,m,p,r;var t=e.K.paused;var v=null!==(g=null===(f=e.Ea)||void 0===f?void 0:f.paused)&&void 0!==g?g:!1;f=null!==(l=null===(h=e.m)||void 0===h?void 0:h.yb())&&void 0!==l?l:!1;h=null!==(m=null===(n=e.m)||void 0===n?void 0:n.kb)&&void 0!==m?m:!1;n=e.Da.getMicState();m=e.s.cd();l=e.keyboardLayout;g=e.appLaunchMode;null===(p=e.m)||void 0===p?e=void 0:(e=p.h,e=`${e.g.rb?\"local\":\"alt\"} ${Eh(e)?\"locked\":\n\"unlocked\"}`);t={tf:t,rf:v,yb:f,kb:h,yf:n,cd:m,keyboardLayout:l,appLaunchMode:g,qf:null!==(r=e)&&void 0!==r?r:\"\"};d.g=t;rl(a,b);0!==a.M&&xk(a.g,2===a.M);d=a.g;var q;r={avgGameFps:null!==(q=d.avgGameFps)&&void 0!==q?q:0,fps:d.fps,rtd:d.rtd,avgDecodeTime:1E3*tk(d.m),frameLoss:d.s-d.T,packetLoss:d.N,totalBandwidth:d.F,utilizedBandwidth:d.Ob,streamingResolution:d.streamingResolution,codec:d.codec,bitDepth:d.bitDepth};d.T=d.s;a.R.emit(\"StreamStatsUpdate\",r);a.j=b;a.$=c+1E3}for(const [w,x]of a.P.entries()){q=\nw;d=x;for(var u of d)if(d=b.get(u))switch(q){case \"inbound-rtp\":if(r=a.o,d=sl(a,b,d),\"audio\"===d.kind)r=d,t=new ArrayBuffer(Dk.size),v=new DataView(t),R(r.packetsReceived||0,v,0,!0),R(r.bytesReceived||0,v,8,!0),R(r.packetsLost||0,v,16,!0),v.setFloat64(24,r.lastPacketReceivedTimestamp||0,!0),v.setFloat64(32,r.jitter||0,!0),v.setFloat64(40,kf(Q),!0),lf([t],2),r=new ArrayBuffer(Ek.size),t=new DataView(r),t.setFloat64(0,d.audioLevel||0,!0),R(d.concealedSamples||0,t,8,!0),R(d.concealmentEvents||0,t,16,\n!0),R(d.insertedSamplesForDeceleration||0,t,24,!0),t.setFloat64(32,d.jitterBufferDelay||0,!0),R(d.jitterBufferEmittedCount||0,t,40,!0),R(d.removedSamplesForAcceleration||0,t,48,!0),R(d.silentConcealedSamples||0,t,56,!0),t.setFloat64(64,d.totalSamplesReceived||0,!0),t.setFloat64(72,d.totalSamplesDuration||0,!0),t.setFloat64(80,kf(Q),!0),lf([r],4);else if(t=d,v=t.packetsLost||0,e=t.framesDecoded||0,p=t.totalDecodeTime||0,f=t.pliCount||0,h=r,n=v,m=e,l=p,g=f,n>=h.o&&(h.C=n-h.o,h.o=n),g>=h.l&&(h.pliCount=\ng-h.l,h.l=g),h.framesDecoded=m-h.s,0h.m&&(h.v=1E3*(l-h.m)/h.framesDecoded,h.s=m,h.m=l),h=new ArrayBuffer(Ck.size),n=new DataView(h),n.setUint32(0,e,!0),n.setUint32(4,t.keyFramesDecoded||0,!0),n.setUint32(8,t.nackCount||0,!0),n.setInt32(12,v,!0),n.setInt32(16,f,!0),R(t.bytesReceived||0,n,20,!0),R(t.packetsReceived||0,n,28,!0),n.setFloat64(36,p,!0),n.setFloat64(44,t.totalInterFrameDelay||0,!0),n.setFloat64(52,t.totalSquaredInterFrameDelay||0,!0),n.setFloat64(60,t.totalAssemblyTime||\n0,!0),n.setUint32(68,t.framesAssembledFromMultiplePackets||0,!0),n.setFloat64(72,kf(Q),!0),lf([h],1),r.sendVideoTrack(d),d.perFrameEntries){d=JSON.parse(d.perFrameEntries);t=[];v=r.h;for(e=0;er.h&&(p=new ArrayBuffer(Hk.size),f=new DataView(p),f.setUint32(0,d[e].frameNumber,!0),f.setFloat64(4,d[e].decodeTime,!0),f.setFloat64(12,d[e].assemblyTime,!0),t.push(p)),v=Math.max(v,d[e].frameNumber);r.h=v;0=a.na&&a.Z&&(b=a.Z,u=new ArrayBuffer(15),q=new DataView(u),q.setUint8(0,2),q.setUint8(1,1),q.setUint8(2,1),q.setUint32(3,b.Eg,!0),q.setFloat64(7,b.client,\n!0),tl(a,u,\"rtpmapping\"),a.Z=void 0,a.na=c+1E3);\"video\"===a.mediaType&&(Ff(a.u)&&(b=new ArrayBuffer(12),u=new DataView(b),u.setUint8(0,1),u.setUint8(1,1),u.setUint16(2,a.o.C,!0),u.setUint16(4,Math.round(a.o.v),!0),u.setUint16(6,a.o.framesDecoded,!0),u.setUint16(8,a.o.pliCount,!0),u.setUint16(10,a.o.framesDropped,!0),tl(a,b,\"clientperf\")),b=ej(a.L),a.g.v=b,u=ej(a.L),a.R.emit(\"StreamingQuality\",u),a.xa&&(b=a.g,a.R.emit(\"StreamingStats\",{fps:b.fps,zd:b.zd,avgDecodeTime:1E3*tk(b.m),Rg:b.F,Ob:b.Ob,width:b.streamingResolution.width,\nheight:b.streamingResolution.height})),b=Q,b.h&&(u={sq:{latencyScore:u.latencyScore,bandwidthScore:u.bandwidthScore,qualityScore:u.qualityScore,networkLossScore:u.networkLossScore,timestamp:kf(b)}},b.g&&b.g.postMessage(u)));c>=a.ka&&(b=a.g,k.i(\"{4155ac9}\",\"{a02a36e}\",b.C,(1E3*tk(b.m)).toFixed(2),b.I,b.H.toFixed(2),b.s,b.rtd,b.o.toFixed(2),b.Ob.toFixed(2)),a.ka=c+5E3);c=performance.now()-c;b=Q;b.h&&(b.perf.GetStats+=c);b=a.g;b.l.value+=c;b.l.count+=1;b.l.max=Math.max(c,b.l.max);a.wa&&(a.mediaType=\n\"video\"===a.mediaType?\"audio\":\"video\")}function ul(a,b,c){a.G.za(b,`Exception in ${c} getStats`,\"{5cea617}.ts\",0,0,!0,\"getStats\")}\nfunction vl(a){a.C.getStats(null).then(b=>{let c=!1;for(let d of b.values())if(\"track\"===d.type&&(c=!0),[\"transport\",\"inbound-rtp\",\"candidate-pair\"].includes(d.type)){\"audio\"===d.kind&&(a.wa=!0);const e=a.P.get(d.type);e?e.includes(d.id)?k.e(\"{5cea617}\",\"{76f5968}\",d.id):e.push(d.id):a.P.set(d.type,[d.id])}a.aa=!c;k.i(\"{5cea617}\",\"{1317761}\",a.aa?\"yes\":\"no\");a.ga=!0;a.j=b;pl(a,b)}).catch(b=>ul(a,b,\"init\")).finally(()=>{a.I=!1})}\nfunction ll(a){a.m&&(clearInterval(a.m),a.m=0);a.F&&(clearInterval(a.F),a.F=0);Ik(a.o)}function nl(a){if(!a.I)if(a.I=!0,0===a.U)a.C.getStats().then(b=>{a.j=b}).catch(b=>ul(a,b,\"early\")).finally(()=>{a.I=!1});else if(1===a.U)if(a.ga){const b=a.C.getReceivers().find(c=>c.track.kind===a.mediaType&&c.track.enabled);b&&b.getStats().then(c=>pl(a,c)).catch(c=>ul(a,c,\"standard\")).finally(()=>{a.I=!1})}else vl(a);else a.I=!1}\nfunction ol(a){if(!a.T){a.T=!0;var b=()=>{k.i(\"{5cea617}\",\"{cf8b53f}\");a.T=!1;clearInterval(a.F);a.F=0};a.C.getStats(c=>{for(var d of c.result())if(\"ssrc\"==d.type)for(var e of d.names()){\"video\"===d.stat(\"mediaType\")&&(a.H.ts=kf(Q),a.H.timingFrameInfo=d.stat(\"googTimingFrameInfo\"),a.H.targetDelayMs=+d.stat(\"googTargetDelayMs\"),a.H.minPlayoutDelayMs=+d.stat(\"googMinPlayoutDelayMs\"),a.H.currentDelayMs=+d.stat(\"googCurrentDelayMs\"));break}c=a.H;d=c.timingFrameInfo.split(\",\",15);if(!(15>d.length)){e=\nnew ArrayBuffer(Bk.size);var f=new DataView(e);f.setUint32(0,c.targetDelayMs||0,!0);f.setUint32(4,c.minPlayoutDelayMs||0,!0);f.setUint32(8,c.currentDelayMs||0,!0);f.setFloat64(12,kf(Q),!0);f.setFloat64(20,parseFloat(d[3])||0,!0);f.setFloat64(28,parseFloat(d[4])||0,!0);f.setFloat64(36,parseFloat(d[8])||0,!0);f.setFloat64(44,parseFloat(d[9])||0,!0);f.setFloat64(52,parseFloat(d[10])||0,!0);f.setFloat64(60,parseFloat(d[11])||0,!0);f.setUint8(68,parseFloat(d[13])||0);f.setUint8(69,parseFloat(d[14])||0);\nlf([e],0)}a.T=!1},b).catch(b)}}\nfunction wl(a){var b=Q;if(b.h){if(0!=b.perf.RAFTS){var c={perf:b.perf};b.g&&b.g.postMessage(c);gf(b)}b.perf.RAFTS=kf(b)}if(!Ad){b=window.performance.now();c=a.va;if(c.getVideoPlaybackQuality){var d=c.getVideoPlaybackQuality();c={Ad:d.totalVideoFrames,bf:d.droppedVideoFrames}}else c=void 0!==c.webkitDecodedFrameCount?{Ad:c.webkitDecodedFrameCount,bf:null!==(d=c.webkitDroppedFrameCount)&&void 0!==d?d:0}:void 0;var e=c;if(e){const f=e.bf;d=f-a.v.droppedVideoFrames;c=e.Ad-a.v.totalVideoFrames;a.v.droppedVideoFrames=\nf;a.v.totalVideoFrames=e.Ad;1==d?a.V.Wd++:1b.get(f)).find(f=>f)){6<=a.s.length&&a.s.splice(0,1);a.s.push(d);var e=null===(c=a.j)||void 0===c?void 0:c.get(d.id);e&&vk(a.g,d,e)}}\nfunction sl(a,b,c){a.aa||(a=b.get(c.trackId))&&(c=Object.assign(a,c));return c}\nfunction ql(a,b){var c,d,e,f=a.P.get(\"inbound-rtp\");if(f&&a.j)if(f=f.map(h=>b.get(h)).find(h=>\"video\"===(null===h||void 0===h?void 0:h.kind)||\"video\"===(null===h||void 0===h?void 0:h.mediaType))){f=sl(a,b,f);var g=f.decoderImplementation;if(null===g||void 0===g?0:g.indexOf){g!==a.h.cc&&\"unknown\"!==g&&(a.h.cc=g,a.g.cc=g);const h=-1!==a.u.gpuDetail.indexOf(\"SwiftShader\");-1===g.indexOf(\"fallback\")&&\"FFmpeg\"!==g&&!h||-1!==a.h.zc||(a.h.zc=null!==(c=f.framesDecoded)&&void 0!==c?c:a.l,mf(),c=\"Fallback to software decode at frame \"+\nString(a.h.zc),k.i(\"{5cea617}\",\"{953d211}\",String(a.h.zc)),a.g.U=!0,yl(a.Ba,c))}if(c=a.j.get(f.id)){a.h.bc.Zf++;if(g=f.codecId)g=b.get(g).mimeType.toUpperCase(),g.includes(\"H265\")?a.N=\"H265\":g.includes(\"AV1\")?a.N=\"AV1\":g.includes(\"H264\")?a.N=\"H264\":(k.d(\"{5cea617}\",\"{4b31535}\",g),a.N=\"UNKNOWN\"),a.g.codec=a.N;dj(a.L,f,c);wk(a.g,f);a.l=null!==(d=f.framesDecoded)&&void 0!==d?d:0;a.ta=null!==(e=f.packetsReceived)&&void 0!==e?e:0;zl(a)}else a.h.bc.Hf++}else a.h.bc.af++}\nasync function zl(a){const b={width:screen.width*window.devicePixelRatio,height:screen.height*window.devicePixelRatio},c={width:screen.width,height:screen.height},d=a.l,e=a.ua.m;var f=a.oa;(f=!(b.width===f.width&&b.height===f.height))||(f=a.ja,f=!(c.width===f.width&&c.height===f.height));if(f||e!==a.ca){a.oa=b;a.ja=c;f=await ek(dk);a.ca=e;var g=`Stream[0]: Client display[-1] resolution : {physical : ${Kf(b)}@${f}, logical : ${Kf(c)}@${f}} at frame#${d} topology: ${e}`;k.i(\"{5cea617}\",\"{810d0ec}\",\nKf(b),f,Kf(c),f,d,e);yl(a.Ba,g)}}function tl(a,b,c){try{\"open\"===a.O.readyState&&a.O.send(b)}catch(d){k.e(\"{5cea617}\",\"{78e74c5}\",d),ul(a,d,c)}}function Al(a){if(!(2>a.s.length)){var b=a.s[0],c=a.s[a.s.length-1];a=c.requestsSent-b.requestsSent+c.consentRequestsSent-b.consentRequestsSent;var d=c.responsesReceived-b.responsesReceived;b=c.packetsReceived-b.packetsReceived;return{Mf:isNaN(a)?-1:a,Nf:isNaN(d)?-1:d,Lf:isNaN(b)?-1:b}}}\nfunction Bl(a){let b=new il;if(!a.j)return b;for(const c of a.j.values())\"local-candidate\"===c.type&&(a=Cl(c),b.set(a,b.get(a)+1));return b}function Dl(a){let b=new Set;if(!a.j)return b;for(const c of a.j.values())\"local-candidate\"===c.type&&(a=c,\"IPV4\"===Cl(a)&&(a=El(a),\"UNKNOWN\"!==a&&b.add(a)));return b}\nvar Fl=class{constructor(a,b,c,d,e,f,g,h,l,n){var m,p,r,t,v,q,u,w,x;this.pa=!0;this.l=this.ta=this.F=this.m=0;this.N=\"UNKNOWN\";this.ga=!1;this.P=new Map;this.fa=this.rtd=this.jitter=this.W=0;this.mediaType=\"video\";this.qa=this.ra=this.$=this.M=0;this.s=[];this.ja={width:0,height:0};this.oa={width:0,height:0};this.aa=this.T=this.I=!1;this.ca=this.ka=this.U=this.na=0;this.R=a;this.Ba=b;this.K=c;this.C=d;this.Cc=null!==(p=null===(m=e.video)||void 0===m?void 0:m[0].Cc)&&void 0!==p?p:!1;this.maxBitrate=\nnull!==(t=null===(r=e.video)||void 0===r?void 0:r[0].Dc)&&void 0!==t?t:0;this.da=null!==(q=null===(v=e.video)||void 0===v?void 0:v[0].gd)&&void 0!==q?q:0;this.bitDepth=null!==(w=null===(u=e.video)||void 0===u?void 0:u[0].bitDepth)&&void 0!==w?w:8;this.hdr=1===(null===(x=e.video)||void 0===x?void 0:x[0].Xc);this.G=f;this.u=g;this.ea=h;this.ua=l;this.H={ts:0,timingFrameInfo:\"\",targetDelayMs:0,minPlayoutDelayMs:0,currentDelayMs:0};this.L=new fj(this.maxBitrate,this.da);this.g=new Ak(c,this.u,this.ea);\nthis.g.bitDepth=this.bitDepth;this.g.hdr=this.hdr;be&&(this.S=new hl(c,l));this.C=d;jl(this);this.xa=this.R.hasListener(\"StreamingStats\");this.o=new Jk;this.h={bc:{af:0,Hf:0,Zf:0},cc:\"\",zc:-1};this.v={Ag:0,droppedVideoFrames:0,totalVideoFrames:0};this.va=c;this.V=n;this.sa=this.ya.bind(this);ml(this)}ya(a,b){var c,d,e,f=this.o,g,h,l=null!==(g=b.receiveTime)&&void 0!==g?g:0;g=b.presentationTime-l;l=1E3*(null!==(h=b.processingDuration)&&void 0!==h?h:0);h=b.presentationTime;h=void 0!==h?h-Q.j:0;const n=\nnew ArrayBuffer(Gk.size),m=new DataView(n);m.setFloat64(0,h,!0);m.setUint16(8,Math.min(100*g,65535),!0);m.setUint16(10,Math.min(100*l,65535),!0);f.g.push(n);120==f.g.length&&Ik(f);(null===(c=this.S)||void 0===c?0:c.o())&&Nk(this.S.j,a,b);this.Cc&&b.rtpTimestamp&&b.receiveTime&&(this.Z={Eg:b.rtpTimestamp,client:b.receiveTime-Q.j});0!=this.m&&(null===(e=(d=this.K).requestVideoFrameCallback)||void 0===e?void 0:e.call(d,this.sa))}reset(){ll(this);this.L=new fj(this.maxBitrate,this.da);this.g=new Ak(this.K,\nthis.u,this.ea);this.j=void 0}stop(){var a;this.pa&&(this.pa=!1,0!=this.m&&(this.reset(),xl(this,!1)),null===(a=this.S)||void 0===a?void 0:a.stop(),X(this.G,\"InboundVideoStats\",this.h.cc,this.h.bc.Zf,this.h.bc.af,this.h.zc,this.h.bc.Hf))}toggleOnScreenStats(a,b){xl(this,null!==b&&void 0!==b?b:0===this.M,a)}packetsReceived(){return this.ta}};function Cl(a){return\"tcp\"===a.protocol?\"TCP\":(a=a.address||a.relatedAddress)?a.endsWith(\".local\")?\"MDNS\":-1!==a.indexOf(\":\")?\"IPV6\":\"IPV4\":\"UNKNOWN\"}\nfunction El(a){a=a.address||a.relatedAddress;var b=null===a||void 0===a?void 0:a.split(\".\");if(4===(null===b||void 0===b?void 0:b.length)&&(a=parseInt(b[0]),b=parseInt(b[1]),!isNaN(a)&&!isNaN(b))){let c=\"UNKNOWN\";10===a?c=\"10/8\":192===a&&168===b?c=\"192.168/16\":172===a&&16===(b&240)&&(c=\"172.16/12\");\"UNKNOWN\"!==c&&k.d(\"{5cea617}\",\"{343589d}\",c);return c}k.i(\"{5cea617}\",\"{fa2d6b9}\");return\"UNKNOWN\"};function Gl(a,b=!1){const c=a.m+1;try{let d;a.sessionId&&(d=\"x-nv-sessionid.\"+a.sessionId);let e=a.url;b&&(e+=\"&reconnect=1\");let f=new WebSocket(e,d);f.onopen=()=>{var g;a.h(\"{48fa30b}\"+c);if(f===a.g){null===(g=a.j)||void 0===g?void 0:pf(g);for(const h of a.l)h.stats?f.send(h.stats):f.send(JSON.stringify(h));for(const h of a.s)Hl(a,h);a.s=[]}};f.onclose=g=>{var h;a.h(\"{6406bff}\"+c);f===a.g&&(null===(h=a.j)||void 0===h?void 0:nf(h,{error:a.v,code:g.code,reason:g.reason,wasClean:g.wasClean}),Il(a),\na.v=!1)};f.onerror=()=>{a.h(\"{7605058}\"+c);f===a.g&&(a.v=!0)};f.onmessage=g=>{if(a.j)try{let l=JSON.parse(g.data);a.o||a.h(\"{523f5b9}\");Jl(a);if(!l.hb){if(void 0!==l.ack){var h=l.ack;for(let n=a.l.length-1;0<=n;n--)a.l[n].ackid<=h&&a.l.splice(n,1)}if(void 0!==l.ackid){if(a.maxReceivedAckId{var b;a.h(\"{6c3505a}\"+(null===(b=a.g)||void 0===b?void 0:b.readyState)+\"{754f60b}\"+a.m);a.g||Gl(a,!0);Jl(a)},3E3)}\nfunction Hl(a,b){void 0!==b.ackid&&void 0!==b.ackid&&a.l.push(b);a.g&&(b.stats?a.g.send(b.stats):a.g.send(JSON.stringify(b)))}\nvar Ll=class{constructor(a,b){this.sessionId=a;this.v=!1;this.l=[];this.s=[];this.maxReceivedAckId=this.o=0;this.url=\"\";this.m=0;this.h=b.info;this.C=b.exception}initialize(a,b,c,d=!1){this.url=a;this.maxReceivedAckId=b;this.j=c;Gl(this,d);this.h(\"{fcf6f89}\"+this.m)}uninitialize(a){var b;this.maxReceivedAckId=0;this.l=[];this.s=[];this.j=void 0;Kl(this);null===(b=this.g)||void 0===b?void 0:b.close(a);Il(this);this.h(\"{986b258}\"+a+\"{754f60b}\"+this.m)}send(a){this.j&&(this.g||Gl(this,!0),this.g&&this.g.readyState===\nWebSocket.OPEN?Hl(this,a):this.s.push(a))}};function Ml(a){switch(a){case \"H264\":return\"h264\";case \"H265\":return\"hevc\";case \"AV1\":return\"av1\";default:return\"video\"}}\nfunction Nl(a,b,c){const {readable:d,writable:e}=b.createEncodedStreams();b=new TransformStream({start:()=>{k.i(\"{d7392d2}\",\"{b96b3ec}\",c.Pd)},flush:()=>{},transform:(f,g)=>{if(!c.sf){const m=new Uint8Array(f.data);if(c.size+m.byteLength<=c.data.byteLength){var h=c.data,l=c.size,n=m;const p=n.byteLength;for(let r=0;r{var c,d;return\"video\"===(null===(d=null===(c=b.receiver)||void 0===c?void 0:c.track)||void 0===d?void 0:d.kind)}))){const b={data:new DataView(new ArrayBuffer(209715200)),size:0,Pd:\"video\",lg:Ml(this.h),sf:!1};Nl(this,a.receiver,b)}}};function yi(a){a.g&&(a.j=!a.j,a.g.style.display=a.j?\"block\":\"none\")}\nfunction Pl(a,b){let {width:c,height:d}={width:screen.width,height:screen.height};var e=()=>{let h;void 0!==window.orientation?h=window.orientation:screen.orientation&&(h=screen.orientation.angle);switch(h){case 90:case -90:case 270:return!1;default:return!0}};B(a.u)&&(b.top=Math.max(b.top,20),e()||(e=c,c=d,d=e));e=(h=>{let l=h.offsetTop,n=h.offsetLeft;for(var m=h.offsetParent;m;)l+=m.offsetTop,n+=m.offsetLeft,m=m.offsetParent;m=h.clientHeight;let p=h.clientWidth;\"Android\"===a.u.os&&(window.innerHeight>\nwindow.innerWidth&&h.clientHeighth.clientWidth)&&(k.w(\"{48f82fd}\",\"{c9d343e}\"),m=h.clientWidth,p=h.clientHeight);return{top:l,left:n,bottom:Math.max(window.innerHeight-l-m,0),right:Math.max(window.innerWidth-n-p,0)}})(a.K);const f=Math.max(d-window.innerHeight,0)/2,g=Math.max(c-window.innerWidth,0)/2;return{top:Math.max(b.top-f-e.top-a.Ra,0)/(a.K.clientHeight-2*a.Ra),left:Math.max(b.left-g-e.left-a.Xa,0)/(a.K.clientWidth-2*a.Xa),\nbottom:Math.max(b.bottom-f-e.bottom-a.Ra,0)/(a.K.clientHeight-2*a.Ra),right:Math.max(b.right-g-e.right-a.Xa,0)/(a.K.clientWidth-2*a.Xa)}}\nvar Ql=class{constructor(a,b,c,d){this.l=a;this.K=b;this.u=c;this.G=d;this.h={top:-1,left:-1,bottom:-1,right:-1};this.Xa=this.Ra=0;this.j=!1;this.m=0;be&&(a=document.createElement(\"div\"),a.style.display=\"none\",a.style.position=\"absolute\",a.style.color=\"white\",a.style.backgroundColor=\"rgb(105, 105, 105, 0.7)\",a.style.padding=\"2px\",a.style.bottom=\"0px\",a.style.left=\"0px\",a.style.margin=\"5px\",this.g=a,b.insertAdjacentElement(\"afterend\",this.g))}uninitialize(){this.g&&this.g.remove()}send(){var a,b,c;\nif(!(0>=this.K.videoHeight||0>=this.K.videoWidth)){var d=xf(),e=Pl(this,d);if(!Mf(e,this.h)){var f=JSON.stringify(e,(g,h)=>h.toFixed?Number(h.toFixed(2)):h);k.d(\"{48f82fd}\",\"{054b8b0}\",JSON.stringify(d),f);null!==(a=P.sendInsetValueUpdateEvents)&&void 0!==a&&a&&2>this.m++&&(a=(g,h=1)=>{for(const l of Object.keys(g)){const n=Math.round(g[l]*h);g[l]=isNaN(n)?-1:n}return g},d=a(Object.assign({},d)),a=a(Object.assign({},e),1E3),null===(b=this.G)||void 0===b?void 0:X(b,\"InsetValueUpdate\",\"Original\",d.top,\nd.left,d.bottom,d.right),null===(c=this.G)||void 0===c?void 0:X(c,\"InsetValueUpdate\",\"Normalized\",a.top,a.left,a.bottom,a.right));this.h=Object.assign({},e);for(const g of Object.keys(e))e[g]=isNaN(e[g])?0:e[g];b={messageType:\"SAFE_ZONE\",messageRecipient:\"NvGridSvc:NGS\",data:JSON.stringify({safeZoneData:{type:\"InsetValueUpdate\",rect:e}})};this.l.sendCustomMessage(b);be&&this.g&&(this.g.innerText=\"Safe Zone: \\nTop: \"+(100*Math.max(this.h.top,0)).toFixed()+\"%\\nRight: \"+(100*Math.max(this.h.right,0)).toFixed()+\n\"%\\nBottom: \"+(100*Math.max(this.h.bottom,0)).toFixed()+\"%\\nLeft: \"+(100*Math.max(this.h.left,0)).toFixed()+\"%\")}}}};function ii(a,b,c){a.g.get(b).push(c)}function ji(a,b,c){a=a.g.get(b);c=a.indexOf(c);-1!==c&&a.splice(c,1)}function ni(a,b){a.U&&Rl(a,b);if(a.h!==b){a.h=b;for(const c of a.g.get(0))c(b)}}function Sl(a,b){if(a.C!==b){a.C=b;for(const c of a.g.get(3))c(b)}}function Tl(a,b){if(a.s!==b){a.s=b;for(const c of a.g.get(4))c(b)}}function Ul(a,b){return a.T?.22>=b.level:a.Z?.2>=b.level:a.W?.1>=b.level:.33>=b.level}\nfunction Vl(){var a,b;return $d&&(null!==(a=P.enableComputePressure)&&void 0!==a?a:!1)&&(null===(b=globalThis.PressureObserver)||void 0===b?void 0:b.prototype)&&PressureObserver.knownSources instanceof Array&&PressureObserver.knownSources.includes(\"cpu\")}function Wl(a){switch(a){case \"nominal\":return 0;case \"fair\":return 1;case \"serious\":return 2;case \"critical\":return 3;default:return 0}}function Rl(a,b){if(a.v!==b){a.v=b;for(const c of a.g.get(1))c(b)}}\nfunction Xl(a){switch(a.o){case \"nominal\":return 20;case \"fair\":return 70;case \"serious\":return 85;case \"critical\":return 100}}\nvar Yl=class{constructor(a){var b,c,d,e;this.g=new Map;this.C=this.s=this.j=!1;this.o=\"nominal\";this.U=\"PHONE\"===a.deviceType||\"TABLET\"===a.deviceType;this.Z=ra(a);this.W=\"iPadOS\"===a.os;this.T=ya(a);this.h=this.v=document.hasFocus();this.m=0;a=window.zoneless;const f=null!==(c=null===(b=null===a||void 0===a?void 0:a.windowAddEventListener)||void 0===b?void 0:b.bind(window))&&void 0!==c?c:window.addEventListener.bind(window),g=null!==(e=null===(d=null===a||void 0===a?void 0:a.documentAddEventListener)||\nvoid 0===d?void 0:d.bind(document))&&void 0!==e?e:document.addEventListener.bind(document);this.N=this.da.bind(this);this.I=this.aa.bind(this);this.O=this.F.bind(this);this.P=this.ea.bind(this);this.R=this.fa.bind(this);this.L=this.ca.bind(this);this.H=this.$.bind(this);this.M=this.S.bind(this);f(\"focus\",this.N);f(\"blur\",this.I);[\"fullscreenchange\",\"webkitfullscreenchange\",\"mozfullscreenchange\",\"msfullscreenchange\"].forEach(h=>g(h,this.O));g(\"mouseenter\",this.P);g(\"mouseleave\",this.R);navigator.getBattery&&\nnavigator.getBattery().then(h=>{Sl(this,!h.charging);Tl(this,Ul(this,h));h.addEventListener(\"chargingchange\",this.L);h.addEventListener(\"levelchange\",this.H)});void 0!==window.screen.isExtended&&(this.S(),window.screen.addEventListener(\"change\",this.M));Vl()?(this.l=new PressureObserver(h=>{if(0Wl(l)&&(l=n.state);h=l;if(this.o!=h){this.o=h;for(const n of this.g.get(5))n()}}}),this.l.observe(\"cpu\")):k.i(\"{0c4eeb2}\",\"{c70b747}\");this.g.set(0,[]);\nthis.g.set(2,[]);this.g.set(1,[]);this.g.set(3,[]);this.g.set(4,[]);this.g.set(5,[]);this.F()}uninitialize(){var a,b,c,d,e,f,g;const h=window.zoneless,l=null!==(b=null===(a=null===h||void 0===h?void 0:h.windowRemoveEventListener)||void 0===a?void 0:a.bind(window))&&void 0!==b?b:window.removeEventListener.bind(window),n=null!==(d=null===(c=null===h||void 0===h?void 0:h.documentRemoveEventListener)||void 0===c?void 0:c.bind(document))&&void 0!==d?d:document.removeEventListener.bind(document);l(\"focus\",\nthis.N);l(\"blur\",this.I);[\"fullscreenchange\",\"webkitfullscreenchange\",\"mozfullscreenchange\",\"msfullscreenchange\"].forEach(m=>n(m,this.O));n(\"mouseenter\",this.P);n(\"mouseleave\",this.R);navigator.getBattery&&navigator.getBattery().then(m=>{m.removeEventListener(\"chargingchange\",this.L);m.removeEventListener(\"levelchange\",this.H)});void 0!==window.screen.isExtended&&window.screen.removeEventListener(\"change\",this.M);a=null===(e=this.l)||void 0===e?void 0:e.takeRecords();null===a||void 0===a?void 0:a.map(m=>\nk.i(\"{0c4eeb2}\",\"{4f27ba0}\",JSON.stringify(m)));null===(f=this.l)||void 0===f?void 0:f.unobserve(\"cpu\");null===(g=this.l)||void 0===g?void 0:g.disconnect();for(const m of this.g.values())m.splice(0)}da(){ni(this,!0)}aa(){ni(this,!1)}F(){var a=window.document;a=!!(document.fullscreen||1==a.webkitIsFullScreen||a.mozFullScreen||a.msFullscreenElement);if(this.j!==a){this.j=a;for(const b of this.g.get(2))b(a)}}ea(){Rl(this,!0)}fa(){Rl(this,!1)}ca(){navigator.getBattery().then(a=>{Sl(this,!a.charging)})}$(){navigator.getBattery().then(a=>\n{Tl(this,Ul(this,a))})}S(){this.m=window.screen.isExtended?3:0;k.i(\"{0c4eeb2}\",\"{ee99c72}\",this.m)}};function Zl(a){return a.trim().split(\"\\n\").map(b=>b.trim())}function $l(a){return a.split(\"\\nm=\").map((b,c)=>(00===c.indexOf(b))}function bm(a){a=a.substr(14).split(\" \");return{algorithm:a[0].toLowerCase(),value:a[1].toUpperCase()}};function cm(a,b){a=a.split(\"\\r\\n\");var c=-1;if(!b.length)return\"H264\";for(var d=0;d=a.ta?(jm(a),km(a)):(window.clearTimeout(a.C),a.C=0,k.i(\"{93c7910}\",\"{8595cb4}\"),lm(a,{code:3237093890}))}b.wasClean||a.xa++}\nfunction of(a,b){var c;k.i(\"{93c7910}\",\"{39024c3}\",mm(JSON.stringify(b)));b.ackid&&a.maxReceivedAckId{a.da.style.display=\"none\"},1E3)}\nfunction kl(a,b,c){const d=b.label;let e=!1;b.onopen=()=>{var f;k.d(\"{93c7910}\",\"{8e9ee5d}\",d);null===(f=c.open)||void 0===f?void 0:f.call(c);c.errorCode&&qm(a)};b.onclosing=()=>{k.d(\"{93c7910}\",\"{d0c8ae7}\",d);e=!0};b.onclose=()=>{var f;k.d(\"{93c7910}\",\"{a3c9826}\",d);null===(f=c.close)||void 0===f?void 0:f.call(c);c.errorCode&&rm(a)};b.onerror=f=>{k.e(\"{93c7910}\",\"{fcd64bb}\",d);if(e&&c.errorCode)rm(a)||Z(a,15867907);else{var g=b.bufferedAmount;f=null===f||void 0===f?void 0:f.error;a.Z||L(a.G,\"ChannelError\",\nd,null===f||void 0===f?void 0:f.name,null===f||void 0===f?void 0:f.message,null===g||void 0===g?void 0:g.toString());k.e(\"{93c7910}\",\"{db7ae96}\",d,null===f||void 0===f?void 0:f.name,null===f||void 0===f?void 0:f.message);c.errorCode&&Z(a,c.errorCode)}}}function yl(a,b){Pi(a,{etwPrint:b})}function sm(a){jm(a);let b=1E4;P.signInTimeout&&0!==P.signInTimeout&&(b=P.signInTimeout,k.i(\"{93c7910}\",\"{4f2f101}\",b));a.C=window.setTimeout(()=>a.signInTimeout(),b);a.cb=Date.now();km(a)}\nfunction tm(){k.d(\"{93c7910}\",\"{440d709}\",Q.j,performance.timeOrigin)}function jm(a){var b=1;for(let c=1;10>c;c++)b*=10;b=\"\"+Math.floor(Math.random()*b);b=b.padEnd(10,\"0\");a.name=\"peer-\"+b;k.d(\"{93c7910}\",\"{f2b789d}\",a.name);a.M=a.L+\"/sign_in?peer_id=\"+a.name+\"&version=2\";a.signalingUrlQueryParameters&&(a.M+=\"&\"+a.signalingUrlQueryParameters);k.d(\"{93c7910}\",\"{05b8afd}\",a.M)}\nfunction lm(a,b){var c,d,e;if(!a.H){a.lb=Date.now()-a.Bb;if(void 0===b){if(!af){var f;null===(f=a.O)||void 0===f?void 0:f.uninitialize(4001);a.O=void 0;Q.startWebSocket(a.M,a.maxReceivedAckId,a,!0);Fd&&Ti(a)}}else um(a);a.H=!0;0!==a.F&&(window.clearTimeout(a.F),a.F=0);b={sessionId:a.session.sessionId,subSessionId:a.session.subSessionId,streams:a.o,streamInfo:a.session.streamInfo,error:b,zoneName:a.session.zoneName,zoneAddress:a.session.zoneAddress,gpuType:a.session.gpuType,isResume:null!==(c=a.isResume)&&\nvoid 0!==c?c:!1,bitDepth:null!==(e=null===(d=a.h)||void 0===d?void 0:d.bitDepth)&&void 0!==e?e:8};a.Ba.Gc(b);a.ga.send()}}function vm(a,b){var c;try{if(\"open\"===(null===(c=a.S)||void 0===c?void 0:c.readyState)){let d=performance.now();a.S.send(JSON.stringify(b));ng(a,performance.now()-d)}else k.w(\"{93c7910}\",\"{593db1b}\")}catch(d){k.e(\"{93c7910}\",\"{a585a6e}\",d),a.G.za(d,\"sendControlMessage exception\",\"{93c7910}.ts\",0,0,!0)}}function wm(a){a.m&&(a.m.uninitialize(),a.m=void 0)}\nfunction xm(a){var b;null===(b=a.h)||void 0===b?void 0:b.stop()}function ym(a){var b;if(null===(b=a.aa)||void 0===b)void 0;else{for(const d of b.streams){var c=(new Date).toISOString();c=`ragnarok-${d.Pd}-${c}.${d.lg}`;const e=[new DataView(d.data.buffer,0,d.size)];Lf(e,c,\"text/plain\")&&k.i(\"{d7392d2}\",\"{4b3378a}\",c)}b.streams=[]}a.aa=void 0}\nasync function nm(a,b,c){var d;k.d(\"{93c7910}\",\"{9978507}\",b);try{const e=JSON.parse(c);if(\"offer\"===e.type){a.Sa=!0;let f=void 0,g=e.sdp||\"\";k.d(\"{93c7910}\",\"{ca9a155}\",mm(g));const h=await a.pc;a.W=cm(g,h);if(e.nvstSdp){const n=null!==(d=e.nvstServerOverrides)&&void 0!==d?d:\"\";f=zm(a,e.nvstSdp,n);if(!f)return}a.aa=new Ol(a.v,a.W);Am(a,b);let l=Date.now();g=Bm(a,g);g=dm(g,a.v.video[0].Qb,a.v.video[0].Pb,a.v.video[0].hc);k.d(\"{93c7910}\",\"{542f9d5}\",mm(g));a.g.setRemoteDescription({type:e.type,sdp:g}).then(()=>\n{a.wa=Date.now()-l;Cm(a);k.d(\"{93c7910}\",\"{ab7b3af}\",a.wa);Dm(a);const n=Em(a);n?Z(a,n):(Fm(a),Gm(a),Hm(a,a.W),l=Date.now(),a.g.createAnswer().then(m=>{var p;a.ua=Date.now()-l;k.d(\"{93c7910}\",\"{2984003}\",a.ua);const r=a.v.video[0].Dc.toString(),t=a.v.video[0].gd.toString(),v=a.v.video[0].Hd.toString();k.d(\"{93c7910}\",\"{b535c15}\",mm(Im(null!==(p=m.sdp)&&void 0!==p?p:\"\")));if(void 0!==m.sdp){m.sdp=em(m.sdp,r);window.chrome&&(m.sdp=fm(m.sdp,t,r,v));m.sdp=gm(m.sdp);if(p=hm(g))m.sdp=im(m.sdp,p);k.d(\"{93c7910}\",\n\"{1a048a7}\",mm(Im(m.sdp)))}l=Date.now();a.g.setLocalDescription(m).then(()=>{a.va=Date.now()-l;k.d(\"{93c7910}\",\"{de86c01}\",a.va);void 0===m.sdp||window.chrome||(m.sdp=fm(m.sdp,t,r,v));if(void 0!==m.sdp&&f){var q=$l(m.sdp),u=q.shift();var w=q[0];var x=u;var y=am(w+x,\"a=ice-ufrag:\")[0];w=am(w+x,\"a=ice-pwd:\")[0];y=y.substr(12);w=w.substr(10);q=am(q[0]+u,\"a=fingerprint:\").map(bm);u=$l(f);u[0]+=\"a=general.icePassword:\"+w+\"\\r\\n\";u[0]+=\"a=general.iceUserNameFragment:\"+y+\"\\r\\n\";u[0]+=\"a=general.dtlsFingerprint:\"+\nq[0].value+\"\\r\\n\";f=u.join(\"\")}Jm(a,b,{type:m.type,sdp:m.sdp,nvstSdp:f});k.i(\"{93c7910}\",\"{bd70666}\",JSON.stringify(a.o));qm(a)}).catch(q=>{k.e(\"{93c7910}\",\"{ba2deaa}\",q);Z(a,3237093902)})}).catch(m=>{k.d(\"{93c7910}\",\"{40c0f69}\",m)}))}).catch(n=>{k.e(\"{93c7910}\",\"{ec2853e}\",n);Z(a,3237093902)})}else if(e.candidate){k.d(\"{93c7910}\",\"{cf4c103}\");let f=Km(a,e.candidate);k.d(\"{93c7910}\",\"{43e80e0}\",f);a.g.addIceCandidate({sdpMLineIndex:e.sdpMLineIndex,sdpMid:e.sdpMid,candidate:f}).then(()=>{k.d(\"{93c7910}\",\n\"{db0ae14}\");a.na=!0}).catch(g=>{k.e(\"{93c7910}\",\"{62f207e}\",g);L(a.G,\"AddCandidateFailed\",null===g||void 0===g?void 0:g.name,null===g||void 0===g?void 0:g.message)});k.d(\"{93c7910}\",\"{9454009}\")}}catch(e){\"BYE\"===c?Z(a,15868672):(k.e(\"{93c7910}\",\"{93367fc}\",e),a.G.za(e,\"Invalid handlePeerMessage Response\",\"{93c7910}.ts\",0,0,!0))}}\nfunction om(a){var b;const c=Lm(a);let d;switch(a.videoStreamProgress){case 0:case 2:break;case 3:d=3237093922;break;case 5:d=3237093923;break;case 7:d=3237093924;break;default:d=3237093925}if(null===(b=a.h)||void 0===b)var e=void 0;else a:{if(b.j){var f=e=0,g=0,h=0;for(const l of b.j.values())\"candidate-pair\"===l.type&&(b=l,e+=b.requestsSent+b.consentRequestsSent,f+=b.responsesReceived,b.Vg&&g++,\"succeeded\"===b.state&&h++);k.i(\"{5cea617}\",\"{47c0ce7}\",e,f);if(0{var b;a.F=0;k.i(\"{93c7910}\",\"{d22df91}\");Z(a,null!==(b=om(a))&&void 0!==b?b:3237093895)},3E4);a.Bb=Date.now()}\nfunction Lm(a){const b=a.o.flatMap(c=>c.tracks);for(const c of a.$)if(!b.find(d=>d.trackId===c.trackId))return\"audio\"===c.kind?3237093914:3237093905;k.d(\"{93c7910}\",\"{4fef10b}\");b.length>a.$.length&&k.w(\"{93c7910}\",\"{7861bb3}\");return 15859712}function rm(a){let b=!1;window.chrome&&\"closed\"===a.g.signalingState&&(b=!0,Z(a,15867908));return b}\nfunction um(a){var b,c,d,e,f,g,h,l,n;const m=u=>{var w,x;const y=null!==(w=null===u||void 0===u?void 0:u.get(\"TCP\"))&&void 0!==w?w:0;u=null!==(x=null===u||void 0===u?void 0:u.get(\"IPV6\"))&&void 0!==x?x:0;return y+u};var p=(u,w)=>{let x=0;if(w){u=`${u} local candidates:`;for(const [y,z]of w){w=y;const A=z;x+=A;u+=` ${w}: ${A}`}k.i(\"{93c7910}\",\"{0b0c6f9}\",u)}return x};const r=null===(b=a.h)||void 0===b?void 0:Bl(b);b=p(\"event\",a.ca);const t=p(\"stats\",r);p=b-a.Ta;let v=\"\";const q=null===(c=a.g)||void 0===\nc?void 0:c.getReceivers().find(u=>\"video\"===u.track.kind&&u.track.enabled);(c=null===(g=null===(f=null===(e=null===(d=null===q||void 0===q?void 0:q.Yg)||void 0===d?void 0:d.Ug)||void 0===e?void 0:e.getSelectedCandidatePair)||void 0===f?void 0:f.call(e))||void 0===g?void 0:g.local)&&(v=`category: ${Cl(c)}, type: ${c.type}`);X(a.G,\"LocalCandidatesCategories\",v,b,b-m(a.ca),t,t-m(r));d=null!==(l=null===(h=a.h)||void 0===h?void 0:Dl(h))&&void 0!==l?l:new Set;X(a.G,\"LocalCandidateRanges\",`${null===(n=a.g)||\nvoid 0===n?void 0:n.iceGatheringState}`,p,null===d||void 0===d?void 0:d.size,a.ka.size,(new Set([...d,...a.ka])).size)}function Dm(a){for(const b of a.o)\"stream_id\"===b.streamId&&2===a.o.length?b.streamId=\"app_video_stream\":\"stream_id\"===b.streamId?b.streamId=\"app_media_stream\":\"second_stream_id\"===b.streamId&&(b.streamId=\"app_audio_stream\")}function Nm(a,b,c){a=a.g.getTransceivers().map(d=>d.receiver.track);a=new MediaStream(a.filter(d=>b.tracks.find(e=>e.trackId===d.id)));c.srcObject=a}\nfunction Em(a){var b=a.o.find(d=>\"app_media_stream\"===d.streamId);if(b)Nm(a,b,a.K),k.i(\"{93c7910}\",\"{a5e354c}\");else{b=a.o.find(d=>\"app_video_stream\"===d.streamId);var c=a.o.find(d=>\"app_audio_stream\"===d.streamId);if(b&&c){const d={streamId:\"app_media_stream\",tracks:b.tracks.concat(c.tracks)};a.o.splice(a.o.indexOf(b),1);a.o.splice(a.o.indexOf(c),1);a.o.push(d);Nm(a,d,a.K);k.i(\"{93c7910}\",\"{e2dc4ec}\")}else if(b)Nm(a,b,a.K),k.i(\"{93c7910}\",\"{07f3411}\");else if(c){if(!a.Ea)return 3237093937;Nm(a,c,\na.Ea);k.i(\"{93c7910}\",\"{243a50b}\")}else k.w(\"{93c7910}\",\"{c3a2679}\")}}\nfunction Gm(a){try{if(a.g&&a.sendVideoTrack){const b=a.g.getTransceivers().find(c=>\"video\"===c.receiver.track.kind);if(b){let c=\"\",d=b.direction;\"sendrecv\"!==b.direction&&(b.direction=\"sendrecv\",c=\" (\"+d+\" direction is overridden by sendrecv)\");b.sender.replaceTrack(a.sendVideoTrack).then(()=>{k.i(\"{93c7910}\",\"{b54f651}\",c)}).catch(e=>{b.direction!==d&&(b.direction=d);k.w(\"{93c7910}\",\"{d225159}\",e)})}else k.w(\"{93c7910}\",\"{8272b59}\")}}catch(b){k.w(\"{93c7910}\",\"{66082ec}\",b)}}\nfunction Om(a,b,c){k.w(\"{93c7910}\",\"{4d3c418}\",b,c);a.G.za(c,b,\"{93c7910}.ts\",0,0,!0)}\nfunction Hm(a,b){var c,d,e;const f=a.g.getTransceivers().find(h=>\"video\"===h.receiver.track.kind&&(\"recvonly\"===h.direction||\"sendrecv\"===h.direction));if(f)if(RTCRtpReceiver.getCapabilities&&RTCRtpSender.getCapabilities&&f.setCodecPreferences){var g=[b,\"flexfec-03\",\"rtx\"];b=null===(c=RTCRtpReceiver.getCapabilities(\"video\"))||void 0===c?void 0:c.codecs;c=[];if(b){for(const h of g)(g=b.filter(l=>l.mimeType===\"video/\"+h))&&c.push.apply(c,g);try{f.setCodecPreferences(c)}catch(h){Om(a,\"Failed to set codec preferences to receiver capabilities\",\nh);try{c=c.concat(null!==(e=null===(d=RTCRtpSender.getCapabilities(\"video\"))||void 0===d?void 0:d.codecs)&&void 0!==e?e:[]),f.setCodecPreferences(c)}catch(l){Om(a,\"Failed to set codec preferences to sender and receiver capabilities\",l)}}}}else k.w(\"{93c7910}\",\"{274c489}\")}function Ti(a){var b={stats:{from:a.id,to:a.ra}},c=Q;c.h=!1;b={startStats:{statsHeader:b}};c.g&&(k.d(\"{1f5ec29}\",\"{6897d5e}\"),c.g.postMessage(b));a.pa=!0}function Pi(a,b){\"connecting\"===Mm(a.S)?a.ea.push(b):vm(a,b)}\nfunction Pm(a,b,c){var d;2===b&&(null===(d=a.m)||void 0===d?void 0:Fi(d,!0));k.d(\"{93c7910}\",\"{5ba6173}\",b,c);a.I.emit(\"StreamingEvent\",{streamingWarnings:{code:b,secondsLeft:c}})}function Fm(a){var b;null===(b=a.aa)||void 0===b?void 0:b.start(a.g)}\nfunction Qm(a,b,c){b.candidate?(c||(c=Cl(b.candidate),a.ca.set(c,a.ca.get(c)+1),\"IPV4\"===c&&(c=El(b.candidate),\"UNKNOWN\"!==c&&a.ka.add(c))),\"tcp\"===b.candidate.protocol?k.d(\"{93c7910}\",\"{6f19d1e}\"):(k.d(\"{93c7910}\",\"{ac052fa}\",b.candidate.port,b.candidate.protocol),Jm(a,a.ra,{sdpMLineIndex:b.candidate.sdpMLineIndex,sdpMid:b.candidate.sdpMid,candidate:b.candidate.candidate}),a.Qa=!0)):k.d(\"{93c7910}\",\"{a759d16}\")}\nfunction Jm(a,b,c){const d=JSON.stringify(c);c={peer_msg:{from:a.id,to:b,msg:d},ackid:a.ya.g++};k.d(\"{93c7910}\",\"{7ecb902}\",b,d.length,mm(Im(JSON.stringify(c))));a.O?a.O.send(c):(a=Q,a.g&&a.g.postMessage({send:c}))}function Rm(a,b){let c=0;a.j.h&&(c|=2);a.j.v&&(c|=1);a.j.j&&(c|=16);const d={windowState:{streamIndex:0,frameNumber:b,windowStateFlags:c}};k.i(\"{93c7910}\",\"{ca317d5}\",c.toString(16),b);Pi(a,d)}\nfunction Sm(a,b){let c=0;a.j.s&&(c|=4);a.j.C&&(c|=1);const d={systemState:{streamIndex:0,frameNumber:b,systemStateFlags:c}};k.i(\"{93c7910}\",\"{455ccc0}\",c.toString(16),b);Pi(a,d)}function Tm(a,b){if(b=Um(b))b.onunmute=()=>{a.Na=!1}}function qm(a){0{var m,p;if(a.U){var r=a.U;X(a.G,\"IceStats\",\"disconnected\",0,r.Mf,r.Nf,r.Lf);a.U=void 0}(r=null===(m=a.h)||void 0===m?void 0:Al(m))&&X(a.G,\"IceStats\",\"failed\",0,r.Mf,r.Nf,\nr.Lf);a.l|=16;0==(a.l&4)?Z(a,null!==(p=om(a))&&void 0!==p?p:3237093894):a.h&&0==a.h.packetsReceived()?Z(a,3237093900):a.h&&0==a.h.l?Z(a,3237093901):n?Z(a,3237093906):Z(a,3237093899)};a.g.onconnectionstatechange=()=>{if(a.g)switch(k.d(\"{93c7910}\",\"{4ced155}\",a.g.connectionState),a.g.connectionState){case \"failed\":rm(a)||l(!1)}else k.e(\"{93c7910}\",\"{648f784}\")};a.g.oniceconnectionstatechange=()=>{var n;if(a.g)switch(k.d(\"{93c7910}\",\"{3a3143a}\",a.g.iceConnectionState),a.g.iceConnectionState){case \"new\":a.l|=\n1;break;case \"checking\":a.l|=2;break;case \"connected\":a.U=void 0;a.l&32&&(a.I.emit(\"StreamingEvent\",{streamingState:{state:\"reconnected\"}}),a.$a++);a.l|=4;break;case \"completed\":a.U=void 0;a.l|=12;break;case \"failed\":l(!0);break;case \"disconnected\":a.U=null===(n=a.h)||void 0===n?void 0:Al(n);a.l&4&&a.I.emit(\"StreamingEvent\",{streamingState:{state:\"reconnecting\"}});a.l|=32;break;case \"closed\":a.l|=64,0!=(a.l&32)&&Z(a,3237093892)}else k.e(\"{93c7910}\",\"{648f784}\")};a.g.ondatachannel=n=>{k.d(\"{93c7910}\",\n\"{b364db9}\",n.channel.label);\"control_channel\"==n.channel.label&&(kl(a,n.channel,{errorCode:3237093898,open:()=>{var m,p,r,t;a.S=n.channel;for(const v of a.ea)vm(a,v);k.d(\"{93c7910}\",\"{038895c}\",a.ea.length);a.ea=[];yl(a,`NvRtcClient Browser name: ${a.u.browser}, Browser version: ${a.u.browserFullVer}`);Pi(a,{etwPrintPair:{key:\"GPU Detail\",value:a.u.gpuDetail}});Rm(a,null!==(p=null===(m=a.h)||void 0===m?void 0:m.l)&&void 0!==p?p:0);ii(a.j,0,a.P);ii(a.j,1,a.P);ii(a.j,2,a.P);navigator.getBattery&&(Sm(a,\nnull!==(t=null===(r=a.h)||void 0===r?void 0:r.l)&&void 0!==t?t:0),ii(a.j,4,a.fa),ii(a.j,3,a.fa));Vl()&&(yl(a,\"ClientGenericMapping: {ProcCpuUsage, TotalCpuUsage}\"),ii(a.j,5,a.Pa));window.requestAnimationFrame(a.Ka)}}),n.channel.onmessage=m=>{try{var p=JSON.parse(m.data);k.d(\"{93c7910}\",\"{9371373}\");if(p.exitMessage)Z(a,rd(p.exitMessage));else if(p.timerNotification){m=p;var r=m.timerNotification.code;p=0;k.d(\"{c00be32}\",\"{44bd2b6}\",r);switch(r){case 1:case 2:p=1;break;case 4:p=2;break;case 6:p=3}var t=\np;0===t?k.e(\"{93c7910}\",\"{de37ac5}\",m.timerNotification.code):Pm(a,t,m.timerNotification.secondsLeft)}else p.debugMessage?Qi(a,p.debugMessage.message):p.customMessage?a.I.emit(\"CustomMessage\",JSON.parse(p.customMessage)):p.videoStreamProgressEvent?a.videoStreamProgress=p.videoStreamProgressEvent.videoStreamProgress:k.d(\"{93c7910}\",\"{d14e0fd}\")}catch(v){k.e(\"{93c7910}\",\"{a40734a}\",v),a.G.za(v,\"Error in control_channel message handling\",\"{93c7910}.ts\",0,0,!0)}})};k.d(\"{93c7910}\",\"{d9ffda2}\");k.d(\"{93c7910}\",\n\"{2bd4728}\");a.Ja=a.g.createDataChannel(\"input_channel_v1\",{ordered:!0,reliable:!0});a.Ja.binaryType=\"arraybuffer\";kl(a,a.Ja,{errorCode:3237093896});if(0{k.i(\"{93c7910}\",\"{3236227}\",a.g.signalingState)};a.g.onicecandidate=n=>Qm(a,n);a.g.g=n=>{k.w(\"{93c7910}\",\"{9871b05}\",n.port,n.url,n.errorCode,n.Tg)};(null!==(g=ce)&&void 0!==g?g:!ta(a.u))&&a.Da.initialize(a.g,a.I,a.K,a.Ea);a.g.ontrack=n=>{var m;const p=n.streams[0];k.d(\"{93c7910}\",\"{47359d4}\",p.id,n.track.kind,\nn.track.id,n.streams.length,G(a.l));let r={kind:\"video\"===n.track.kind?\"video\":\"audio\",trackId:n.track.id};\"audio\"!==n.track.kind||\"stream_id\"!==p.id&&\"app_media_stream\"!==p.id&&\"second_stream_id\"!==p.id&&\"app_audio_stream\"!==p.id||(a.qa=n.track.id,Tm(a,p),null===(m=a.R)||void 0===m?void 0:m.initialize(new MediaStream(p.getAudioTracks())));(n=a.o.find(t=>t.streamId===p.id))?n.tracks.push(r):a.o.push({streamId:p.id,tracks:[r]});qm(a)}}catch(h){k.e(\"{93c7910}\",\"{ff11182}\",h),a.G.za(h,\"Exception in creating peer connection\",\n\"{93c7910}.ts\",0,0,!0)}}function Km(a,b){k.d(\"{93c7910}\",\"{2dd62a2}\");if(a=a.session.mediaConnectionInfo.find(c=>2===c.usage||17===c.usage))return b=b.split(\" \"),b[4]=a.ip,b[5]=\"\"+a.port,b=b.join(\" \"),k.d(\"{93c7910}\",\"{1fbcd88}\",b),b;k.d(\"{93c7910}\",\"{aee7283}\");return b}function Bm(a,b){return b.split(\"\\r\\n\").map(c=>{if(!c.startsWith(\"a=candidate:\"))return c;a.na=!0;return\"a=\"+Km(a,c.substr(2))}).join(\"\\r\\n\")}\nfunction Cm(a){let b=a.g.getTransceivers();if(0===b.length)k.d(\"{93c7910}\",\"{3399d9d}\"),lm(a,{code:3237093909});else{for(const c of b)\"3\"===c.mid&&c.receiver.track.id!==a.qa?(k.i(\"{93c7910}\",\"{981392f}\"),c.receiver.track.enabled=!1):a.$.push({trackId:c.receiver.track.id,kind:c.receiver.track.kind});k.d(\"{93c7910}\",\"{648ae93}\",JSON.stringify(a.$))}}\nfunction zm(a,b,c){var d;var e=a.v,f=a.u,g=a.W;if(b=lk(b)){var h=b,l;const na={origin:h.origin,time:h.time,ob:new Map,media:[]};na.ob.set(\"general.clientSupportsIntraRefresh\",\"Safari\"===f.browser?\"0\":\"1\");na.ob.set(\"general.clientCapture\",null!==(l=h.ob.get(\"general.clientCapture\"))&&void 0!==l?l:\"0\");na.ob.set(\"runtime.serverTraceCapture\",(2).toString());l=0;for(const oa of h.media){h=new Map;if(\"video\"===oa.mediaType&&l{k.i(\"{93c7910}\",\n\"{a848987}\",g);X(this.G,\"PeerAPIDurationsAndMic\",G(a),this.ua,this.wa,this.va,g)};gj().then(g=>{f(g)});lm(this,{code:a,description:\"Session stopped before stream connected\"});this.N&&(clearTimeout(this.N),this.N=0);this.da.remove();this.Z=!0;try{vm(this,{exitMessage:{code:qd(a)}})}catch(g){k.e(\"{93c7910}\",\"{d337883}\",g)}wm(this);this.Ja&&this.Ja.close();null===(b=this.Aa)||void 0===b?void 0:b.close();xm(this);null===(c=this.g)||void 0===c?void 0:c.removeEventListener(\"icecandidate\",this.Ua);this.g&&\nthis.g.close();ym(this);0!==this.F&&(window.clearTimeout(this.F),this.F=0);0!==this.C&&(window.clearTimeout(this.C),this.C=0);jf();null===(d=this.O)||void 0===d?void 0:d.uninitialize();Q.stopWebSocket();tm();hf();this.qa&&this.Na&&(k.e(\"{93c7910}\",\"{283a180}\"),L(this.G,\"Audio track muted\"));0{var c,d;this.Z||window.requestAnimationFrame(this.Ka);if(null===(c=this.m)||void 0===c)void 0;else{var e=c.h;0===e.I&&V(e.l);Dd&&Jd&&c.l.ra()}null===(d=this.h)||void 0===d?void 0:Ad||(c=window.performance.now(),c>d.V.vd+1E4?(0!==d.V.vd&&k.i(\"{5cea617}\",\"{5fa9066}\",d.V.Sc,d.V.ld,d.V.nd,d.V.md,\nd.v.totalVideoFrames-d.V.Ue,d.V.Wd,d.V.hd,d.V.Rc,d.V.jd),d.V.vd=c,d.V.Ue=d.v.totalVideoFrames,d.V.Sc=1,d.V.ld=0,d.V.nd=0,d.V.md=0,d.V.Wd=0,d.V.hd=0,d.V.Rc=0,d.V.jd=0):d.V.Sc+=1)});null===(b=this.m)||void 0===b?void 0:Uh(b.h)}toggleOnScreenStats(a=!1,b){be&&(Vi(this)?this.h.toggleOnScreenStats(a,b):Qi(this,\"Stats is OFF. Please enable by ctrl+alt+F5/F6\"))}ja(){var a;if(null===(a=this.h)||void 0===a)void 0;else{var b=Q;if(b.h){const c={qosMarker:kf(b)};b.g&&b.g.postMessage(c)}a.g.S++;b=a.g;b.M.innerText=\nyk(b,2===a.M)}Qi(this,\"User marker added\")}toggleUserInput(a,b){this.m?this.m.toggleUserInput(a,b):k.e(\"{93c7910}\",\"{5a0e299}\",a)}getVirtualGamepadHandler(){var a;return null===(a=this.m)||void 0===a?void 0:a.getVirtualGamepadHandler()}toggleStutterIndicator(a){this.stutterIndicator=null!==a&&void 0!==a?a:!this.stutterIndicator;Pi(this,{stutterIndicator:{on:this.stutterIndicator}})}Cb(){this.sa^=1;Pi(this,{riDeviceOverlay:{bitmap:this.sa}})}Qc(){var a;null===(a=this.m)||void 0===a?void 0:a.Mc()}sendTextInput(a){var b;\nnull===(b=this.m)||void 0===b?void 0:b.sendTextInput(a)}setVirtualKeyboardState(a){var b;null===(b=this.m)||void 0===b?void 0:b.setVirtualKeyboardState(a)}setVideoTransforms(a,b,c){var d;if(null===(d=this.m)||void 0===d)void 0;else{const e=window.visualViewport;e&&(d.J.Pc=e.height);ui(d,a,b,c)}}sendCustomMessage(a){a={customMessage:JSON.stringify(a)};Pi(this,a)}setStreamingMaxBitrate(a,b,c){c||(Pi(this,{setMaxBitrate:{streamIndex:a,maxBitrate:b}}),k.d(\"{93c7910}\",\"{6bbc1a2}\",b))}setDrcDfcState(a,\nb,c){c||(Pi(this,{setDrcState:{streamIndex:a,state:!!(b&1)}}),Pi(this,{setDfcState:{streamIndex:a,state:!!(b&2)}}),k.d(\"{93c7910}\",\"{0ed76f3}\",b))}sendKeyEvent(a){var b;null===(b=this.m)||void 0===b?void 0:b.sendKeyEvent(a)}setKeyboardLayout(a){this.keyboardLayout=a;this.m?(this.sendCustomMessage({messageType:\"kbLayout\",messageRecipient:\"KBLayoutChange\",data:a}),this.m.setKeyboardLayout(a)):this.oa=!0}tc(){Vi(this)?Rm(this,this.h.l):k.w(\"{93c7910}\",\"{76bcede}\")}sc(){Vi(this)?Sm(this,this.h.l):k.w(\"{93c7910}\",\n\"{20ab5a1}\")}rc(){if(Vi(this)){var a=this.h.l;const b=Xl(this.j),c={cpuUsage:{streamIndex:0,frameNumber:a,procCpuUsage:0,totalCpuUsage:b}};k.i(\"{93c7910}\",\"{9bb3298}\",b.toString(),a);Pi(this,c)}else k.w(\"{93c7910}\",\"{7b1f129}\")}};function Um(a){let b=null;a=a.getAudioTracks();a.length&&(b=a[0]);return b}function Mm(a){var b;return null!==(b=null===a||void 0===a?void 0:a.readyState)&&void 0!==b?b:\"connecting\"}function mm(a){return a.replace(/((ice-pwd|ufrag)(:|\\s))((?!(\\\\|\\s)).)*/g,\"$1***\")}\nfunction Im(a){const b=RegExp('(candidate:[^\"\\\\r\\\\n\\\\\\\\]+)(\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\b)',\"g\");let c=\"\";for(;c!==a;)c=a,a=a.replace(b,\"$1***\");return a};function Ym(a){k.i(\"{0f7a7d0}\",\"{206f492}\");a.m&&(window.clearInterval(a.m),a.m=0)}function Zm(a){Ym(a);a.g=(new Date).getTime();a.j=0;a.l=0;a.h=0;a.sleepTime=0;k.i(\"{0f7a7d0}\",\"{d5ff5ba}\");a.m=window.setInterval(()=>{try{let b=(new Date).getTime();1E4c-a.h)$m(a,\"pspe\");else if(15867909===b||15867908===b)a.h=c,$m(a,\"other\");return 0!==a.h}var bn=class{constructor(a){this.subSessionId=this.sessionId=\"\";this.g=0;this.o=\"\";this.sleepTime=this.h=this.m=this.l=this.j=0;this.G=a}};function cn(a){let b=document.createElement(\"div\");b.id=a.Ed;b.className=\"genericdiv\";b.style.display=\"grid\";b.style.gridTemplateColumns=\"1fr 1fr\";b.style.gridTemplateRows=\"1fr 1fr\";a.visible=!0;a=document.createElement(\"p\");a.id=\"instruction\";a.style.color=\"white\";a.style.position=\"fixed\";a.innerHTML=\"Connect GamePads\";a.style.top=\"0\";b.appendChild(a);return b}\nvar dn=class{constructor(){this.Ed=\"gamepadTester\";this.visible=!1;this.xb=[];this.Xd=[];this.Zb=new Map;Qd&&(document.body.appendChild(cn(this)),this.start())}Eb(a){for(let b=0;4>b;b++){const c=this.Zb.get(b);void 0!==c&&0==(a&1<a.index&&(this.Xd[a.index]={index:a.index,ha:a.index,buttons:-1,qd:-1,axes:[-1],name:a.id,dc:!1})}Mc(a){let b=document.getElementById(this.Ed);b?(b.remove(),this.xb=[],this.visible=!1):(a.insertAdjacentElement(\"afterend\",cn(this)),this.start())}start(){let a,b=document.getElementById(this.Ed);if(null==b)k.e(\"{e13a879}\",\"{0c955af}\");else{var c=.49*window.innerWidth,d=.4*window.innerHeight,e=.3*c,f=.7*c,g=.8*d,h=.8*d,l=.07*c,n=q=>q?{left:{X:q.axes[0],\nY:q.axes[1]},right:{X:q.axes[2],Y:q.axes[3]}}:null,m=q=>{q.style.position=\"absolute\";q.style.width=\"2%\";q.style.height=\"3.5%\";q.style.backgroundColor=\"red\";q.style.borderRadius=\"50%\";q.style.transform=\"translate(-50%, -50%)\"},p=q=>{let u=n(q);if(null===b.querySelector(`.gamepad${q.index}`).querySelector(\".leftStick\")){var w=document.createElement(\"div\");w.className=\"gamepadJoystickPointer leftStick\";m(w);w.style.left=`${e+u.left.X*l}px`;w.style.top=`${g+u.left.Y*l}px`;b.querySelector(`.gamepad${q.index}`).querySelector(\".gamepadContainer\").appendChild(w)}else w=\nb.querySelector(`.gamepad${q.index}`).querySelector(\".leftStick\"),w.style.opacity=\"1\",w.style.left=`${e+l*u.left.X}px`,w.style.top=`${g+u.left.Y*l}px`;null===b.querySelector(`.gamepad${q.index}`).querySelector(\".rightStick\")?(w=document.createElement(\"div\"),w.className=\"gamepadJoystickPointer rightStick\",m(w),w.style.left=`${f+u.right.X*l}px`,w.style.top=`${h+u.right.Y*l}px`,b.querySelector(`.gamepad${q.index}`).querySelector(\".gamepadContainer\").appendChild(w)):(q=b.querySelector(`.gamepad${q.index}`).querySelector(\".rightStick\"),\nq.style.opacity=\"1\",q.style.left=(f+u.right.X*l).toString()+\"px\",q.style.top=(h+u.right.Y*l).toString()+\"px\")},r=(q,u,w,x)=>{var y=q.getContext(\"2d\");if(y){y.beginPath();var z=!0===w?1:!1===w?0:w;y.fillStyle=w?x?\"#006FCD\":\"#0e7a0d\":\"grey\";w=A=>{if(y){var E=.12*z;y.rect(q.width*A,q.height*(.07+(.12-E)),.02*q.width,q.height*E);y.closePath();y.fill();y.beginPath();y.fillStyle=\"grey\";y.rect(q.width*A,.07*q.height,.02*q.width,q.height*(.12-E))}};switch(u){case 0:y.moveTo(.14*q.width,.48*q.height);y.lineTo(.19*\nq.width,.48*q.height);y.lineTo(.165*q.width,.54*q.height);y.lineTo(.14*q.width,.48*q.height);break;case 1:y.moveTo(.14*q.width,.66*q.height);y.lineTo(.19*q.width,.66*q.height);y.lineTo(.165*q.width,.61*q.height);y.lineTo(.14*q.width,.66*q.height);break;case 2:y.moveTo(.09*q.width,.55*q.height);y.lineTo(.09*q.width,.61*q.height);y.lineTo(.135*q.width,.57*q.height);y.lineTo(.09*q.width,.55*q.height);break;case 3:y.moveTo(.24*q.width,.55*q.height);y.lineTo(.24*q.width,.61*q.height);y.lineTo(.195*q.width,\n.57*q.height);y.lineTo(.24*q.width,.55*q.height);break;case 4:y.arc(.7*q.width,.4*q.height,.02*q.width,0,2*Math.PI);break;case 5:y.arc(.3*q.width,.4*q.height,.02*q.width,0,2*Math.PI);break;case 6:y.arc(.3*q.width,.8*q.height,.07*q.width,0,2*Math.PI);break;case 7:y.arc(.7*q.width,.8*q.height,.07*q.width,0,2*Math.PI);break;case 8:y.rect(.13*q.width,.23*q.height,.07*q.width,.05*q.height);break;case 9:y.rect(.815*q.width,.23*q.height,.07*q.width,.05*q.height);break;case 12:y.arc(.85*q.width,.65*q.height,\n.02*q.width,0,2*Math.PI);break;case 13:y.arc(.9*q.width,.55*q.height,.02*q.width,0,2*Math.PI);break;case 14:y.arc(.8*q.width,.55*q.height,.02*q.width,0,2*Math.PI);break;case 15:y.arc(.85*q.width,.45*q.height,.02*q.width,0,2*Math.PI);break;case -1:w(.155);break;case -2:w(.84);break;case 16:if(!x)break;y.arc(.5*q.width,.5*q.height,.02*q.width,0,2*Math.PI);break;case 17:x&&(y.roundRect?y.roundRect(.395*q.width,.085*q.height,.21*q.width,.18*q.height,.02*q.width):y.arc(.5*q.width,.175*q.height,.02*q.width,\n0,2*Math.PI))}y.closePath();y.fill()}},t=q=>{if(null===b.querySelector(`.gamepad${q.index}`)){var u=document.createElement(\"div\");u.className=`gamepad gamepad${q.index}`;u.style.display=\"flex\";u.style.flexDirection=\"column\";u.style.justifyContent=\"space-between\";u.style.height=\"98%\";var w=document.createElement(\"p\");w.className=\"active\";w.style.margin=\"0px\";var x=document.createElement(\"span\");x.className=\"gamepadPlayerNumber\";x.style.color=\"white\";x.style.background=q.dc?\"#006FCD\":\"#0e7a0d\";x.style.position=\n\"relative\";x.style.marginRight=\"0.5vw\";x.innerHTML=q.dc?\"S\":\"X\";x.style.fontSize=\"1.5vw\";w.appendChild(x);x=document.createElement(\"span\");x.className=\"gamepadPlayerNumber\";x.style.color=\"white\";x.style.position=\"relative\";x.innerHTML=`P${q.index+1}|${q.name}`;x.style.fontSize=\"1.5vw\";w.appendChild(x);u.appendChild(w);q=document.createElement(\"div\");q.className=\"gamepadContainer\";q.style.position=\"relative\";q.style.width=`${c+2}px`;q.style.height=`${d}px`;w=document.createElement(\"canvas\");w.className=\n\"canvas\";w.width=c;w.height=d;w.style.width=`${c}px`;w.style.height=`${d}px`;w.style.border=\"1px solid white\";q.appendChild(w);u.appendChild(q);b.appendChild(u);if(u=b.querySelector(\"#instruction\"))u.style.display=\"none\"}},v=()=>{if(this.visible){for(let w=0;wz;z++)r(x,z,0!=(q.buttons&1<>8&255)/255,u)}else if(this.Xd[w])!b.querySelector(`.gamepad${w}`)&&(t(this.Xd[w]),q=b.querySelector(`.gamepad${w}`).querySelector(\"canvas\"),u=q.getContext(\"2d\"))&&(u.font=\"20px Arial\",u.fillStyle=\"white\",u.textAlign=\"center\",u.fillText(\"Unsupported Gamepad\",q.width/2,q.height/2));else if((q=b.querySelector(`.gamepad${w}`))&&b.removeChild(q),1>=b.childNodes.length&&(q=b.querySelector(\"#instruction\")))q.style.display=\n\"block\"}a=window.requestAnimationFrame(v)}else window.cancelAnimationFrame(a)};v()}}Yc(){}Yb(){}};function li(a){k.i(\"{4c846ba}\",\"{b11cb24}\");if(a.l){try{a.h=new MediaRecorder(a.l)}catch(b){k.e(\"{4c846ba}\",\"{0d1420e}\",b);return}a.h&&(a.h.onstart=()=>{},a.h.onstop=()=>{k.i(\"{4c846ba}\",\"{7a944b4}\")},a.h.ondataavailable=b=>{b.data&&0{k.i(\"{4c846ba}\",\"{2282d21}\");ki(a)},b),k.i(\"{4c846ba}\",\"{4f438e3}\"))}\nvar en=class{constructor(){this.o=!1;this.s=[];this.v=[];this.g=this.m=this.j=0}initialize(a){this.l=a}uninitialize(){ki(this);this.downloadAudio();this.l=void 0;this.g=0}downloadAudio(){if(0!=this.g){for(let a=0;a{k.w(\"{10dc2cc}\",\"{65276d8}\");a.close();a.g=void 0};a.g.onclose=()=>{k.w(\"{10dc2cc}\",\"{342f7f8}\");a.h=!0;a.j=!0}}function gn(a){if(a.l){if(!a.g)return Oa(1,\"Db not yet open\");if(a.h)return Oa(2,\"Db is closing, unexpectedly: \"+a.j+\", visibility state hidden: \"+(\"hidden\"===document.visibilityState))}else return Oa(17,\"Indexdb object not found\")}\nfunction hn(a,b){const c=gn(a);return c?Promise.reject(c):new Promise((d,e)=>{try{const f=a.g.transaction(b,\"readwrite\"),g=f.objectStore(b);f.oncomplete=()=>{k.i(\"{10dc2cc}\",\"{30f23d1}\")};const h=g.clear();h.onsuccess=()=>{d()};h.onerror=()=>{e(Oa(80,\"clear method failed)\",f.error))}}catch(f){e(Oa(81,\"Unexpected Exception happened in clear\",f))}})}\nfunction jn(a,b){const c=gn(a);return c?Promise.reject(c):new Promise((d,e)=>{try{const f=a.g.transaction(b,\"readonly\"),g=f.objectStore(b);f.oncomplete=()=>{k.i(\"{10dc2cc}\",\"{59d1f78}\")};const h=g.getAll();h.onsuccess=()=>{d(h.result)};h.onerror=()=>{e(Oa(96,\"getAll method failed\",f.error))}}catch(f){e(Oa(97,\"Unexpected Exception in getAll\",f))}})}\nvar kn=class{constructor(){this.l=window.indexedDB;this.version=2;this.j=this.h=!1;this.name=\"ragnarok\";this.m=[{Yf:\"exit-events\",pd:{keyPath:[\"userId\",\"sessionId\",\"name\"]},Xf:\"exit-event-index\"},{Yf:\"telemetry-events\",pd:{keyPath:[\"userId\",\"sessionId\",\"name\",\"eventPayload.ts\"]},Xf:\"telemetry-event-index\"}]}open(){return new Promise((a,b)=>{try{if(this.l){let c=this.l.open(this.name,this.version);c.onerror=()=>{b(Oa(18,`${this.name} db opening failed`,c.error))};c.onsuccess=()=>{fn(this,c.result);\na()};c.onupgradeneeded=d=>{k.i(\"{10dc2cc}\",\"{1f70767}\",d.oldVersion,d.newVersion);fn(this,c.result);const e=f=>{var g;const h=null===(g=this.g)||void 0===g?void 0:g.createObjectStore(f.Yf,f.pd);f.pd.keyPath&&(null===h||void 0===h?void 0:h.createIndex(f.Xf,f.pd.keyPath,{unique:!0}))};switch(d.oldVersion){case 0:e(this.m[0]);case 1:e(this.m[1])}};c.onblocked=()=>{b(Oa(19,`${this.name} db blocked during opening`,c.error))}}else b(Oa(17,\"Indexdb object not found\"))}catch(c){b(Oa(20,\"Unexpected Exception in open\",\nc))}})}get(a,b){const c=gn(this);return c?Promise.reject(c):new Promise((d,e)=>{try{const f=this.g.transaction(a,\"readonly\"),g=f.objectStore(a);f.oncomplete=()=>{k.i(\"{10dc2cc}\",\"{82638ba}\")};const h=g.get(b);h.onsuccess=()=>{d(h.result)};h.onerror=()=>{e(Oa(32,\"get method failed\",f.error))}}catch(f){e(Oa(33,\"Unexpected Exception happened in get\",f))}})}set(a,b){const c=gn(this);return c?Promise.reject(c):new Promise((d,e)=>{try{const f=this.g.transaction(a,\"readwrite\"),g=f.objectStore(a);f.oncomplete=\n()=>{k.i(\"{10dc2cc}\",\"{f993875}\")};const h=g.put(b);h.onsuccess=()=>{d()};h.onerror=()=>{e(Oa(48,\"put method failed\",f.error))}}catch(f){e(Oa(49,\"Unexpected Exception happened in set\",f))}})}close(){var a;this.h=!0;null===(a=this.g)||void 0===a?void 0:a.close()}};function Fj(a,b){if(a.g.commonData){var c=b.gdprLevel;let d=!1;a.g.commonData&&(\"functional\"!==c||\"Full\"!==a.g.commonData.deviceGdprFuncOptIn&&\"Temp\"!==a.g.commonData.deviceGdprFuncOptIn?\"technical\"===c&&\"Full\"===a.g.commonData.gdprTechOptIn?d=!0:\"behavioral\"===c&&\"Full\"===a.g.commonData.gdprBehOptIn&&(d=!0):d=!0);d&&(window.navigator.onLine?ln(Nj(a,b)):mn(a,{userId:a.g.commonData.userId,sessionId:a.g.commonData.sessionId,name:b.name,eventPayload:b}))}else a.C.push(b)}\nfunction Ij(a){var b,c,d;return null!==(d=null===(c=null===(b=a.g)||void 0===b?void 0:b.telemetryEventIds)||void 0===c?void 0:c.streamingProfileGuid)&&void 0!==d?d:\"\"}function Jj(a){var b,c,d;return null!==(d=null===(c=null===(b=a.g)||void 0===b?void 0:b.telemetryEventIds)||void 0===c?void 0:c.systemInfoGuid)&&void 0!==d?d:\"\"}\nfunction nn(a,b){var c,d,e,f;let g=null!==(c=b.exitErrorCode)&&void 0!==c?c:\"\";if(b.sleep)g=\"SleepExit\";else if(null===(d=b.connectivity)||void 0===d?0:d.startsWith(\"online\"))g=null!==(e=b.connectivity)&&void 0!==e?e:\"\";c=new wj({zoneAddress:b.zoneAddress,networkSessionId:null!==(f=b.networkTestSessionId)&&void 0!==f?f:\"\",sessionId:b.sessionId,subSessionId:b.subSessionId,resumeType:Hf(b.isResume),overrideConfigType:zd.type,overrideConfigVersion:zd.version,exitReason:g,result:b.exitErrorCode,frameCount:b.frameCount,\ncodec:Ef(b.codec),ipVersion:\"UNKNOWN\",streamDuration:Math.round(b.streamDuration),networkType:Pa(Aj.getCurrentNetworkType()),streamingProfileGuid:Ij(a),systemInfoGuid:Jj(a),cmsId:String(a.I)});return{name:c.name,gdprLevel:c.gdprLevel,parameters:c.parameters,ts:c.ts,clientConfig:uj}}function Qj(a){k.d(\"{f7c1592}\",\"{badefed}\",!0);on(a);a.h.eventPayload=void 0}\nfunction Pj(a){return a.j?Promise.resolve([]):a.m.then(()=>jn(a.l,\"exit-events\")).then(b=>{k.i(\"{f7c1592}\",\"{d938300}\",b.length);let c=[];if(0{pn(a,b,\"getCachedExitEvents\",!0);return Promise.reject()})}\nfunction Rj(a){return a.j?Promise.resolve():a.m.then(()=>jn(a.l,\"exit-events\")).then(b=>{k.i(\"{f7c1592}\",\"{ca568ff}\",b.length);if(0{pn(a,b,\"sendCachedExitEvent\",!0)})}\nfunction pn(a,b,c,d){var e,f,g,h;k.e(\"{f7c1592}\",\"{146ec91}\",c,G(b.code),b.description);d&&(d=null!==(g=null!==(f=null===(e=b.error)||void 0===e?void 0:e.message)&&void 0!==f?f:b.description)&&void 0!==g?g:`Exception in ${c}`,a.H?a.H(b.error,d,\"telemetryeventprocessor.ts\",b.code,0,!0,null===(h=b.error)||void 0===h?void 0:h.name):k.w(\"{f7c1592}\",\"{12e0846}\"))}\nfunction ln(a){var b,c,d,e;(null===(b=a.config)||void 0===b?0:b.server)&&(null===(c=a.config)||void 0===c?0:c.version)&&(b={method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Event-Protocol\":null!==(e=null===(d=a.commonData)||void 0===d?void 0:d.eventProtocol)&&void 0!==e?e:\"1.5\"},body:JSON.stringify(a.commonData),retryCount:3,timeout:2E3},k.i(\"{f7c1592}\",\"{056661f}\",b.body),Ca(qn(a.config),b).then(()=>{}).catch(()=>{}))}\nfunction Nj(a,b){let c={};if(!a.g.commonData)return c;const d={name:b.name,ts:b.ts,parameters:b.parameters};rn(c,a.g);a=c.commonData;a.clientId=b.clientConfig.clientId;a.eventSchemaVer=b.clientConfig.eventSchemaVer;a.sentTs=(new Date).toISOString();a.events=[d];return c}function mn(a,b){!a.j&&sn(b)&&a.m.then(()=>a.l.set(\"telemetry-events\",b)).then(()=>{k.i(\"{f7c1592}\",\"{f03d70b}\")}).catch(c=>{const d=!a.F;a.F=!0;pn(a,c,\"cacheTelemetryEventInDb\",d)})}\nfunction rn(a,b){a.commonData=b.commonData?Object.assign({},b.commonData):void 0;a.experiments=[];a.config=b.config;a.telemetryEventIds=b.telemetryEventIds}function qn(a){return a.server+\"/\"+a.version+\"/events/json\"}function Lj(a,b){var c,d,e;a.h.userId=null!==(d=null===(c=a.g.commonData)||void 0===c?void 0:c.userId)&&void 0!==d?d:\"\";a.h.sessionId=null!==(e=b.parameters.sessionId)&&void 0!==e?e:\"\";a.h.name=b.name;a.h.eventPayload=b}\nfunction Mj(a){var b,c;(null===(b=a.config)||void 0===b?0:b.server)&&(null===(c=a.config)||void 0===c?0:c.version)&&a.experiments&&(a.commonData&&(a.commonData.sentTs=(new Date).toISOString()),b=JSON.stringify(a.commonData),a=navigator.sendBeacon(qn(a.config),new Blob([b],{type:\"text/plain\"})),k.i(\"{f7c1592}\",\"{b9367c5}\",a,b))}function on(a){a.j||a.m.then(()=>hn(a.l,\"exit-events\")).then(()=>{k.i(\"{f7c1592}\",\"{1b8f127}\")}).catch(b=>{pn(a,b,\"clearExitEventStoreInDb\",!a.s);a.s||(a.s=!0)})}\nfunction sn(a){return!!a.userId&&!!a.sessionId&&!!a.name}function tn(a){return a.j||!sn(a.h)?Promise.resolve():a.m.then(()=>a.l.set(\"exit-events\",a.h)).then(()=>{k.i(\"{f7c1592}\",\"{5d026f8}\")}).catch(b=>{pn(a,b,\"cacheExitEventInDb\",!a.o);a.o||(a.o=!0)})}function un(a){a.j||a.m.then(()=>hn(a.l,\"telemetry-events\")).then(()=>{k.i(\"{f7c1592}\",\"{8f62936}\")}).catch(b=>{pn(a,b,\"clearEventStoreInDb\",!a.v);a.v||(a.v=!0)})}\nfunction vn(a){a.j||window.navigator.onLine&&a.m.then(()=>jn(a.l,\"telemetry-events\")).then(b=>{k.i(\"{f7c1592}\",\"{d4e574c}\",b.length);if(0{k.e(\"{f7c1592}\",\"{aaaa3de}\",b.code,b.description)})}\nvar wn=class{constructor(){this.h={userId:\"\",sessionId:\"\",eventPayload:void 0,name:\"\"};this.g={};this.v=this.F=this.s=this.o=!1;this.I=\"\";this.C=[];this.j=!1;this.l=new kn;this.m=this.l.open().catch(a=>{this.j=!0;pn(this,a,\"TelemetryEventProcessorConstruction\",!0)})}updateEventDataElements(a){var b;rn(this.g,a);if(this.g.commonData){k.d(\"{f7c1592}\",\"{66f209c}\");for(let c of this.C)Fj(this,c);this.C=[]}this.h.userId=null===(b=this.g.commonData)||void 0===b?void 0:b.userId}};performance.mark(\"GfnRBegin\");\nfunction xn(a){var b,c,d;if(P.sendNonEssentialMetricEvents){var e=performance.getEntriesByName(\"GfnJsInitStart\")[0];const f=performance.getEntriesByName(\"platformBegin\")[0],g=performance.getEntriesByName(\"GfnRBegin\")[0],h=performance.getEntriesByType(\"navigation\");e=Math.round(null!==(b=null===e||void 0===e?void 0:e.startTime)&&void 0!==b?b:-1);b=Math.round(null!==(c=null===f||void 0===f?void 0:f.startTime)&&void 0!==c?c:-1);X(a.G,\"PerformanceTiming\",\"application timings\",e,b,Math.round(null!==(d=\nnull===g||void 0===g?void 0:g.startTime)&&void 0!==d?d:-1),b-e);h.length?(c=h[h.length-1],X(a.G,\"PerformanceTiming\",\"load timings\",Math.round(c.loadEventStart),Math.round(c.loadEventEnd),Math.round(c.domContentLoadedEventStart),Math.round(c.domContentLoadedEventEnd))):X(a.G,\"PerformanceTiming\",\"navigation timings unsupported\",0,0,0,0)}}\nfunction yn(a){if(navigator.mediaCapabilities){var b=performance.now();bk(\"h264\").then(async c=>{if(c){c=bk(\"h264; profile-level-id=640033\",2560,1440,60);var d=bk(\"h264; profile-level-id=64e033\",2560,1440,60);c=ak(await c);d=ak(await d);const g=performance.now()-b;var e=ck(),f=bk(\"h264\",1920,1080,120);e=ak(await e);f=ak(await f);const h=await ek(dk),l=await gk();k.d(\"{9d1820c}\",\"{1efbc27}\",h,l);X(a.G,\"DisplayCaps\",\"Is120FpsSupported: \"+l,h,0,0,0);X(a.G,\"MediaCapabilities\",\"codec 5.1: \"+c+\" 5.1 constrained: \"+\nd+\" AV1: \"+e,g,f,c|d,Math.round(window.screen.height))}else X(a.G,\"MediaCapabilities\",\"webrtc unsupported\",performance.now()-b,-1,-1,-1)})}else X(a.G,\"MediaCapabilities\",\"API unsupported\",-1,-1,-1,-1)}function zn(a){if(a.g){const c=a.g.getSessionId(),d=a.g.getSubSessionId();k.d(\"{9d1820c}\",\"{2fd42df}\",c,d);var b=a.G;b.subSessionId=d;b.v.clear();b.C=0;a.F.subSessionId=d;b=a.G;b.sessionId=c;b.H=0;a.F.sessionId=c;a=a.m;a.o=!1;a.s=!1;a.F=!1;a.v=!1}}\nfunction An(a,b){var c,d,e,f,g,h,l,n,m,p;a.M&&(a.M=!1,a.framesDecoded=null!==(d=null===(c=a.D)||void 0===c?void 0:Vm(c))&&void 0!==d?d:0,c={sessionId:null!==(f=null===(e=a.g)||void 0===e?void 0:e.getSessionId())&&void 0!==f?f:\"\",subSessionId:null!==(h=null===(g=a.g)||void 0===g?void 0:g.getSubSessionId())&&void 0!==h?h:\"\",zoneName:null!==(n=null===(l=a.g)||void 0===l?void 0:l.getZoneName())&&void 0!==n?n:\"\",zoneAddress:(null===(m=a.g)||void 0===m?void 0:m.getZoneAddress())||a.h.serverAddress,error:{code:b}},\ne=Bn(a,c,performance.now()-a.startTime),qj(a.j),(!a.D||(null===(p=a.D)||void 0===p?0:p.H))&&Cn(a,e),Dn(a,b),a.cancelSessionSetup())}function En(a){0!==a.I&&(window.clearTimeout(a.I),a.I=0)}function Cn(a,b){En(a);var c=a.G;let d;d=nn(c.j,b);Kj(c,d);Qj(c.j);b=b.streamDuration;\"hidden\"===document.visibilityState&&(a.o+=performance.now()-a.L);c=0;b&&(c=Math.max(0,100*(b-a.o)/b));X(a.G,\"sessionVisibilityMetrics\",\"\",c,Math.round(b),Math.round(a.o),0);a.o=0;a.L=0}\nfunction Bn(a,b,c,d,e){var f,g,h,l;return{exitErrorCode:b.error?G(b.error.code):G(15859712),sessionId:b.sessionId,subSessionId:b.subSessionId,zoneAddress:b.zoneAddress,streamDuration:c,frameCount:a.framesDecoded,codec:null!==(g=null===(f=a.D)||void 0===f?void 0:Wm(f))&&void 0!==g?g:\"UNKNOWN\",isResume:a.isResume,connectivity:null!==d&&void 0!==d?d:\"undefined\",sleep:null!==e&&void 0!==e?e:!1,networkTestSessionId:null!==(l=null===(h=a.v)||void 0===h?void 0:h.la.networkSessionId)&&void 0!==l?l:\"\"}}\nfunction Fn(a){var b;Gn(a,G(null!==(b=a.S)&&void 0!==b?b:15867911));const c=a.I;tn(a.m).then(()=>{c===a.I&&Hn(a)}).catch(()=>{k.e(\"{9d1820c}\",\"{204a7ac}\")})}function In(a){return{code:3237093380,description:a+\" called before initialize\"}}\nfunction Jn(a,b){var c,d,e,f,g,h,l,n,m,p,r;let t={sessionId:null!==(d=null===(c=a.g)||void 0===c?void 0:c.getSessionId())&&void 0!==d?d:\"\",subSessionId:null!==(f=null===(e=a.g)||void 0===e?void 0:e.getSubSessionId())&&void 0!==f?f:\"\",error:{code:3237089284,description:\"Quitting due to exception\"},streamInfo:null===(g=a.H)||void 0===g?void 0:g.streamInfo,zoneName:null!==(l=null===(h=a.g)||void 0===h?void 0:h.getZoneName())&&void 0!==l?l:\"\",zoneAddress:null!==(m=null===(n=a.g)||void 0===n?void 0:n.getZoneAddress())&&\nvoid 0!==m?m:\"\",gpuType:null!==(r=null===(p=a.g)||void 0===p?void 0:p.getGpuType())&&void 0!==r?r:\"\",isResume:a.isResume};a.Gc(t,!0);k.e(\"{9d1820c}\",\"{90f98fb}\",b);a.G.za(b,\"Exception happened in session call\",\"{9d1820c}.ts\",0,0,!0)}function Kn(a,b){var c=Ha();a.Gc({sessionId:\"\",subSessionId:c,error:b,zoneName:\"\",zoneAddress:\"\",gpuType:\"\",isResume:a.isResume},!0)}\nfunction Ln(a,b,c,d){var e;a.H=void 0;a.aa=!1;if(a.g){Dg(a.C,c.la.additionalInputDevices);c.la.remoteControllersBitmap=rh(a.C);try{Gj(a.G,c.la.appId,null!==(e=c.la.shortName)&&void 0!==e?e:\"\");a.startTime=performance.now();Zm(a.F);k.d(\"{9d1820c}\",\"{892168d}\",Qa(JSON.stringify(c.la)));const f=a.g;f.putOrPostSession(c.la,b,d).then(g=>{zn(a);k.d(\"{9d1820c}\",\"{92a2573}\",null===g||void 0===g?void 0:g.sessionId,null===g||void 0===g?void 0:g.subSessionId);return\"ready_for_connection\"===(null===g||void 0===\ng?void 0:g.state)?(k.d(\"{9d1820c}\",\"{2042e0a}\"),a.H=g,new Promise(h=>{h(g)})):f.getSession(g.sessionId,!0)}).then(g=>{a.H=g;k.d(\"{9d1820c}\",\"{315afdc}\",null===g||void 0===g?void 0:g.sessionId);a.startStreaming(c)}).catch(g=>{var h,l,n,m,p,r;zn(a);if(g.code){15867905!=g.code&&15867906!=g.code||!f.getSessionId()||a.aa||a.sendDeleteRequest(f.getSessionId(),f);k.e(\"{9d1820c}\",\"{09efe49}\",G(g.code));let t={sessionId:null!==(h=f.getSessionId())&&void 0!==h?h:\"\",subSessionId:null!==(l=f.getSubSessionId())&&\nvoid 0!==l?l:\"\",error:g,sessionList:g.sessionList,streamInfo:null===(n=a.H)||void 0===n?void 0:n.streamInfo,zoneName:null!==(m=f.getZoneName())&&void 0!==m?m:\"\",zoneAddress:null!==(p=f.getZoneAddress())&&void 0!==p?p:\"\",gpuType:null!==(r=f.getGpuType())&&void 0!==r?r:\"\",isResume:a.isResume};a.Gc(t,!0)}else Jn(a,g)})}catch(f){Jn(a,f)}}else a.emit(\"SessionStartResult\",{sessionId:\"\",subSessionId:\"\",zoneName:\"\",zoneAddress:\"\",gpuType:\"\",isResume:a.isResume,error:In(a.isResume?\"Resume\":\"Start\")})}\nfunction Gn(a,b){var c,d,e,f,g,h,l,n,m,p=a.m,r=null!==(d=null===(c=a.g)||void 0===c?void 0:c.getSessionId())&&void 0!==d?d:\"\";c=null!==(f=null===(e=a.g)||void 0===e?void 0:e.getSubSessionId())&&void 0!==f?f:\"\";e=(null===(g=a.g)||void 0===g?void 0:g.getZoneAddress())||a.h.serverAddress;g=null!==(l=null===(h=a.D)||void 0===h?void 0:Vm(h))&&void 0!==l?l:0;h=null!==(m=null===(n=a.D)||void 0===n?void 0:Wm(n))&&void 0!==m?m:\"UNKNOWN\";a=nn(p,{exitErrorCode:b,sessionId:r,subSessionId:c,zoneAddress:e,streamDuration:performance.now()-\na.startTime,frameCount:g,codec:h,isResume:a.isResume,connectivity:\"\",sleep:!1,networkTestSessionId:\"\"});Lj(p,a)}function Hn(a){En(a);a.I=window.setTimeout(()=>Fn(a),12E4)}function Mn(a){a.T&&(window.clearTimeout(a.T),a.T=0)}\nfunction Nn(a){window.removeEventListener(\"pagehide\",a.ja);window.removeEventListener(\"online\",a.ea);document.removeEventListener(\"visibilitychange\",a.ka);navigator.mediaDevices&&navigator.mediaDevices.removeEventListener(\"devicechange\",a.W);ta(a.u)&&(document.removeEventListener(\"SystemIdle\",a.ga),Mn(a))}\nfunction On(a,b){a.S=void 0;vn(a.m);a.M=!0;window.addEventListener(\"pagehide\",a.ja);window.addEventListener(\"online\",a.ea);document.addEventListener(\"visibilitychange\",a.ka);navigator.mediaDevices&&navigator.mediaDevices.addEventListener(\"devicechange\",a.W);a.isResume=b;a.P&&L(a.G,\"SessionSetupInProgressError\",a.isResume?\"resume\":\"start\");a.P=!0}\nfunction Pn(a,b){var c,d,e;b={la:Object.assign({},b),ce:[]};if(b.la.streamParams)for(const h of b.la.streamParams){const l=document.getElementById(h.videoTagId);if(null==l||!(l instanceof HTMLVideoElement)){Kn(a,{code:3237094400,description:\"Didn't find video element for videoTagId: \"+h.videoTagId});return}b.ce.push({K:l})}b.la.keyboardLayout=null!==(c=b.la.keyboardLayout)&&void 0!==c?c:ya(a.u)?\"m-us\":\"en_US\";if(void 0===b.la.appLaunchMode||0===b.la.appLaunchMode)b.la.appLaunchMode=Ea()||Ga(a.u)||\n\"Xbox\"===a.u.os?1:0;if(He)if(b.la.metaData)for(const h in He)b.la.metaData[h]=He[h];else b.la.metaData=He;void 0!==he&&(b.la.appLaunchMode=he,k.d(\"{9d1820c}\",\"{c4969b1}\",he));const f=!!Hd&&!!Id,g=!!Yd;if(f||g)null===(d=b.la.streamParams)||void 0===d?void 0:d.forEach(h=>{f&&(h.width=Hd,h.height=Id);g&&(h.fps=Yd)}),null===(e=b.la.monitorSettings)||void 0===e?void 0:e.forEach(h=>{f&&(h.widthInPixels=Hd,h.heightInPixels=Id);g&&(h.framesPerSecond=Yd)}),f&&k.i(\"{9d1820c}\",\"{92a6b38}\",Hd,Id),g&&k.d(\"{9d1820c}\",\n\"{6618bcd}\",Yd);a.v=b;return a.v}function Dn(a,b){a.D&&(a.D.stop(b),a.D=void 0)}function Qn(a,b,c){var d,e;b={sessionId:b,subSessionId:null!==(e=null===(d=a.g)||void 0===d?void 0:d.getSubSessionId())&&void 0!==e?e:\"\",framesDecoded:a.framesDecoded,error:c};Rn(a);B(a.u)&&a.l&&(k.d(\"{9d1820c}\",\"{b9b1288}\"),a.setMicRecordingEnabled(!1));a.emit(\"SessionStopResult\",b)}\nfunction Rn(a){Ud&&(window.ios15AudioContext&&(window.ios15AudioContext.close(),window.ios15AudioContext=void 0,k.i(\"{9d1820c}\",\"{0ac2a42}\")),window.ios15AudioStream=void 0,navigator.mediaDevices&&a.O&&navigator.mediaDevices.removeEventListener(\"devicechange\",a.O))}\nfunction Sn(a){if(Ud)if(window.ios15AudioContext)k.i(\"{9d1820c}\",\"{e2aba64}\");else{var b=new (window.AudioContext||window.webkitAudioContext)({latencyHint:\"interactive\",sampleRate:48E3});b.onstatechange=()=>{\"suspended\"===b.state&&(b.resume(),a.j.j(),k.i(\"{9d1820c}\",\"{faee684}\"))};window.ios15AudioContext=b;window.ios15AudioStream=b.createMediaStreamDestination();navigator.mediaDevices&&a.O&&navigator.mediaDevices.addEventListener(\"devicechange\",a.O);k.i(\"{9d1820c}\",\"{b5f7b9b}\")}}\nfunction Tn(a,b){a.P=!1;b.error&&(a.M=!1,Nn(a));a.emit(\"SessionStartResult\",b)}\nfunction Un(a,b,c,d){var e,f,g,h;Rn(a);d&&((null===(e=d.connectivity)||void 0===e?0:e.startsWith(\"offline\"))||(null===(f=d.connectivity)||void 0===f?0:f.startsWith(\"timeout\"))?(En(a),Gn(a,G(null!==(h=null===(g=b.error)||void 0===g?void 0:g.code)&&void 0!==h?h:15867911)),tn(a.m).catch(()=>{k.e(\"{9d1820c}\",\"{0c2de99}\")})):Cn(a,d));Dn(a,b.error?b.error.code:15859712);c?Tn(a,b):(b.error&&(c=Cf(b.error.code,a.u),b.isResumable=c,k.i(\"{9d1820c}\",\"{723f7be}\",c)),a.M=!1,a.P=!1,Nn(a),a.emit(\"StreamStopped\",\nb))}\nfunction Vn(a,b){let c={errorCode:null!==b&&void 0!==b?b:15859712,connectivity:\"online\"};if(b&&(0===(3237093888^b)>>8||3237089282===b)){let d=1500;P.connectivityCheckTimeout&&0!==P.connectivityCheckTimeout&&(d=P.connectivityCheckTimeout,k.i(\"{9d1820c}\",\"{f9909d8}\",d));a=(\"http:\"===window.location.protocol?\"http://\":\"https://\")+a.h.serverAddress;k.i(\"{9d1820c}\",\"{df38106}\",a);const e=performance.now();return Na(a,d).then(f=>{c.connectivity=200<=f.status&&300>f.status||403==f.status?\"online(\"+String(25*Math.ceil((performance.now()-\ne)/25))+\")\":\"offline_wrong_status(\"+String(f.status)+\")\";return c}).catch(f=>{\"AbortError\"===f.name?c.connectivity=\"timeout\":(c.connectivity=\"offline(\"+f.name+\":\"+f.message+\")\",c.errorCode=Af(b));return c})}return Promise.resolve(c)}\nvar Wn=class extends Sb{constructor(a){super();this.u=a;this.l=this.Z=!1;this.da=new dn;this.P=!1;this.O=this.W=void 0;this.fa=!1;this.R=this.L=this.T=this.I=0;this.aa=this.M=!1;this.o=0;k.isCallbackRegistered()||k.setLogCallback(this.$.bind(this));this.h={clientIdentification:\"GFN-PC\",clientVersion:\"29.0\",deviceHashId:\"\",serverAddress:\"\"};this.startTime=performance.now();this.ja=this.ra.bind(this);this.ea=this.xa.bind(this);this.ka=this.Da.bind(this);this.ya=this.qa.bind(this);this.framesDecoded=\n0;this.m=new wn;this.G=new Sj(this,this.m);this.F=new bn(this.G);this.isResume=!1;this.N=od;this.ca=new en;window.addEventListener(\"error\",this.ya);a=window.zoneless;this.j=new tj(this.u,this.G);this.O=this.j.j.bind(this.j);this.W=this.na.bind(this);this.C=new sh(this.u,a);Qd&&(this.C.l.push(this.da),qh(this.C));this.ga=this.oa.bind(this);Ob(this.G);xn(this);yn(this);P.sendNonEssentialMetricEvents&&X(this.G,\"PlatformDetailsExecutionTime\",\"\",this.u.totalTime,0,0,0);Aj.registerCallback(b=>{var c;null===\n(c=this.g)||void 0===c?void 0:c.setNetworkType(b)});\"VISIONPRO\"===this.u.deviceModel&&(bf=!0,ef())}qa(a){var b;k.e(\"{9d1820c}\",\"{8516485}\",a.filename,a.lineno,a.colno);this.G.za(a.error,a.error&&a.error.message?a.error.message:a.message,a.filename,a.lineno,a.colno,!1);(null!==(b=P.terminateUnhandledException)&&void 0!==b?b:1)&&An(this,3237093392);return!1}ra(){var a,b;this.fa||(this.fa=!0,An(this,(null!==(a=this.S)&&void 0!==a?a:null===(b=this.D)||void 0===b?0:b.H)?15867912:15867905))}xa(){k.i(\"{9d1820c}\",\n\"{a9a135f}\");vn(this.m)}Da(){var a;k.i(\"{9d1820c}\",\"{478a408}\",document.visibilityState,!!this.D);if(this.D){var b=this.v.ce[0].K,c=J(this.u,!1,15,4)&&Xd,d=J(this.u,!1,15,4)&&this.l&&Wd;\"hidden\"===document.visibilityState?(this.L=performance.now(),c&&(k.i(\"{9d1820c}\",\"{cbd3b6e}\"),b.muted=!0),Fn(this)):\"visible\"===document.visibilityState&&(this.o+=performance.now()-this.L,c&&(k.i(\"{9d1820c}\",\"{05deefa}\"),b.muted=!1),d?(b=null!==(a=P.userTerminatedMicRecorderThreshold)&&void 0!==a?a:2E3,this.L-this.j.O<\nb?(k.i(\"{9d1820c}\",\"{862bd20}\"),this.j.I=!0,this.setMicRecordingEnabled(!0)):this.l=!1):J(this.u,!1,15,4)&&!this.j.o&&rj(this.j)&&this.j.F&&mj(this.j,\"visibilityChange\"))}}wa(a){k.d(\"{9d1820c}\",\"{972bb72}\",JSON.stringify(a));Ej(this.G,a)}ta(a){this.emit(\"ActiveSessionsResult\",a)}ua(a){this.emit(\"ProgressUpdate\",a)}va(a){this.emit(\"SessionUpdate\",a)}initialize(a,b=od){var c,d,e,f,g,h,l;k.i(\"{9d1820c}\",\"{2569364}\",\"0.66.9\");k.d(\"{9d1820c}\",\"{e85ad66}\",navigator.userAgent);if(!a)return k.e(\"{9d1820c}\",\n\"{a98b177}\"),!1;Object.assign(this.h,a);null===(c=this.g)||void 0===c?void 0:c.uninitialize();!this.h.serverAddress||qa(this.h.serverAddress)?(k.d(\"{9d1820c}\",\"{e2d9a04}\"),this.g=new ld):this.g=new kd(this.u,!0);a=this.g;var n,m,p,r,t,v,q;k.d(\"{9d1820c}\",\"{3c652b7}\");zn(this);a.addListener(\"TelemetryEvent\",this.wa.bind(this));a.addListener(\"Log\",this.$.bind(this));a.addListener(\"ActiveSessionsResult\",this.ta.bind(this));a.addListener(\"ProgressUpdate\",this.ua.bind(this));a.addListener(\"SessionUpdate\",\nthis.va.bind(this));this.h.clientHeaders=null!==(n=this.h.clientHeaders)&&void 0!==n?n:new Map;n=le||this.h.clientType||\"BROWSER\";(c=\"NATIVE\"!==n)&&this.h.clientHeaders.set(\"nv-browser-version\",this.u.browserFullVer);var u=this.h.clientHeaders;for(var [w]of u){const x=w;ie&&\"nv-device-os\"===x.toLowerCase()&&u.set(x,ie);je&&\"nv-device-type\"===x.toLowerCase()&&u.set(x,je);ae.deviceModel&&\"nv-device-model\"===x.toLowerCase()&&u.set(x,ae.deviceModel);ke&&\"nv-client-streamer\"===x.toLowerCase()&&u.set(x,\nke);De&&\"nv-client-id\"===x.toLowerCase()&&u.set(x,De)}w={deviceOs:null!==(m=ie)&&void 0!==m?m:this.u.deviceOS,deviceOsVer:this.u.osVer,deviceType:null!==(p=je)&&void 0!==p?p:this.u.deviceType,deviceModel:null!==(r=ae.deviceModel)&&void 0!==r?r:this.u.deviceModel,clientIdentification:null!==(t=this.h.clientIdentification)&&void 0!==t?t:\"GFN-PC\",clientVersion:null!==(v=this.h.clientVersion)&&void 0!==v?v:\"29.0\",clientAppVersion:this.h.clientAppVersion,clientStreamer:null!==(q=ke)&&void 0!==q?q:\"WEBRTC\",\nclientId:De||this.h.clientId,browserType:c?this.u.browser.toUpperCase():void 0,clientPlatformName:me||\"browser\",clientType:n,deviceHashId:this.h.deviceHashId,serverAddress:this.h.serverAddress,authTokenCallback:this.h.authTokenCallback,clientHeaders:this.h.clientHeaders};a.initialize(w);a.setNetworkType(Aj.getCurrentNetworkType());this.N={...b};null!==(d=(g=this.N).windowedStreaming)&&void 0!==d?d:g.windowedStreaming=this.h.windowedStreaming;null!==(e=(h=this.N).windowedStreaming)&&void 0!==e?e:h.windowedStreaming=\n2===b.cursorType;null!==(f=(l=this.N).cursorType)&&void 0!==f?f:l.cursorType=this.h.cursorType;this.G.clientShutDownCallback=this.h.clientShutDownCallback;return!0}downloadAudio(){this.ca.downloadAudio()}updateEventDataElements(a){var b;k.i(\"{9d1820c}\",\"{4008dc4}\",JSON.stringify(a));this.m.updateEventDataElements(a);a.telemetryEventIds&&(null===(b=this.g)||void 0===b?void 0:b.updateTelemetryEventIds(a.telemetryEventIds));this.D&&!this.P&&Fn(this)}getActiveSessions(){this.g?this.g.getAllActiveSessions():\nthis.emit(\"ActiveSessionsResult\",{sessionList:[],error:In(\"ActiveSessions\")})}startSession(a){On(this,!1);(a=Pn(this,a))&&Ln(this,0,a)}updateAdState(a){var b;return this.g?null===(b=this.g)||void 0===b?void 0:b.updateAdState(a):3237093380}getSession(a){this.g?this.g.getSession(a,!1).then(b=>{var c,d;let e={sessionId:null!==(c=null===b||void 0===b?void 0:b.sessionId)&&void 0!==c?c:\"\",appId:null===b||void 0===b?void 0:b.appId,subSessionId:null!==(d=null===b||void 0===b?void 0:b.subSessionId)&&void 0!==\nd?d:\"\",state:null===b||void 0===b?void 0:b.state,status:null===b||void 0===b?void 0:b.state};this.emit(\"GetSessionResult\",e)}).catch(b=>{var c,d;let e={sessionId:a,subSessionId:null!==(d=null===(c=this.g)||void 0===c?void 0:c.getSubSessionId())&&void 0!==d?d:\"\",error:b};this.emit(\"GetSessionResult\",e)}):this.emit(\"GetSessionResult\",{sessionId:\"\",subSessionId:\"\",error:In(\"GetSession\")})}resume(){this.resumeSession(this.v.la,this.g.getSessionId())}resumeSession(a,b){On(this,!0);(a=Pn(this,a))&&Ln(this,\n2,a,b)}stopSession(a,b){var c,d,e,f,g,h,l;this.g?(void 0!==b&&k.i(\"{9d1820c}\",\"{ae7f61b}\",G(b)),a===this.g.getSessionId()||void 0===a?(15867910===b?this.aa=!0:this.Z=!1,qj(this.j),this.framesDecoded=null!==(d=null===(c=this.D)||void 0===c?void 0:Vm(c))&&void 0!==d?d:0,Ym(this.F),c=Bn(this,{sessionId:null!==(e=this.g.getSessionId())&&void 0!==e?e:\"\",subSessionId:null!==(f=this.g.getSubSessionId())&&void 0!==f?f:\"\",error:b?{code:b}:void 0,zoneName:null!==(g=this.g.getZoneName())&&void 0!==g?g:\"\",zoneAddress:this.g.getZoneAddress()||\nthis.h.serverAddress,gpuType:null!==(h=this.g.getGpuType())&&void 0!==h?h:\"\",isResume:this.isResume},performance.now()-this.startTime),a=null!==(l=this.g.getSessionId())&&void 0!==l?l:\"\",this.D?(this.M=!1,Nn(this),this.D.H&&Cn(this,c),Dn(this,null!==b&&void 0!==b?b:this.D.H?15859712:15867905),15867910===b?(k.d(\"{9d1820c}\",\"{12bc45e}\",a),Qn(this,a)):this.sendDeleteRequest(a,this.g)):this.H?Qn(this,a):this.cancelSessionSetup()):a&&this.sendDeleteRequest(a,this.g)):this.emit(\"SessionStopResult\",{sessionId:\"\",\nsubSessionId:\"\",error:In(\"StopSession\")})}pauseSession(a){this.stopSession(a,15867910)}startStreaming(a){var b,c,d,e;const f={sessionId:null!==(c=null===(b=this.g)||void 0===b?void 0:b.getSessionId())&&void 0!==c?c:\"\",subSessionId:null!==(e=null===(d=this.g)||void 0===d?void 0:d.getSubSessionId())&&void 0!==e?e:\"\",progressState:\"StartingStreamer\",queuePosition:0,eta:0,ads:[]};this.emit(\"SessionUpdate\",f);this.emit(\"ProgressUpdate\",{...f,state:f.progressState});b=qa(this.h.serverAddress)?\"\":this.h.serverAddress.split(\".\")[0];\nconst {K:g}=a.ce[0];if(J(this.u,!1,15)){g.ragnarokOldPlay||(g.ragnarokOldPlay=g.play);const h=Td&&J(this.u,!0,15,1);g.play=()=>{Ud&&(k.i(\"{9d1820c}\",\"{4a5b360}\"),Rn(this),Sn(this),this.j.j());if(h){k.i(\"{9d1820c}\",\"{8f5cd77}\");const l=g.srcObject;g.srcObject=null;g.srcObject=l}return g.ragnarokOldPlay.apply(g)}}Vd&&(J(this.u,!0,15,0)||J(this.u,!0,15,1))&&(g.hasAttribute(\"data-shouldautoplay\")?g.setAttribute(\"autoplay\",\"\"):(g.setAttribute(\"data-shouldautoplay\",\"\"),g.removeAttribute(\"autoplay\")));this.D=\nnew Xm(this,g,void 0,this.j,this.N,this.da,this.C,this.G,this.u,this.H,a.la.streamParams[0],this.ca,this.h.textInputElement,this.h.clientAppVersion,this.isResume,b,void 0,void 0,a.la.signalingUrlQueryParameters);this.D.start();a.la.keyboardLayout&&this.D.setKeyboardLayout(a.la.keyboardLayout);Oj(this.G).then(()=>{Fn(this)}).catch(()=>{k.e(\"{9d1820c}\",\"{c761bfd}\")})}Gc(a,b){var c,d,e,f,g,h,l;if(a.error){const n=an(this.F,a.error.code);n&&(a.error.code=Bf(a.error.code,this.u));Vn(this,null===(c=a.error)||\nvoid 0===c?void 0:c.code).then(m=>{var p,r,t;this.framesDecoded=null!==(r=null===(p=this.D)||void 0===p?void 0:Vm(p))&&void 0!==r?r:0;a.zoneAddress||(a.zoneAddress=this.h.serverAddress);a.error&&(a.error.code=m.errorCode);p=void 0;b||(p=Bn(this,a,0,m.connectivity,n),this.S=null===(t=a.error)||void 0===t?void 0:t.code);Un(this,a,!0,p)})}else Hj(this.G,a.sessionId,a.subSessionId,this.isResume,a.zoneAddress||this.h.serverAddress,Math.round(performance.now()-this.startTime),G(15859712),null!==(e=null===\n(d=this.D)||void 0===d?void 0:Wm(d))&&void 0!==e?e:\"UNKNOWN\",this.v?String(null===(f=this.v)||void 0===f?void 0:f.la.appId):\"\",null!==(h=null===(g=this.v)||void 0===g?void 0:g.la.networkSessionId)&&void 0!==h?h:\"\"),this.startTime=performance.now(),\"hidden\"===document.visibilityState&&(this.L=this.startTime),this.o=0,this.isResume&&this.l&&this.setMicRecordingEnabled(!0),Tn(this,a),this.Z&&(null===(l=this.D)||void 0===l?void 0:l.toggleUserInput(!0,this.pa)),ta(this.u)&&document.addEventListener(\"SystemIdle\",\nthis.ga)}Cf(a){var b,c,d;qj(this.j);k.d(\"{9d1820c}\",\"{a94b484}\");let e=an(this.F,a.error.code);e&&(a.error.code=Bf(a.error.code,this.u));this.framesDecoded=null!==(c=null===(b=this.D)||void 0===b?void 0:Vm(b))&&void 0!==c?c:0;a.zoneAddress||(a.zoneAddress=this.h.serverAddress);Vn(this,null===(d=a.error)||void 0===d?void 0:d.code).then(f=>{var g;a.error.code=f.errorCode;f=Bn(this,a,performance.now()-this.startTime,f.connectivity,e);this.S=null===(g=a.error)||void 0===g?void 0:g.code;X(this.G,\"HotPlug\",\n\"\",0,this.R,0,0);this.R=0;Un(this,a,!1,f)})}Df(){Mn(this)}sendDeleteRequest(a,b){b.sendDeleteRequest(a).then(()=>{k.d(\"{9d1820c}\",\"{fee1eea}\",a);Qn(this,a)},c=>{k.e(\"{9d1820c}\",\"{50e2a6e}\",a);Qn(this,a,c)})}isMicSupported(){return kj}setMicRecordingEnabled(a){k.i(\"{9d1820c}\",\"{f5b2f30}\",a);a?(this.l=!0,oj(this.j)):(this.l=!1,jj(this.j))}getMicState(){ij(this.j)}shouldDefaultEnableMic(){return Uj(this.u)}sendCustomMessage(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendCustomMessage(a)}toggleUserInput(a,\nb){var c;null===(c=this.D)||void 0===c?void 0:c.toggleUserInput(a,b);this.Z=a;this.pa=b}toggleRsdmm(a){dh(this.C,a)}getVirtualGamepadHandler(){var a;return null===(a=this.D)||void 0===a?void 0:a.getVirtualGamepadHandler()}setAuthInfo(a){var b;null===(b=this.g)||void 0===b?void 0:b.setAuthInfo(a)}sendTextInput(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendTextInput(a)}setVirtualKeyboardState(a){var b;null===(b=this.D)||void 0===b?void 0:b.setVirtualKeyboardState(a)}setVideoTransforms(a,b,c){var d;\nnull===(d=this.D)||void 0===d?void 0:d.setVideoTransforms(a,b,c)}toggleOnScreenStats(){var a;be&&(null===(a=this.D)||void 0===a?void 0:a.toggleOnScreenStats())}toggleStutterIndicator(){var a;null===(a=this.D)||void 0===a?void 0:a.toggleStutterIndicator()}setKeyboardLayout(a){var b;k.i(\"{9d1820c}\",\"{10717a6}\",a);null===(b=this.D)||void 0===b?void 0:b.setKeyboardLayout(a)}sendKeyEvent(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendKeyEvent(a)}setStreamingMaxBitrate(a,b=0){var c;null===(c=this.D)||\nvoid 0===c?void 0:c.setStreamingMaxBitrate(b,a)}setDrcDfcState(a,b=0){var c;null===(c=this.D)||void 0===c?void 0:c.setDrcDfcState(b,a?3:0)}oa(a){var b;a.detail.idle&&(null===(b=this.D)||void 0===b?void 0:Pm(b,2,60),this.T=window.setTimeout(()=>{var c;null===(c=this.D)||void 0===c?void 0:Z(c,15867913)},6E4))}na(){sj(this.j,this.R);this.R++}cancelSessionSetup(){!this.D&&this.g&&this.g.cancelSessionSetup()}};var Xn=_gamestream$core.LogImpl;performance.mark(\"GfnNskBegin\");\nfunction Yn(a,b,c){var d;if(4!==a.streamingState&&0!==a.streamingState){var e=a.streamingState;a.streamingState=4;Ym(a.l);X(Y,\"HotPlug\",\"\",0,a.o,0,0);B(a.u)&&a.m&&(k.d(\"{0a9be04}\",\"{b9b1288}\"),a.captureMic(!1));qj(a.g);null===(d=a.D)||void 0===d?void 0:d.stop(b);an(a.l,b)&&(b=Bf(b,a.u));Zn(a,b).then(f=>{b=f.errorCode;if(1!==e){var g={code:b,isResumable:Cf(b,a.u),reason:3},h=new Set([3237093892,15867907,3237093896,3237093897,3237093898,3237093899,3237093900,3237093895,3237093901,3237093906,3237093929,\n15867908,15868418,3237094151,3237094158]);c?g.reason=0:h.has(b)?g.reason=2:15868672===(b&268435200)&&(g.reason=1);a.h.onStreamStopped(g);h=f.connectivity;var l,n,m,p;g=f=b?G(b):G(15859712);if(null===h||void 0===h?0:h.startsWith(\"online\"))g=null!==h&&void 0!==h?h:\"\";h=performance.now()-a.startTime;const y=null!==(n=null===(l=a.D)||void 0===l?void 0:Wm(l))&&void 0!==n?n:\"UNKNOWN\";l=null!==(p=null===(m=a.D)||void 0===m?void 0:Vm(m))&&void 0!==p?p:0;m=Y;var r,t,v;p=new wj({zoneAddress:m.zoneAddress,sessionId:m.sessionId,\nsubSessionId:m.subSessionId,resumeType:Hf(m.isResume),cmsId:m.cmsId,overrideConfigType:zd.type,overrideConfigVersion:zd.version,exitReason:g,result:f,frameCount:l,codec:Ef(y),ipVersion:\"UNKNOWN\",streamDuration:Math.round(h),networkType:Pa(Aj.getCurrentNetworkType()),streamingProfileGuid:null!==(r=m.telemetryEventIds.streamingProfileGuid)&&void 0!==r?r:\"\",systemInfoGuid:null!==(t=m.telemetryEventIds.systemInfoGuid)&&void 0!==t?t:\"\",networkSessionId:null!==(v=m.telemetryEventIds.networkTestId)&&void 0!==\nv?v:\"\"});m.h(p,!0)}$n(a);ao(a);a.D=void 0;a.startTime=0;a.isResume=!1;a.P=void 0;a.C=0;a.o=0;a.sessionId=\"\";a.subSessionId=\"\";a.zoneAddress=\"\";a.zoneName=\"\";a.K=void 0;a.Ea=void 0;a.m=!1;a.appId=0;a.setSupportedHidTypes(0);a.setGamepadRsdmm(!1);a.l.sessionId=\"\";a.l.subSessionId=\"\";var q,u,w,x;t=window.zoneless;r=null!==(u=null===(q=null===t||void 0===t?void 0:t.windowRemoveEventListener)||void 0===q?void 0:q.bind(window))&&void 0!==u?u:window.removeEventListener.bind(window);q=null!==(x=null===(w=\nnull===t||void 0===t?void 0:t.documentRemoveEventListener)||void 0===w?void 0:w.bind(document))&&void 0!==x?x:document.removeEventListener.bind(document);r(\"pagehide\",a.M);r(\"error\",a.L);q(\"visibilitychange\",a.N);navigator.mediaDevices&&navigator.mediaDevices.removeEventListener(\"devicechange\",a.F);ta(a.u)&&(q(\"SystemIdle\",a.I),ao(a))})}}\nfunction bo(){var a,b,c;if(P.sendNonEssentialMetricEvents){var d=performance.getEntriesByName(\"GfnJsInitStart\")[0];const e=performance.getEntriesByName(\"platformBegin\")[0],f=performance.getEntriesByName(\"GfnNskBegin\")[0],g=performance.getEntriesByType(\"navigation\");d=Math.round(null!==(a=null===d||void 0===d?void 0:d.startTime)&&void 0!==a?a:-1);a=Math.round(null!==(b=null===e||void 0===e?void 0:e.startTime)&&void 0!==b?b:-1);X(Y,\"PerformanceTiming\",\"application timings\",d,a,Math.round(null!==(c=\nnull===f||void 0===f?void 0:f.startTime)&&void 0!==c?c:-1),a-d);g.length?(b=g[g.length-1],X(Y,\"PerformanceTiming\",\"load timings\",Math.round(b.loadEventStart),Math.round(b.loadEventEnd),Math.round(b.domContentLoadedEventStart),Math.round(b.domContentLoadedEventEnd))):X(Y,\"PerformanceTiming\",\"navigation timings unsupported\",0,0,0,0)}}\nfunction co(){if(navigator.mediaCapabilities){var a=performance.now();bk(\"h264\").then(async b=>{if(b){b=bk(\"h264; profile-level-id=640033\",2560,1440,60);var c=bk(\"h264; profile-level-id=64e033\",2560,1440,60);b=ak(await b);c=ak(await c);const f=performance.now()-a;var d=ck(),e=bk(\"h264\",1920,1080,120);d=ak(await d);e=ak(await e);const g=await ek(dk),h=await gk();k.d(\"{0a9be04}\",\"{1efbc27}\",g,h);X(Y,\"DisplayCaps\",\"Is120FpsSupported: \"+h,g,0,0,0);X(Y,\"MediaCapabilities\",\"codec 5.1: \"+b+\" 5.1 constrained: \"+\nc+\" AV1: \"+d,f,e,b|c,Math.round(window.screen.height))}else X(Y,\"MediaCapabilities\",\"webrtc unsupported\",performance.now()-a,-1,-1,-1)})}else X(Y,\"MediaCapabilities\",\"API unsupported\",-1,-1,-1,-1)}\nfunction eo(a){var b;const c={errorCode:void 0,streamParams:Object.assign({},a),Ea:void 0,de:[]};if(0{e&&(g.width=Hd,g.height=Id);f&&(g.fps=Yd)}),e&&k.i(\"{0a9be04}\",\"{92a6b38}\",Hd,Id),f&&k.d(\"{0a9be04}\",\"{6618bcd}\",Yd);return c}function $n(a){Ud&&(window.ios15AudioContext&&(window.ios15AudioContext.close(),window.ios15AudioContext=void 0,k.i(\"{0a9be04}\",\"{0ac2a42}\")),window.ios15AudioStream=void 0,navigator.mediaDevices&&a.s&&navigator.mediaDevices.removeEventListener(\"devicechange\",a.s))}\nfunction fo(a){if(Ud)if(window.ios15AudioContext)k.i(\"{0a9be04}\",\"{e2aba64}\");else{var b=new (window.AudioContext||window.webkitAudioContext)({latencyHint:\"interactive\",sampleRate:48E3});b.onstatechange=()=>{\"suspended\"===b.state&&(b.resume(),a.g.j(),k.i(\"{0a9be04}\",\"{faee684}\"))};window.ios15AudioContext=b;window.ios15AudioStream=b.createMediaStreamDestination();navigator.mediaDevices&&a.s&&navigator.mediaDevices.addEventListener(\"devicechange\",a.s);k.i(\"{0a9be04}\",\"{b5f7b9b}\")}}\nfunction go(a){var b,c,d,e;const f=window.zoneless,g=null!==(c=null===(b=null===f||void 0===f?void 0:f.windowAddEventListener)||void 0===b?void 0:b.bind(window))&&void 0!==c?c:window.addEventListener.bind(window);b=null!==(e=null===(d=null===f||void 0===f?void 0:f.documentAddEventListener)||void 0===d?void 0:d.bind(document))&&void 0!==e?e:document.addEventListener.bind(document);g(\"pagehide\",a.M);g(\"error\",a.L);b(\"visibilitychange\",a.N);navigator.mediaDevices&&navigator.mediaDevices.addEventListener(\"devicechange\",\na.F);ta(a.u)&&b(\"SystemIdle\",a.I)}function ao(a){a.v&&(window.clearTimeout(a.v),a.v=0)}\nfunction Zn(a,b){let c={errorCode:null!==b&&void 0!==b?b:15859712,connectivity:\"online\"};if(b&&(0===(3237093888^b)>>8||3237089282===b)){let d=1500;P.connectivityCheckTimeout&&0!==P.connectivityCheckTimeout&&(d=P.connectivityCheckTimeout,k.i(\"{0a9be04}\",\"{f9909d8}\",d));a=(\"http:\"===window.location.protocol?\"http://\":\"https://\")+a.zoneAddress;k.i(\"{0a9be04}\",\"{df38106}\",a);const e=performance.now();return Na(a,d).then(f=>{c.connectivity=200<=f.status&&300>f.status||403==f.status?\"online(\"+String(25*\nMath.ceil((performance.now()-e)/25))+\")\":\"offline_wrong_status(\"+String(f.status)+\")\";return c}).catch(f=>{\"AbortError\"===f.name?c.connectivity=\"timeout\":(c.connectivity=\"offline(\"+f.name+\":\"+f.message+\")\",c.errorCode=Af(b));return c})}return Promise.resolve(c)}\nvar ho=class{constructor(a,b,c){this.u=a;this.h=b;this.R=c;this.H=new dn;this.O=new en;this.startTime=this.streamingState=0;this.isResume=!1;this.o=this.C=this.v=0;this.zoneName=this.zoneAddress=this.subSessionId=this.sessionId=\"\";this.m=!1;this.appId=0;this.L=d=>{var e;k.e(\"{0a9be04}\",\"{8516485}\",d.filename,d.lineno,d.colno);Y.za(d.error,d.error&&d.error.message?d.error.message:d.message,d.filename,d.lineno,d.colno,!1);(null!==(e=P.terminateUnhandledException)&&void 0!==e?e:1)&&Yn(this,3237093392);\nreturn!1};this.N=()=>{var d;k.i(\"{0a9be04}\",\"{478a408}\",document.visibilityState,!!this.D);if(this.D){var e=this.K,f=this.Ea,g=e&&f&&J(this.u,!1,15,4)&&Xd,h=J(this.u,!1,15,4)&&this.m&&Wd;\"hidden\"===document.visibilityState?(this.C=performance.now(),g&&(k.i(\"{0a9be04}\",\"{cbd3b6e}\"),e.muted=!0,f.muted=!0)):\"visible\"===document.visibilityState&&(g&&(k.i(\"{0a9be04}\",\"{05deefa}\"),e.muted=!1,f.muted=!1),h?(e=null!==(d=P.userTerminatedMicRecorderThreshold)&&void 0!==d?d:2E3,this.C-this.g.O{var d,e;Yn(this,(null!==(d=this.P)&&void 0!==d?d:null===(e=this.D)||void 0===e?0:e.H)?15867912:15867905)};this.F=()=>{sj(this.g,this.o);this.o++};this.I=d=>{var e;d.detail.idle&&(null===(e=this.D)||void 0===e?void 0:Pm(e,2,60),this.v=window.setTimeout(()=>{var f;null===(f=this.D)||void 0===f?void 0:Z(f,15867913)},6E4))};this.s=()=>{this.g.j()};this.j=\nnew sh(this.u,window.zoneless);this.g=new tj(this.u,Y);this.l=new bn(Y);Qd&&(this.j.l.push(this.H),qh(this.j));Ob(Y);bo();co();P.sendNonEssentialMetricEvents&&X(Y,\"PlatformDetailsExecutionTime\",\"\",this.u.totalTime,0,0,0);k.i(\"{0a9be04}\",\"{2569364}\",\"0.66.9\");k.d(\"{0a9be04}\",\"{e85ad66}\",navigator.userAgent)}startStreaming(a){var b,c,d,e,f,g,h,l,n,m,p,r,t,v,q;if(4!==this.streamingState&&0!==this.streamingState)return k.w(\"{0a9be04}\",\"{60a7ff5}\"),L(Y,\"SessionSetupInProgressError\",a.resume?\"resume\":\"start\"),\n3237085186;const u=eo(a);if(u.errorCode)return u.errorCode;a=u.streamParams;this.K=u.de[0];this.Ea=u.Ea;this.isResume=null!==(b=a.resume)&&void 0!==b?b:!1;this.sessionId=a.sessionId;this.subSessionId=null!==(c=a.subSessionId)&&void 0!==c?c:\"\";this.zoneAddress=null!==(d=a.zoneAddress)&&void 0!==d?d:\"\";this.zoneName=null!==(f=null===(e=a.statTelemetryInfo)||void 0===e?void 0:e.zoneName)&&void 0!==f?f:\"\";this.appId=null!==(h=null===(g=a.statTelemetryInfo)||void 0===g?void 0:g.appId)&&void 0!==h?h:0;\nBj(this.subSessionId,this.sessionId,this.appId.toString(),this.isResume,this.zoneAddress);this.l.sessionId=this.sessionId;this.l.subSessionId=this.subSessionId;if(J(this.u,!1,15)){const w=this.K;w.ragnarokOldPlay||(w.ragnarokOldPlay=this.K.play);const x=Td&&J(this.u,!0,15,1);this.K.play=()=>{var y,z,A;Ud&&(k.i(\"{0a9be04}\",\"{4a5b360}\"),$n(this),fo(this),this.g.j());if(x){k.i(\"{0a9be04}\",\"{8f5cd77}\");const E=null!==(z=null===(y=this.K)||void 0===y?void 0:y.srcObject)&&void 0!==z?z:null;if(null===(A=\nthis.K)||void 0===A?0:A.srcObject)this.K.srcObject=null,this.K.srcObject=E}return w.ragnarokOldPlay.apply(this.K)}}Vd&&(J(this.u,!0,15,0)||J(this.u,!0,15,1))&&(this.K.hasAttribute(\"data-shouldautoplay\")?this.K.setAttribute(\"autoplay\",\"\"):(this.K.setAttribute(\"data-shouldautoplay\",\"\"),this.K.removeAttribute(\"autoplay\")));d={ip:\"\",port:0,appLevelProtocol:0,usage:0,protocol:0};a.mediaConnectionInfo&&(d.ip=a.mediaConnectionInfo.address,d.port=a.mediaConnectionInfo.port,d.usage=2);e={ip:a.signalConnectionInfo.address,\nport:a.signalConnectionInfo.port,protocol:a.signalConnectionInfo.secure?\"wss\":\"ws\"};b=a.downstreamParams[0];f={width:b.width,height:b.height,fps:b.fps,sdrHdrMode:b.sdrHdrMode};c={appId:this.appId,appLaunchMode:a.enableTouchInput?2:0,clientLocale:null!==(n=null===(l=a.statTelemetryInfo)||void 0===l?void 0:l.clientLocale)&&void 0!==n?n:\"\",gpuType:null!==(p=null===(m=a.statTelemetryInfo)||void 0===m?void 0:m.gpuType)&&void 0!==p?p:\"\",mediaConnectionInfo:[d],sessionId:this.sessionId,signalConnectionInfo:e,\nstate:\"ready_for_connection\",streamInfo:[f],subSessionId:this.subSessionId,zoneAddress:this.zoneAddress,zoneName:this.zoneName,finalizedStreamingFeatures:a.streamingFeatures};l={width:b.width,height:b.height,fps:b.fps,maxBitrateKbps:b.maxBitrateKbps,videoTagId:b.videoTagId,audioTagId:a.audioTagId};n={...od};null!==(r=n.windowedStreaming)&&void 0!==r?r:n.windowedStreaming=a.windowedStreaming;null!==(t=n.cursorType)&&void 0!==t?t:n.cursorType=a.cursorType;this.D=new Xm(this,this.K,this.Ea,this.g,n,\nthis.H,this.j,Y,this.u,c,l,this.O,this.R.textInputElement,null===(v=a.statTelemetryInfo)||void 0===v?void 0:v.clientAppVersion,this.isResume,null===(q=a.statTelemetryInfo)||void 0===q?void 0:q.region,b.dynamicStreamingMode,a.upstreamParams);go(this);this.streamingState=1;Zm(this.l);this.startTime=performance.now();this.D.start();a.keyboardLayout&&this.D.setKeyboardLayout(a.keyboardLayout);return 15859712}stopStreaming(a){!this.D||1!==this.streamingState&&2!==this.streamingState||(a=null!==a&&void 0!==\na?a:15859712,k.i(\"{0a9be04}\",\"{ae7f61b}\",G(a)),this.streamingState=3,Yn(this,a,!0))}getStreamingState(){return this.streamingState}sendCustomMessage(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendCustomMessage(a);return!!this.D}setStreamingMaxBitrate(a,b,c){var d;null===(d=this.D)||void 0===d?void 0:d.setStreamingMaxBitrate(null!==b&&void 0!==b?b:0,a,c);return!!this.D}setDynamicStreamingMode(a,b,c){var d;null===(d=this.D)||void 0===d?void 0:d.setDrcDfcState(null!==b&&void 0!==b?b:0,a,c);return!!this.D}setKeyboardLayout(a){var b;\nnull===(b=this.D)||void 0===b?void 0:b.setKeyboardLayout(a);return!!this.D}setSupportedHidTypes(a){Dg(this.j,a)}setGamepadRsdmm(a){if(!this.D)return!1;dh(this.j,a);return!0}getVirtualInputController(){return this}getGamepadBitmap(){return rh(this.j)}captureUserInput(a,b){var c;null===(c=this.D)||void 0===c?void 0:c.toggleUserInput(a,b);return!!this.D}sendTextInput(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendTextInput(a);return!!this.D}getMicState(){return gj()}captureMic(a){if(!this.D)return!1;\n(this.m=a)?oj(this.g):jj(this.g);return!0}setVideoTransforms(a,b,c){var d;null===(d=this.D)||void 0===d?void 0:d.setVideoTransforms(a,b,c);return!!this.D}setUpstreamMedia(a,b){var c;return this.D?null===(c=this.D)||void 0===c?void 0:c.setUpstreamMedia(a,b):Promise.resolve(!1)}unsetUpstreamMedia(a){var b;return this.D?null===(b=this.D)||void 0===b?void 0:b.unsetUpstreamMedia(a):Promise.resolve(!1)}stopUpstreamMedia(a){var b;return this.D?null===(b=this.D)||void 0===b?void 0:b.stopUpstreamMedia(a):\nPromise.resolve(!1)}Gc(a){var b,c,d,e,f,g,h,l;let n=15859712;if(a.error)n=a.error.code,this.h.onStreamStartFailed(n),Yn(this,n);else if((null===(b=a.streamInfo)||void 0===b?0:b.length)&&(null===(c=a.streams)||void 0===c?0:c.length)){this.streamingState=2;b={streams:[],separateAudioStream:!!a.streams.find(m=>{const p=m.tracks.find(r=>\"video\"===r.kind);m=m.tracks.find(r=>\"audio\"===r.kind);return!p&&m})};for(const m of a.streamInfo)c={width:m.width,height:m.height,fps:m.fps,sdrHdrMode:m.sdrHdrMode,bitDepth:null!==\n(d=a.bitDepth)&&void 0!==d?d:8,codec:null===(e=this.D)||void 0===e?void 0:Wm(e),videoTagId:null!==(g=null===(f=this.K)||void 0===f?void 0:f.tagName)&&void 0!==g?g:\"\"},b.streams.push(c);this.h.onStreamStarted(b);this.isResume&&this.m&&this.captureMic(!0)}else n=3237093905,k.e(\"{0a9be04}\",\"{0cfb100}\"),this.h.onStreamStartFailed(n),Yn(this,n);Cj(Math.round(performance.now()-this.startTime),G(n),null!==(l=null===(h=this.D)||void 0===h?void 0:Wm(h))&&void 0!==l?l:\"UNKNOWN\");this.startTime=performance.now()}Cf(a){Yn(this,\na.error.code)}Df(){ao(this)}emit(a,...b){if(b.length)switch(a){case \"StreamingEvent\":this.h.onStreamWarning(b[0]);break;case \"StreamingQuality\":this.h.onStreamQuality(b[0]);break;case \"MicCapture\":if(this.h.onMicStateUpdate&&void 0!==b[0].state)this.h.onMicStateUpdate(b[0].state);break;case \"TextComposition\":this.h.onTextComposition(b[0]);break;case \"CustomMessage\":if(this.h.onCustomMessage)this.h.onCustomMessage(b[0]);break;case \"StreamStatsUpdate\":this.h.onStreamStatistics(b[0])}}addListener(){}removeListener(){}removeAllListeners(){}removeAllListenersOfEvent(){}hasListener(){return!0}setClientSupportsVirtualGamepad(){this.j.getVirtualGamepadHandler().enable()}handleVirtualGamepadState(a,\nb,c){this.j.getVirtualGamepadHandler().updateInput(a,b,c)}setVirtualKeyboardState(a){var b;null===(b=this.D)||void 0===b?void 0:b.setVirtualKeyboardState(a);return!!this.D}handleVirtualKeyInput(a){var b;null===(b=this.D)||void 0===b?void 0:b.sendKeyEvent(a);return!!this.D}};window.Ragnarok=window.Ragnarok||{};window.Ragnarok.GridApp=Wn;window.Ragnarok.ChooseStreamingSettings=function(a=0,b,c){return uf(a,b,vf(c))};window.Ragnarok.ChooseStreamingResolution=function(a=0,b){b=null===b||void 0===b?void 0:b.map(c=>({resolution:c,frameRate:60}));return uf(a,b,vf()).resolution};window.Ragnarok.InitializeUtils=function(){for(const a of Jf)a()};window.Ragnarok.GetSupportedAudioChannelCount=qf;window.Ragnarok.GetDeviceCapabilities=Xj;window.Ragnarok.getSupportedCodecs=kk;\nwindow.Ragnarok.VirtualButton={A:4096,B:8192,X:16384,Y:32768,LB:256,RB:512,LT:255,RT:65280,BACK:32,START:16,STICK_LEFT:64,STICK_RIGHT:128,DPAD_UP:1,DPAD_DOWN:2,DPAD_LEFT:4,DPAD_RIGHT:8};window.Ragnarok.VirtualGamepadHandler=zg;window.Ragnarok.ConfigureRagnarokSettings=df;window.Ragnarok.CHANGELIST=\"rel-66-17789033\";window.Ragnarok.AuthType={NONE:-1,JARVIS:0,JWT_GFN:1,JWT_PARTNER:2};window.Ragnarok.performHttpRequest=Ca;window.Ragnarok.AddPlatformTelemetry=function(a){Ob(a)};\nwindow.Ragnarok.IsFeatureSupported=Tj;window.Ragnarok.CalculateMaxBitrateKbps=function(a,b,c){return Vj(a,b,c)[0]};window.Ragnarok.CalculateDataUsage=function(a,b){return Wj(a,b)};window.Ragnarok.LogImpl=Xn;\nwindow.Ragnarok.EVENTS={SESSION_START_RESULT:\"SessionStartResult\",SESSION_STOP_RESULT:\"SessionStopResult\",ACTIVE_SESSIONS_RESULT:\"ActiveSessionsResult\",PROGRESS_UPDATE:\"ProgressUpdate\",SESSION_UPDATE:\"SessionUpdate\",STREAM_STOPPED:\"StreamStopped\",STREAMING_EVENT:\"StreamingEvent\",GETSESSIONRESULT:\"GetSessionResult\",GET_SESSION_RESULT:\"GetSessionResult\",LOG_EVENT:\"Log\",STREAMING_QUALITY:\"StreamingQuality\",MIC_CAPTURE:\"MicCapture\",CUSTOM_MESSAGE:\"CustomMessage\",TEXT_COMPOSITION:\"TextComposition\",STREAM_STATS_UPDATE:\"StreamStatsUpdate\",\nTELEMETRY_EVENT:\"TelemetryEvent\"};window.Ragnarok.HotkeyModifier={None:0,Ctrl:1,Alt:2,Meta:4,Shift:8,Default:128};window.Ragnarok.defaultInputConfigFlags=od;window.Ragnarok.StreamingProfilePreset={BALANCED:0,DATASAVER:1,COMPETITIVE:2};window.Ragnarok.TrackType=md;window.Ragnarok.STREAMING_STATE={RECONNECTING:\"reconnecting\",RECONNECTED:\"reconnected\"};window.Ragnarok.RNotificationCode=nd;window.Ragnarok.ScErrorCode=Zc;window.Ragnarok.configureSessionControlSettings=pc;\nwindow.Ragnarok.DeviceType={DESKTOP:\"DESKTOP\",LAPTOP:\"LAPTOP\",TV:\"TV\",PHONE:\"PHONE\",TABLET:\"TABLET\",CONSOLE:\"CONSOLE\"};window.Ragnarok.DeviceOS={WINDOWS:\"WINDOWS\",MACOS:\"MACOS\",SHIELD:\"SHIELD\",ANDROID:\"ANDROID\",IOS:\"IOS\",IPADOS:\"IPADOS\",CHROMEOS:\"CHROMEOS\",LINUX:\"LINUX\",TIZEN:\"TIZEN\",WEBOS:\"WEBOS\",TVOS:\"TVOS\",XBOX:\"XBOX\",STEAMOS:\"STEAMOS\",CCOS:\"CCOS\"};\nwindow.Ragnarok.NetworkType={OTHER:\"OTHER\",ETHERNET:\"ETHERNET\",UNKNOWN:\"UNKNOWN\",WIFI:\"WIFI\",WIFI_2_4:\"WIFI_2_4\",WIFI_5_0:\"WIFI_5_0\",MOBILE:\"MOBILE\",MOBILE_2G:\"MOBILE_2G\",MOBILE_3G:\"MOBILE_3G\",MOBILE_4G:\"MOBILE_4G\",MOBILE_5G:\"MOBILE_5G\",WIMAX:\"WIMAX\",BLUETOOTH:\"BLUETOOTH\"};window.Ragnarok.registerLogCallback=function(a){k.setLogCallback(a)};window.Ragnarok.LogLevel=$c;\nwindow.Ragnarok.createSessionControl=function(a){const b=new Yc;if(Ic(b,a))return b;throw Error(\"Session Control initialization failure.\");};window.Ragnarok.SdrHdrMode={SDR:0,HDR:1,EDR:2};window.Ragnarok.Usage={UNKNOWN:0,CONTROL:1,VIDEO:2,AUDIO:3,INPUT:4,CUSTOM:5,USB:6,RTSP:7,GAMESTREAM_CONTROL:8,GAMESTREAM_SECURE_CONTROL:9,SESSION_CONTROL:10,NETWORK_TEST_CONTROL:11,RTSPRU:12,AUDIO_INPUT:13,SIGNALING:14,MEDIA:15,RTSPS:16,BUNDLE:17};window.Ragnarok.Protocol={UNKNOWN:0,TCP:1,UDP:2};\nwindow.Ragnarok.AppLevelProtocol={UNKNOWN:0,RTSP:1,HTTP:2,RTSPRU:3,SOCKET:4,HTTPS:5,RTSPS:6};window.Ragnarok.AdState={UNKNOWN:0,NOT_STARTED:1,STARTED:2,PAUSED:3,RESUMED:4,FINISHED:5,CANCELED:6};window.Ragnarok.AdAction={UNKNOWN:0,START:1,PAUSE:2,RESUME:3,FINISH:4,CANCEL:5};window.Ragnarok.BitDepth={BIT_DEPTH_8:0,BIT_DEPTH_10:1};window.Ragnarok.ClientType={BROWSER:\"BROWSER\",GFNSDK:\"GFNSDK\",NATIVE:\"NATIVE\"};\nwindow.Ragnarok.SessionState={INITIALIZING:\"initializing\",READY_FOR_CONNECTION:\"ready_for_connection\",STREAMING:\"streaming\",PAUSED:\"paused\",RESUMING:\"resuming\",FINISHED:\"finished\",UNKNOWN:\"unknown\"};window.Ragnarok.SessionProgressState={CONNECTING:\"Connecting\",IN_QUEUE:\"InQueue\",CONFIGURING:\"Configuring\",PREVIOUS_SESSION_CLEANUP:\"PreviousSessionCleanup\",STARTING_STREAMER:\"StartingStreamer\"};window.Ragnarok.AppLaunchMode={Default:0,GamepadFriendly:1,TouchFriendly:2};\nwindow.Ragnarok.updateSessionParameters=function(a,b){var c;b=JSON.parse(b);a.monitorSettings=null!==(c=b.clientRequestMonitorSettings)&&void 0!==c?c:[];a.streamingFeatures=b.requestedStreamingFeatures};window.Ragnarok.isCancelCode=Bc;window.Ragnarok.isResumableSessionState=Cc;window.Ragnarok.getResumableSession=function(a,b){for(const c of a)if(c.appId===b&&Cc(c.state))return c};window.Ragnarok.SessionControlTelemetry=tc;window.Ragnarok.GsErrorCode=Zc;window.Ragnarok.GridServerSettings=M;\nwindow.Ragnarok.ConfigureGridServerSettings=function(a){pc(a)};window.Ragnarok.BrowserName={UNKNOWN:\"Unknown\",CHROME:\"Chrome\",SAFARI:\"Safari\",YANDEX:\"Yandex\",EDGE:\"Edge\",EDGE_LEGACY:\"Edge_Legacy\",FIREFOX:\"Firefox\",SAMSUNG:\"Samsung\",CHROMIUM:\"Chromium\",OPERA:\"Opera\",BRAVE:\"Brave\",SILK:\"Silk\",REACT:\"ReactNative\"};\nwindow.Ragnarok.PlatformName={UNKNOWN:\"Unknown\",CHROME_OS:\"ChromeOS\",WINDOWS:\"Windows\",MAC:\"macOS\",LINUX:\"Linux\",IOS:\"iOS\",IPADOS:\"iPadOS\",WEBOS:\"WebOS\",TIZEN:\"Tizen\",ANDROID:\"Android\",FIRETV:\"FireTV\",XBOX:\"Xbox\",FREEBSD:\"FreeBSD\",STEAMOS:\"SteamOS\",CCOS:\"ccOS\"};window.Ragnarok.getPlatformDetails=Rb;window.Ragnarok.DeviceModel={STEAMDECK:\"STEAMDECK\",XBOX_ONE:\"XBOXONE\",XBOX_SERIES:\"XBOXSERIES\",VISION_PRO:\"VISIONPRO\"};\nwindow.Ragnarok.DeviceVendor={APPLE:\"APPLE\",LG:\"LG\",SAMSUNG:\"SAMSUNG\",TIZEN_LICENSED:\"TIZENLICENSED\",MICROSOFT:\"MICROSOFT\",AMAZON:\"AMAZON\",HKMC:\"HKMC\",SONY:\"SONY\",PHILIPS:\"PHILIPS\",GOOGLE:\"GOOGLE\",NVIDIA:\"NVIDIA\",XIAOMI:\"XIAOMI\",TVISION:\"TVISION\",UNKNOWN:\"\"};window.Ragnarok.CLIENT_VERSION=\"29.0\";window.Ragnarok.CLIENT_IDENTIFICATION=\"GFN-PC\";window.Ragnarok.SESSIONMODIFY_ACTION={UNKNOWN:0,PAUSE:1,RESUME:2,Pg:3,Ng:4,Mg:5,Lg:6,Qg:7};\nwindow.Ragnarok.AudioFormat={UNKNOWN:0,STEREO:1,UP_TO_5_1_SURROUND_PCM:2,UP_TO_7_1_SURROUND_PCM:3};window.Ragnarok.ClientStreamer={CLASSIC:\"NVIDIA-CLASSIC\",WEBRTC:\"WEBRTC\"};window.Ragnarok.GS_EVENTS={ACTIVE_SESSIONS_RESULT:\"ActiveSessionsResult\",PROGRESS_UPDATE:\"ProgressUpdate\",SESSION_UPDATE:\"SessionUpdate\",TELEMETRY_EVENT:\"TelemetryEvent\",LOG_EVENT:\"Log\"};window.Ragnarok.GridServer=kd;window.Ragnarok.PassThruServer=ld;window.Ragnarok.VsyncType={OFF:0,ON:1,ADAPTIVE:2};\nwindow.Ragnarok.getDeviceCapabilities=Xj;window.Ragnarok.serializeDeviceCapabilities=function(a){return JSON.stringify(a)};window.Ragnarok.PayloadOSType={WINDOWS:\"Windows\",MACOS:\"MacOS\",SHIELD:\"Shield\",ANDROID:\"Android\",IOS:\"iOS\",IPADOS:\"iPadOS\",CHROMEOS:\"ChromeOS\",LINUX:\"Linux\",TIZEN:\"Tizen\",WEBOS:\"WebOS\",TVOS:\"tvOS\",XBOX:\"Xbox\",STEAMOS:\"SteamOS\",UNDEFINED:\"undefined\"};\nwindow.Ragnarok.PayloadBrowserType={CHROME:\"Chrome\",SAFARI:\"Safari\",YANDEX:\"Yandex\",EDGE:\"Edge\",EDGE_LEGACY:\"Edge_legacy\",FIREFOX:\"Firefox\",SAMSUNG:\"Samsung\",CHROMIUM:\"Chromium\",OPERA:\"Opera\",BRAVE:\"Brave\",SILK:\"Silk\",UNDEFINED:\"undefined\"};window.Ragnarok.PayloadDeviceType={DESKTOP:\"Desktop\",LAPTOP:\"Laptop\",TV:\"TV\",PHONE:\"Phone\",TABLET:\"Tablet\",SERVER:\"Server\",CONSOLE:\"Console\",UNDEFINED:\"undefined\"};\nwindow.Ragnarok.ClientHeaderOSType={WINDOWS:\"WINDOWS\",MACOS:\"MACOS\",SHIELD:\"SHIELD\",ANDROID:\"ANDROID\",IOS:\"IOS\",IPADOS:\"IPADOS\",CHROMEOS:\"CHROMEOS\",LINUX:\"LINUX\",TIZEN:\"TIZEN\",WEBOS:\"WEBOS\",XBOX:\"XBOX\",STEAMOS:\"STEAMOS\",UNKNOWN:\"UNKNOWN\"};window.Ragnarok.ClientHeaderBrowserType={CHROME:\"CHROME\",SAFARI:\"SAFARI\",YANDEX:\"YANDEX\",EDGE:\"EDGE\",EDGE_LEGACY:\"EDGE_LEGACY\",FIREFOX:\"FIREFOX\",SAMSUNG:\"SAMSUNG\",CHROMIUM:\"CHROMIUM\",OPERA:\"OPERA\",BRAVE:\"BRAVE\",SILK:\"SILK\",UNKNOWN:\"UNKNOWN\"};\nwindow.Ragnarok.ClientHeaderDeviceType={DESKTOP:\"DESKTOP\",LAPTOP:\"LAPTOP\",TV:\"TV\",PHONE:\"PHONE\",TABLET:\"TABLET\",CONSOLE:\"CONSOLE\",UNKNOWN:\"UNKNOWN\"};window.Ragnarok.translatePlatformDetailsForPayload=function(a){(null===ac||void 0===ac?void 0:ac.h)!=a&&(ac=new Wb(a));return ac.m};window.Ragnarok.translatePlatformDetailsForClientHeader=function(a){(null===ac||void 0===ac?void 0:ac.h)!=a&&(ac=new Wb(a));return ac.o};window.Ragnarok.getStreamerType=function(){return\"WEBRTC\"};\nwindow.Ragnarok.BrowserFeature={Streaming:0,MicCapture:1};window.Ragnarok.isFeatureSupported=Tj;window.Ragnarok.shouldDefaultEnableMic=Uj;window.Ragnarok.getRecommendedBitrate=Vj;\nwindow.Ragnarok.getStreamStartParameters=function(a){a=JSON.parse(a);const b={downstreamParams:[],signalConnectionInfo:{address:\"\",port:0},enableTouchInput:2===a.appLaunchMode,sessionId:a.sessionId,subSessionId:a.subSessionId,audioTagId:\"\",zoneAddress:a.zoneAddress,statTelemetryInfo:{appId:a.appId,zoneName:a.zoneName,gpuType:a.gpuType},streamingFeatures:a.finalizedStreamingFeatures};for(const c of a.monitorSettings)b.downstreamParams.push({width:c.widthInPixels,height:c.heightInPixels,fps:c.framesPerSecond,\nvideoTagId:\"\",sdrHdrMode:c.sdrHdrMode});for(const c of a.connectionInfo)switch(c.usage){case 14:b.signalConnectionInfo.address=c.ip;b.signalConnectionInfo.port=c.port;b.signalConnectionInfo.secure=5===c.appLevelProtocol;break;case 2:case 17:b.mediaConnectionInfo={address:c.ip,port:c.port}}return b};window.Ragnarok.estimateDataUsage=Wj;window.Ragnarok.NskTelemetry=Y;window.Ragnarok.createNskStreamClient=function(a,b,c){return new ho(a,b,c)};window.Ragnarok.configureRagnarokSettings=df;\nwindow.Ragnarok.getNetworkTypeDetector=function(){return Aj};\nwindow.Ragnarok.RErrorCode={Success:15859712,AuthProviderError:3237085185,InvalidOperation:3237085186,NoNetwork:3237089281,NetworkError:3237089282,GetActiveSessionServerError:3237089283,ExceptionHappened:3237089284,AuthTokenNotUpdated:3237093377,SessionFinishedState:3237093378,ResponseParseFailure:3237093379,GridAppNotInitialized:3237093380,InvalidServerResponse:3237093381,PutOrPostInProgress:3237093382,GridServerNotInitialized:3237093383,DOMExceptionInGridServer:3237093384,InvalidAdStateTransition:3237093386,\nSessionServerErrorBegin:3237093632,RequestForbidden:3237093634,ServerInternalTimeout:3237093635,ServerInternalError:3237093636,ServerInvalidRequest:3237093637,ServerInvalidRequestVersion:3237093638,SessionListLimitExceeded:3237093639,InvalidRequestDataMalformed:3237093640,InvalidRequestDataMissing:3237093641,RequestLimitExceeded:3237093642,SessionLimitExceeded:3237093643,InvalidRequestVersionOutOfDate:3237093644,SessionEntitledTimeExceeded:3237093645,AuthFailure:3237093646,InvalidAuthenticationMalformed:3237093647,\nInvalidAuthenticationExpired:3237093648,InvalidAuthenticationNotFound:3237093649,EntitlementFailure:3237093650,InvalidAppIdNotAvailable:3237093651,InvalidAppIdNotFound:3237093652,InvalidSessionIdMalformed:3237093653,InvalidSessionIdNotFound:3237093654,EulaUnAccepted:3237093655,MaintenanceStatus:3237093656,ServiceUnAvailable:3237093657,SteamGuardRequired:3237093658,SteamLoginRequired:3237093659,SteamGuardInvalid:3237093660,SteamProfilePrivate:3237093661,InvalidCountryCode:3237093662,InvalidLanguageCode:3237093663,\nMissingCountryCode:3237093664,MissingLanguageCode:3237093665,SessionNotPaused:3237093666,EmailNotVerified:3237093667,InvalidAuthenticationUnsupportedProtocol:3237093668,InvalidAuthenticationUnknownToken:3237093669,InvalidAuthenticationCredentials:3237093670,SessionNotPlaying:3237093671,InvalidServiceResponse:3237093672,AppPatching:3237093673,GameNotFound:3237093674,NotEnoughCredits:3237093675,InvitationOnlyRegistration:3237093676,RegionNotSupportedForRegistration:3237093677,SessionTerminatedByAnotherClient:3237093678,\nDeviceIdAlreadyUsed:3237093679,ServiceNotExist:3237093680,SessionExpired:3237093681,SessionLimitPerDeviceReached:3237093682,ForwardingZoneOutOfCapacity:3237093683,RegionNotSupportedIndefinitely:3237093684,RegionBanned:3237093685,RegionOnHoldForFree:3237093686,RegionOnHoldForPaid:3237093687,AppMaintenanceStatus:3237093688,ResourcePoolNotConfigured:3237093689,InsufficientVmCapacity:3237093690,InsufficientRouteCapacity:3237093691,InsufficientScratchSpaceCapacity:3237093692,RequiredSeatInstanceTypeNotSupported:3237093693,\nServerSessionQueueLengthExceeded:3237093694,RegionNotSupportedForStreaming:3237093695,SessionForwardRequestAllocationTimeExpired:3237093696,SessionForwardGameBinariesNotAvailable:3237093697,GameBinariesNotAvailableInRegion:3237093698,UekRetrievalFailed:3237093699,EntitlementFailureForResource:3237093700,SessionInQueueAbandoned:3237093701,MemberTerminated:3237093702,SessionRemovedFromQueueMaintenance:3237093703,ZoneMaintenanceStatus:3237093704,GuestModeCampaignDisabled:3237093705,RegionNotSupportedAnonymousAccess:3237093706,\nInstanceTypeNotSupportedInSingleRegion:3237093707,InvalidZoneForQueuedSession:3237093710,SessionWaitingAdsTimeExpired:3237093711,UserCancelledWatchingAds:3237093712,SessionServerErrorEnd:3237093887,StreamerErrorCategory:3237093888,StreamErrorGeneric:3237093889,StreamerSignInFailure:3237093890,StreamerHangingGetFailure:3237093891,StreamerNetworkError:3237093892,StreamerVideoPlayError:3237093893,StreamerIceConnectionFailed:3237093894,StreamerGetRemotePeerTimedOut:3237093895,StreamInputChannelError:3237093896,\nStreamCursorChannelError:3237093897,StreamControlChannelError:3237093898,StreamerReConnectionFailed:3237093899,StreamerNoVideoPacketsReceivedEver:3237093900,StreamerNoVideoFramesLossyNetwork:3237093901,StreamerSetSDPFailure:3237093902,StreamerNoLocalCandidates:3237093903,StreamerNoRemoteCandidates:3237093904,StreamerNoVideoTrack:3237093905,StreamerIceReConnectionFailed:3237093906,StreamerSignInTimeout:3237093907,StreamerSignInWorkerFailure:3237093908,StreamerNoTracksReceivedInSdp:3237093909,StreamerNvstSdpFailure:3237093910,\nStreamerNvstSdpParseFailure:3237093911,StreamerNoPeerInfo:3237093912,StreamerNoOffer:3237093913,StreamerNoAudioTrack:3237093914,StreamerInvalidRemoteConfigOverride:3237093915,StreamerInvalidServerOverride:3237093916,StreamerInvalidClientOverride:3237093917,StreamerConfigUpdateFailure:3237093918,StreamerInputChannelNotOpen:3237093919,StreamerCursorChannelNotOpen:3237093920,StreamerControlChannelNotOpen:3237093921,StreamerVideoAdapterInitTimeOut:3237093922,StreamerVideoFrameProviderInitTimeOut:3237093923,\nStreamerVideoEncoderInitTimeOut:3237093924,StreamerVideoSetupTimeOut:3237093925,StreamerNoStunResponsesReceived:3237093926,StreamerNoNominatedCandidatePairs:3237093927,StreamerNoSucceededCandidatePairs:3237093928,StreamGamepadChannelError:3237093929,StreamerGamepadChannelNotOpen:3237093936,StreamerNeedAudioElement:3237093937,SessionSetupCancelled:15867905,SessionSetupCancelledDuringQueuing:15867906,StreamerDataChannelClosing:15867907,SystemSleepDuringStreaming:15867908,SystemSleepDuringSessionSetup:15867909,\nPauseSession:15867910,DelayedSessionError:15867911,WebPageClosed:15867912,ClientDisconnectedUserIdle:15867913,UnhandledException:3237093392,NoInternetDuringSessionSetup:15868417,NoInternetDuringStreaming:15868418,StreamDisconnectedFromServer:15868672,ServerDisconnectedNoResponse:3237094145,ServerDisconnectedRemoteInputError:3237094146,ServerDisconnectedFrameGrabFailed:3237094147,ServerDisconnectedConfigUnAvailable:3237094148,ServerDisconnectedInvalidCommand:3237094149,ServerDisconnectedInvalidMouseState:3237094150,\nServerDisconnectedNetworkError:3237094151,ServerDisconnectedGameLaunchFailed:3237094152,ServerDisconnectedVideoFirstFrameSendFailed:3237094153,ServerDisconnectedVideoNextFrameSendFailed:3237094154,ServerDisconnectedFrameGrabTimedOut:3237094155,ServerDisconnectedFrameEncodeTimedOut:3237094156,ServerDisconnectedFrameSendTimedOut:3237094157,ServerDisconnectedNetworkTimedOut:3237094158,ServerDisconnectedPeerRemovedByServer:3237094159,ServerDisconnectedUnknownError:3237094160,ServerDisconnectedPeerRemovedBeforeStream:3237094161,\nServerDisconnectedIntended:15868704,ServerDisconnectedHotKey:15868705,ServerDisconnectedUserLoggedInDifferentAccount:15868706,ServerDisconnectedWindowedMode:15868707,ServerDisconnectedUserIdle:15868708,ServerDisconnectedUnAuthorizedProcessDetected:15868709,ServerDisconnectedMaliciousProcessDetected:15868710,ServerDisconnectedUnKnownProcessDetected:15868711,ServerDisconnectedMinerProcessDetected:15868712,ServerDisconnectedStreamingUnsupported:15868713,ServerDisconnectedAnotherClient:15868714,ServerDisconnectedCodeIntegrityViolation:15868715,\nServerDisconnectedUnauthorizedActivityDetected:15868716,ServerDisconnectedGameNotOwnedByUser:15868717,ServerDisconnectedProtectedContent:15868718,ServerDisconnectedDisplayTopologyChanged:15868719,ServerDisconnectedAbruptly:15868688,ServerDisconnectedUnknownFromPm:15868736,ServerDisconnectedUserEntitledMinutesExceeded:15868737,ServerDisconnectedClientReconnectTimeLimitExceeded:15868738,ServerDisconnectedOperatorCommandedTermination:15868739,ServerDisconnectedConcurrentSessionLimitExceeded:15868740,\nServerDisconnectedMaxSessionTimeLimitExceeded:15868741,ServerDisconnectedBifrostInitiatedSessionPause:15868742,ServerDisconnectedSystemCommandTermination:15868743,ServerDisconnectedMultipleLogin:15868744,ServerDisconnectedMaintenanceMode:15868745,ServerDisconnectedMultipleTab:15868752,InvalidVideoElement:3237094400,InvalidAudioElement:3237094401};window.Ragnarok.HidType={NONE:0,DS4:1,DS5:2};window.Ragnarok.InputType={None:0,Mouse:1,Keyboard:2,Gamepad:4,Touch:8,All:15};\nwindow.Ragnarok.VideoCodecType={H264:\"H264\",H265:\"H265\",AV1:\"AV1\",UNKNOWN:\"UNKNOWN\"};window.Ragnarok.MicState={UNINITIALIZED:0,PERMISSION_PENDING:1,PERMISSION_DENIED:2,STARTED:3,NO_SUITABLE_DEVICE:4,STOPPED:5,UNSUPPORTED:6,ERROR:7};window.Ragnarok.DynamicStreamingMode={NONE:0,DRC:1,DFC:2,ALL:3};window.Ragnarok.MediaTrackKind=md;window.Ragnarok.StreamStopReason={CLIENT_DISCONNECTED:0,SERVER_DISCONNECTED:1,NETWORK_ERROR:2,ERROR:3};window.Ragnarok.StreamWarningType=nd;\nwindow.Ragnarok.CursorType={SOFTWARE:0,HARDWARE:1,FREE:2};window.Ragnarok.StreamingState={NONE:0,STARTING_STREAM:1,STREAMING:2,STOPPING_STREAM:3,STOPPED:4};\n\n\n\n/***/ }),\n\n/***/ 134:\n/*!******************************************************************!*\\\n !*** ./node_modules/rtcpeerconnection-shim/rtcpeerconnection.js ***!\n \\******************************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n\nvar SDPUtils = __webpack_require__(/*! sdp */ 985);\n\nfunction fixStatsType(stat) {\n return {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[stat.type] || stat.type;\n}\n\nfunction writeMediaSection(transceiver, caps, type, stream, dtlsRole) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : dtlsRole || 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n var trackId = transceiver.rtpSender._initialTrackId ||\n transceiver.rtpSender.track.id;\n transceiver.rtpSender._initialTrackId = trackId;\n // spec.\n var msid = 'msid:' + (stream ? stream.id : '-') + ' ' +\n trackId + '\\r\\n';\n sdp += 'a=' + msid;\n // for Chrome. Legacy should no longer be required.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n\n // RTX\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\n}\n\n// Edge does not like\n// 1) stun: filtered after 14393 unless ?transport=udp is present\n// 2) turn: that does not have all of turn:host:port?transport=udp\n// 3) turn: with ipv6 addresses\n// 4) turn: occurring muliple times\nfunction filterIceServers(iceServers, edgeVersion) {\n var hasTurn = false;\n iceServers = JSON.parse(JSON.stringify(iceServers));\n return iceServers.filter(function(server) {\n if (server && (server.urls || server.url)) {\n var urls = server.urls || server.url;\n if (server.url && !server.urls) {\n console.warn('RTCIceServer.url is deprecated! Use urls instead.');\n }\n var isString = typeof urls === 'string';\n if (isString) {\n urls = [urls];\n }\n urls = urls.filter(function(url) {\n var validTurn = url.indexOf('turn:') === 0 &&\n url.indexOf('transport=udp') !== -1 &&\n url.indexOf('turn:[') === -1 &&\n !hasTurn;\n\n if (validTurn) {\n hasTurn = true;\n return true;\n }\n return url.indexOf('stun:') === 0 && edgeVersion >= 14393 &&\n url.indexOf('?transport=udp') === -1;\n });\n\n delete server.url;\n server.urls = isString ? urls[0] : urls;\n return !!urls.length;\n }\n });\n}\n\n// Determines the intersection of local and remote capabilities.\nfunction getCommonCapabilities(localCapabilities, remoteCapabilities) {\n var commonCapabilities = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: []\n };\n\n var findCodecByPayloadType = function(pt, codecs) {\n pt = parseInt(pt, 10);\n for (var i = 0; i < codecs.length; i++) {\n if (codecs[i].payloadType === pt ||\n codecs[i].preferredPayloadType === pt) {\n return codecs[i];\n }\n }\n };\n\n var rtxCapabilityMatches = function(lRtx, rRtx, lCodecs, rCodecs) {\n var lCodec = findCodecByPayloadType(lRtx.parameters.apt, lCodecs);\n var rCodec = findCodecByPayloadType(rRtx.parameters.apt, rCodecs);\n return lCodec && rCodec &&\n lCodec.name.toLowerCase() === rCodec.name.toLowerCase();\n };\n\n localCapabilities.codecs.forEach(function(lCodec) {\n for (var i = 0; i < remoteCapabilities.codecs.length; i++) {\n var rCodec = remoteCapabilities.codecs[i];\n if (lCodec.name.toLowerCase() === rCodec.name.toLowerCase() &&\n lCodec.clockRate === rCodec.clockRate) {\n if (lCodec.name.toLowerCase() === 'rtx' &&\n lCodec.parameters && rCodec.parameters.apt) {\n // for RTX we need to find the local rtx that has a apt\n // which points to the same local codec as the remote one.\n if (!rtxCapabilityMatches(lCodec, rCodec,\n localCapabilities.codecs, remoteCapabilities.codecs)) {\n continue;\n }\n }\n rCodec = JSON.parse(JSON.stringify(rCodec)); // deepcopy\n // number of channels is the highest common number of channels\n rCodec.numChannels = Math.min(lCodec.numChannels,\n rCodec.numChannels);\n // push rCodec so we reply with offerer payload type\n commonCapabilities.codecs.push(rCodec);\n\n // determine common feedback mechanisms\n rCodec.rtcpFeedback = rCodec.rtcpFeedback.filter(function(fb) {\n for (var j = 0; j < lCodec.rtcpFeedback.length; j++) {\n if (lCodec.rtcpFeedback[j].type === fb.type &&\n lCodec.rtcpFeedback[j].parameter === fb.parameter) {\n return true;\n }\n }\n return false;\n });\n // FIXME: also need to determine .parameters\n // see https://github.com/openpeer/ortc/issues/569\n break;\n }\n }\n });\n\n localCapabilities.headerExtensions.forEach(function(lHeaderExtension) {\n for (var i = 0; i < remoteCapabilities.headerExtensions.length;\n i++) {\n var rHeaderExtension = remoteCapabilities.headerExtensions[i];\n if (lHeaderExtension.uri === rHeaderExtension.uri) {\n commonCapabilities.headerExtensions.push(rHeaderExtension);\n break;\n }\n }\n });\n\n // FIXME: fecMechanisms\n return commonCapabilities;\n}\n\n// is action=setLocalDescription with type allowed in signalingState\nfunction isActionAllowedInSignalingState(action, type, signalingState) {\n return {\n offer: {\n setLocalDescription: ['stable', 'have-local-offer'],\n setRemoteDescription: ['stable', 'have-remote-offer']\n },\n answer: {\n setLocalDescription: ['have-remote-offer', 'have-local-pranswer'],\n setRemoteDescription: ['have-local-offer', 'have-remote-pranswer']\n }\n }[type][action].indexOf(signalingState) !== -1;\n}\n\nfunction maybeAddCandidate(iceTransport, candidate) {\n // Edge's internal representation adds some fields therefore\n // not all fieldѕ are taken into account.\n var alreadyAdded = iceTransport.getRemoteCandidates()\n .find(function(remoteCandidate) {\n return candidate.foundation === remoteCandidate.foundation &&\n candidate.ip === remoteCandidate.ip &&\n candidate.port === remoteCandidate.port &&\n candidate.priority === remoteCandidate.priority &&\n candidate.protocol === remoteCandidate.protocol &&\n candidate.type === remoteCandidate.type;\n });\n if (!alreadyAdded) {\n iceTransport.addRemoteCandidate(candidate);\n }\n return !alreadyAdded;\n}\n\n\nfunction makeError(name, description) {\n var e = new Error(description);\n e.name = name;\n // legacy error codes from https://heycam.github.io/webidl/#idl-DOMException-error-names\n e.code = {\n NotSupportedError: 9,\n InvalidStateError: 11,\n InvalidAccessError: 15,\n TypeError: undefined,\n OperationError: undefined\n }[name];\n return e;\n}\n\nmodule.exports = function(window, edgeVersion) {\n // https://w3c.github.io/mediacapture-main/#mediastream\n // Helper function to add the track to the stream and\n // dispatch the event ourselves.\n function addTrackToStreamAndFireEvent(track, stream) {\n stream.addTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('addtrack',\n {track: track}));\n }\n\n function removeTrackFromStreamAndFireEvent(track, stream) {\n stream.removeTrack(track);\n stream.dispatchEvent(new window.MediaStreamTrackEvent('removetrack',\n {track: track}));\n }\n\n function fireAddTrack(pc, track, receiver, streams) {\n var trackEvent = new Event('track');\n trackEvent.track = track;\n trackEvent.receiver = receiver;\n trackEvent.transceiver = {receiver: receiver};\n trackEvent.streams = streams;\n window.setTimeout(function() {\n pc._dispatchEvent('track', trackEvent);\n });\n }\n\n var RTCPeerConnection = function(config) {\n var pc = this;\n\n var _eventTarget = document.createDocumentFragment();\n ['addEventListener', 'removeEventListener', 'dispatchEvent']\n .forEach(function(method) {\n pc[method] = _eventTarget[method].bind(_eventTarget);\n });\n\n this.canTrickleIceCandidates = null;\n\n this.needNegotiation = false;\n\n this.localStreams = [];\n this.remoteStreams = [];\n\n this._localDescription = null;\n this._remoteDescription = null;\n\n this.signalingState = 'stable';\n this.iceConnectionState = 'new';\n this.connectionState = 'new';\n this.iceGatheringState = 'new';\n\n config = JSON.parse(JSON.stringify(config || {}));\n\n this.usingBundle = config.bundlePolicy === 'max-bundle';\n if (config.rtcpMuxPolicy === 'negotiate') {\n throw(makeError('NotSupportedError',\n 'rtcpMuxPolicy \\'negotiate\\' is not supported'));\n } else if (!config.rtcpMuxPolicy) {\n config.rtcpMuxPolicy = 'require';\n }\n\n switch (config.iceTransportPolicy) {\n case 'all':\n case 'relay':\n break;\n default:\n config.iceTransportPolicy = 'all';\n break;\n }\n\n switch (config.bundlePolicy) {\n case 'balanced':\n case 'max-compat':\n case 'max-bundle':\n break;\n default:\n config.bundlePolicy = 'balanced';\n break;\n }\n\n config.iceServers = filterIceServers(config.iceServers || [], edgeVersion);\n\n this._iceGatherers = [];\n if (config.iceCandidatePoolSize) {\n for (var i = config.iceCandidatePoolSize; i > 0; i--) {\n this._iceGatherers.push(new window.RTCIceGatherer({\n iceServers: config.iceServers,\n gatherPolicy: config.iceTransportPolicy\n }));\n }\n } else {\n config.iceCandidatePoolSize = 0;\n }\n\n this._config = config;\n\n // per-track iceGathers, iceTransports, dtlsTransports, rtpSenders, ...\n // everything that is needed to describe a SDP m-line.\n this.transceivers = [];\n\n this._sdpSessionId = SDPUtils.generateSessionId();\n this._sdpSessionVersion = 0;\n\n this._dtlsRole = undefined; // role for a=setup to use in answers.\n\n this._isClosed = false;\n };\n\n Object.defineProperty(RTCPeerConnection.prototype, 'localDescription', {\n configurable: true,\n get: function() {\n return this._localDescription;\n }\n });\n Object.defineProperty(RTCPeerConnection.prototype, 'remoteDescription', {\n configurable: true,\n get: function() {\n return this._remoteDescription;\n }\n });\n\n // set up event handlers on prototype\n RTCPeerConnection.prototype.onicecandidate = null;\n RTCPeerConnection.prototype.onaddstream = null;\n RTCPeerConnection.prototype.ontrack = null;\n RTCPeerConnection.prototype.onremovestream = null;\n RTCPeerConnection.prototype.onsignalingstatechange = null;\n RTCPeerConnection.prototype.oniceconnectionstatechange = null;\n RTCPeerConnection.prototype.onconnectionstatechange = null;\n RTCPeerConnection.prototype.onicegatheringstatechange = null;\n RTCPeerConnection.prototype.onnegotiationneeded = null;\n RTCPeerConnection.prototype.ondatachannel = null;\n\n RTCPeerConnection.prototype._dispatchEvent = function(name, event) {\n if (this._isClosed) {\n return;\n }\n this.dispatchEvent(event);\n if (typeof this['on' + name] === 'function') {\n this['on' + name](event);\n }\n };\n\n RTCPeerConnection.prototype._emitGatheringStateChange = function() {\n var event = new Event('icegatheringstatechange');\n this._dispatchEvent('icegatheringstatechange', event);\n };\n\n RTCPeerConnection.prototype.getConfiguration = function() {\n return this._config;\n };\n\n RTCPeerConnection.prototype.getLocalStreams = function() {\n return this.localStreams;\n };\n\n RTCPeerConnection.prototype.getRemoteStreams = function() {\n return this.remoteStreams;\n };\n\n // internal helper to create a transceiver object.\n // (which is not yet the same as the WebRTC 1.0 transceiver)\n RTCPeerConnection.prototype._createTransceiver = function(kind, doNotAdd) {\n var hasBundleTransport = this.transceivers.length > 0;\n var transceiver = {\n track: null,\n iceGatherer: null,\n iceTransport: null,\n dtlsTransport: null,\n localCapabilities: null,\n remoteCapabilities: null,\n rtpSender: null,\n rtpReceiver: null,\n kind: kind,\n mid: null,\n sendEncodingParameters: null,\n recvEncodingParameters: null,\n stream: null,\n associatedRemoteMediaStreams: [],\n wantReceive: true\n };\n if (this.usingBundle && hasBundleTransport) {\n transceiver.iceTransport = this.transceivers[0].iceTransport;\n transceiver.dtlsTransport = this.transceivers[0].dtlsTransport;\n } else {\n var transports = this._createIceAndDtlsTransports();\n transceiver.iceTransport = transports.iceTransport;\n transceiver.dtlsTransport = transports.dtlsTransport;\n }\n if (!doNotAdd) {\n this.transceivers.push(transceiver);\n }\n return transceiver;\n };\n\n RTCPeerConnection.prototype.addTrack = function(track, stream) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call addTrack on a closed peerconnection.');\n }\n\n var alreadyExists = this.transceivers.find(function(s) {\n return s.track === track;\n });\n\n if (alreadyExists) {\n throw makeError('InvalidAccessError', 'Track already exists.');\n }\n\n var transceiver;\n for (var i = 0; i < this.transceivers.length; i++) {\n if (!this.transceivers[i].track &&\n this.transceivers[i].kind === track.kind) {\n transceiver = this.transceivers[i];\n }\n }\n if (!transceiver) {\n transceiver = this._createTransceiver(track.kind);\n }\n\n this._maybeFireNegotiationNeeded();\n\n if (this.localStreams.indexOf(stream) === -1) {\n this.localStreams.push(stream);\n }\n\n transceiver.track = track;\n transceiver.stream = stream;\n transceiver.rtpSender = new window.RTCRtpSender(track,\n transceiver.dtlsTransport);\n return transceiver.rtpSender;\n };\n\n RTCPeerConnection.prototype.addStream = function(stream) {\n var pc = this;\n if (edgeVersion >= 15025) {\n stream.getTracks().forEach(function(track) {\n pc.addTrack(track, stream);\n });\n } else {\n // Clone is necessary for local demos mostly, attaching directly\n // to two different senders does not work (build 10547).\n // Fixed in 15025 (or earlier)\n var clonedStream = stream.clone();\n stream.getTracks().forEach(function(track, idx) {\n var clonedTrack = clonedStream.getTracks()[idx];\n track.addEventListener('enabled', function(event) {\n clonedTrack.enabled = event.enabled;\n });\n });\n clonedStream.getTracks().forEach(function(track) {\n pc.addTrack(track, clonedStream);\n });\n }\n };\n\n RTCPeerConnection.prototype.removeTrack = function(sender) {\n if (this._isClosed) {\n throw makeError('InvalidStateError',\n 'Attempted to call removeTrack on a closed peerconnection.');\n }\n\n if (!(sender instanceof window.RTCRtpSender)) {\n throw new TypeError('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.');\n }\n\n var transceiver = this.transceivers.find(function(t) {\n return t.rtpSender === sender;\n });\n\n if (!transceiver) {\n throw makeError('InvalidAccessError',\n 'Sender was not created by this connection.');\n }\n var stream = transceiver.stream;\n\n transceiver.rtpSender.stop();\n transceiver.rtpSender = null;\n transceiver.track = null;\n transceiver.stream = null;\n\n // remove the stream from the set of local streams\n var localStreams = this.transceivers.map(function(t) {\n return t.stream;\n });\n if (localStreams.indexOf(stream) === -1 &&\n this.localStreams.indexOf(stream) > -1) {\n this.localStreams.splice(this.localStreams.indexOf(stream), 1);\n }\n\n this._maybeFireNegotiationNeeded();\n };\n\n RTCPeerConnection.prototype.removeStream = function(stream) {\n var pc = this;\n stream.getTracks().forEach(function(track) {\n var sender = pc.getSenders().find(function(s) {\n return s.track === track;\n });\n if (sender) {\n pc.removeTrack(sender);\n }\n });\n };\n\n RTCPeerConnection.prototype.getSenders = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpSender;\n })\n .map(function(transceiver) {\n return transceiver.rtpSender;\n });\n };\n\n RTCPeerConnection.prototype.getReceivers = function() {\n return this.transceivers.filter(function(transceiver) {\n return !!transceiver.rtpReceiver;\n })\n .map(function(transceiver) {\n return transceiver.rtpReceiver;\n });\n };\n\n\n RTCPeerConnection.prototype._createIceGatherer = function(sdpMLineIndex,\n usingBundle) {\n var pc = this;\n if (usingBundle && sdpMLineIndex > 0) {\n return this.transceivers[0].iceGatherer;\n } else if (this._iceGatherers.length) {\n return this._iceGatherers.shift();\n }\n var iceGatherer = new window.RTCIceGatherer({\n iceServers: this._config.iceServers,\n gatherPolicy: this._config.iceTransportPolicy\n });\n Object.defineProperty(iceGatherer, 'state',\n {value: 'new', writable: true}\n );\n\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = [];\n this.transceivers[sdpMLineIndex].bufferCandidates = function(event) {\n var end = !event.candidate || Object.keys(event.candidate).length === 0;\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n iceGatherer.state = end ? 'completed' : 'gathering';\n if (pc.transceivers[sdpMLineIndex].bufferedCandidateEvents !== null) {\n pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event);\n }\n };\n iceGatherer.addEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n return iceGatherer;\n };\n\n // start gathering from an RTCIceGatherer.\n RTCPeerConnection.prototype._gather = function(mid, sdpMLineIndex) {\n var pc = this;\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer.onlocalcandidate) {\n return;\n }\n var bufferedCandidateEvents =\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents;\n this.transceivers[sdpMLineIndex].bufferedCandidateEvents = null;\n iceGatherer.removeEventListener('localcandidate',\n this.transceivers[sdpMLineIndex].bufferCandidates);\n iceGatherer.onlocalcandidate = function(evt) {\n if (pc.usingBundle && sdpMLineIndex > 0) {\n // if we know that we use bundle we can drop candidates with\n // ѕdpMLineIndex > 0. If we don't do this then our state gets\n // confused since we dispose the extra ice gatherer.\n return;\n }\n var event = new Event('icecandidate');\n event.candidate = {sdpMid: mid, sdpMLineIndex: sdpMLineIndex};\n\n var cand = evt.candidate;\n // Edge emits an empty object for RTCIceCandidateComplete‥\n var end = !cand || Object.keys(cand).length === 0;\n if (end) {\n // polyfill since RTCIceGatherer.state is not implemented in\n // Edge 10547 yet.\n if (iceGatherer.state === 'new' || iceGatherer.state === 'gathering') {\n iceGatherer.state = 'completed';\n }\n } else {\n if (iceGatherer.state === 'new') {\n iceGatherer.state = 'gathering';\n }\n // RTCIceCandidate doesn't have a component, needs to be added\n cand.component = 1;\n // also the usernameFragment. TODO: update SDP to take both variants.\n cand.ufrag = iceGatherer.getLocalParameters().usernameFragment;\n\n var serializedCandidate = SDPUtils.writeCandidate(cand);\n event.candidate = Object.assign(event.candidate,\n SDPUtils.parseCandidate(serializedCandidate));\n\n event.candidate.candidate = serializedCandidate;\n event.candidate.toJSON = function() {\n return {\n candidate: event.candidate.candidate,\n sdpMid: event.candidate.sdpMid,\n sdpMLineIndex: event.candidate.sdpMLineIndex,\n usernameFragment: event.candidate.usernameFragment\n };\n };\n }\n\n // update local description.\n var sections = SDPUtils.getMediaSections(pc._localDescription.sdp);\n if (!end) {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=' + event.candidate.candidate + '\\r\\n';\n } else {\n sections[event.candidate.sdpMLineIndex] +=\n 'a=end-of-candidates\\r\\n';\n }\n pc._localDescription.sdp =\n SDPUtils.getDescription(pc._localDescription.sdp) +\n sections.join('');\n var complete = pc.transceivers.every(function(transceiver) {\n return transceiver.iceGatherer &&\n transceiver.iceGatherer.state === 'completed';\n });\n\n if (pc.iceGatheringState !== 'gathering') {\n pc.iceGatheringState = 'gathering';\n pc._emitGatheringStateChange();\n }\n\n // Emit candidate. Also emit null candidate when all gatherers are\n // complete.\n if (!end) {\n pc._dispatchEvent('icecandidate', event);\n }\n if (complete) {\n pc._dispatchEvent('icecandidate', new Event('icecandidate'));\n pc.iceGatheringState = 'complete';\n pc._emitGatheringStateChange();\n }\n };\n\n // emit already gathered candidates.\n window.setTimeout(function() {\n bufferedCandidateEvents.forEach(function(e) {\n iceGatherer.onlocalcandidate(e);\n });\n }, 0);\n };\n\n // Create ICE transport and DTLS transport.\n RTCPeerConnection.prototype._createIceAndDtlsTransports = function() {\n var pc = this;\n var iceTransport = new window.RTCIceTransport(null);\n iceTransport.onicestatechange = function() {\n pc._updateIceConnectionState();\n pc._updateConnectionState();\n };\n\n var dtlsTransport = new window.RTCDtlsTransport(iceTransport);\n dtlsTransport.ondtlsstatechange = function() {\n pc._updateConnectionState();\n };\n dtlsTransport.onerror = function() {\n // onerror does not set state to failed by itself.\n Object.defineProperty(dtlsTransport, 'state',\n {value: 'failed', writable: true});\n pc._updateConnectionState();\n };\n\n return {\n iceTransport: iceTransport,\n dtlsTransport: dtlsTransport\n };\n };\n\n // Destroy ICE gatherer, ICE transport and DTLS transport.\n // Without triggering the callbacks.\n RTCPeerConnection.prototype._disposeIceAndDtlsTransports = function(\n sdpMLineIndex) {\n var iceGatherer = this.transceivers[sdpMLineIndex].iceGatherer;\n if (iceGatherer) {\n delete iceGatherer.onlocalcandidate;\n delete this.transceivers[sdpMLineIndex].iceGatherer;\n }\n var iceTransport = this.transceivers[sdpMLineIndex].iceTransport;\n if (iceTransport) {\n delete iceTransport.onicestatechange;\n delete this.transceivers[sdpMLineIndex].iceTransport;\n }\n var dtlsTransport = this.transceivers[sdpMLineIndex].dtlsTransport;\n if (dtlsTransport) {\n delete dtlsTransport.ondtlsstatechange;\n delete dtlsTransport.onerror;\n delete this.transceivers[sdpMLineIndex].dtlsTransport;\n }\n };\n\n // Start the RTP Sender and Receiver for a transceiver.\n RTCPeerConnection.prototype._transceive = function(transceiver,\n send, recv) {\n var params = getCommonCapabilities(transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n if (send && transceiver.rtpSender) {\n params.encodings = transceiver.sendEncodingParameters;\n params.rtcp = {\n cname: SDPUtils.localCName,\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.recvEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.recvEncodingParameters[0].ssrc;\n }\n transceiver.rtpSender.send(params);\n }\n if (recv && transceiver.rtpReceiver && params.codecs.length > 0) {\n // remove RTX field in Edge 14942\n if (transceiver.kind === 'video'\n && transceiver.recvEncodingParameters\n && edgeVersion < 15019) {\n transceiver.recvEncodingParameters.forEach(function(p) {\n delete p.rtx;\n });\n }\n if (transceiver.recvEncodingParameters.length) {\n params.encodings = transceiver.recvEncodingParameters;\n } else {\n params.encodings = [{}];\n }\n params.rtcp = {\n compound: transceiver.rtcpParameters.compound\n };\n if (transceiver.rtcpParameters.cname) {\n params.rtcp.cname = transceiver.rtcpParameters.cname;\n }\n if (transceiver.sendEncodingParameters.length) {\n params.rtcp.ssrc = transceiver.sendEncodingParameters[0].ssrc;\n }\n transceiver.rtpReceiver.receive(params);\n }\n };\n\n RTCPeerConnection.prototype.setLocalDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setLocalDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set local ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var sections;\n var sessionpart;\n if (description.type === 'offer') {\n // VERY limited support for SDP munging. Limited to:\n // * changing the order of codecs\n sections = SDPUtils.splitSections(description.sdp);\n sessionpart = sections.shift();\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var caps = SDPUtils.parseRtpParameters(mediaSection);\n pc.transceivers[sdpMLineIndex].localCapabilities = caps;\n });\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n });\n } else if (description.type === 'answer') {\n sections = SDPUtils.splitSections(pc._remoteDescription.sdp);\n sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var transceiver = pc.transceivers[sdpMLineIndex];\n var iceGatherer = transceiver.iceGatherer;\n var iceTransport = transceiver.iceTransport;\n var dtlsTransport = transceiver.dtlsTransport;\n var localCapabilities = transceiver.localCapabilities;\n var remoteCapabilities = transceiver.remoteCapabilities;\n\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n\n if (!rejected && !transceiver.rejected) {\n var remoteIceParameters = SDPUtils.getIceParameters(\n mediaSection, sessionpart);\n var remoteDtlsParameters = SDPUtils.getDtlsParameters(\n mediaSection, sessionpart);\n if (isIceLite) {\n remoteDtlsParameters.role = 'server';\n }\n\n if (!pc.usingBundle || sdpMLineIndex === 0) {\n pc._gather(transceiver.mid, sdpMLineIndex);\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n isIceLite ? 'controlling' : 'controlled');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // Calculate intersection of capabilities.\n var params = getCommonCapabilities(localCapabilities,\n remoteCapabilities);\n\n // Start the RTCRtpSender. The RTCRtpReceiver for this\n // transceiver has already been started in setRemoteDescription.\n pc._transceive(transceiver,\n params.codecs.length > 0,\n false);\n }\n });\n }\n\n pc._localDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-local-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.setRemoteDescription = function(description) {\n var pc = this;\n\n // Note: pranswer is not supported.\n if (['offer', 'answer'].indexOf(description.type) === -1) {\n return Promise.reject(makeError('TypeError',\n 'Unsupported type \"' + description.type + '\"'));\n }\n\n if (!isActionAllowedInSignalingState('setRemoteDescription',\n description.type, pc.signalingState) || pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not set remote ' + description.type +\n ' in state ' + pc.signalingState));\n }\n\n var streams = {};\n pc.remoteStreams.forEach(function(stream) {\n streams[stream.id] = stream;\n });\n var receiverList = [];\n var sections = SDPUtils.splitSections(description.sdp);\n var sessionpart = sections.shift();\n var isIceLite = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-lite').length > 0;\n var usingBundle = SDPUtils.matchPrefix(sessionpart,\n 'a=group:BUNDLE ').length > 0;\n pc.usingBundle = usingBundle;\n var iceOptions = SDPUtils.matchPrefix(sessionpart,\n 'a=ice-options:')[0];\n if (iceOptions) {\n pc.canTrickleIceCandidates = iceOptions.substr(14).split(' ')\n .indexOf('trickle') >= 0;\n } else {\n pc.canTrickleIceCandidates = false;\n }\n\n sections.forEach(function(mediaSection, sdpMLineIndex) {\n var lines = SDPUtils.splitLines(mediaSection);\n var kind = SDPUtils.getKind(mediaSection);\n // treat bundle-only as not-rejected.\n var rejected = SDPUtils.isRejected(mediaSection) &&\n SDPUtils.matchPrefix(mediaSection, 'a=bundle-only').length === 0;\n var protocol = lines[0].substr(2).split(' ')[2];\n\n var direction = SDPUtils.getDirection(mediaSection, sessionpart);\n var remoteMsid = SDPUtils.parseMsid(mediaSection);\n\n var mid = SDPUtils.getMid(mediaSection) || SDPUtils.generateIdentifier();\n\n // Reject datachannels which are not implemented yet.\n if (rejected || (kind === 'application' && (protocol === 'DTLS/SCTP' ||\n protocol === 'UDP/DTLS/SCTP'))) {\n // TODO: this is dangerous in the case where a non-rejected m-line\n // becomes rejected.\n pc.transceivers[sdpMLineIndex] = {\n mid: mid,\n kind: kind,\n protocol: protocol,\n rejected: true\n };\n return;\n }\n\n if (!rejected && pc.transceivers[sdpMLineIndex] &&\n pc.transceivers[sdpMLineIndex].rejected) {\n // recycle a rejected transceiver.\n pc.transceivers[sdpMLineIndex] = pc._createTransceiver(kind, true);\n }\n\n var transceiver;\n var iceGatherer;\n var iceTransport;\n var dtlsTransport;\n var rtpReceiver;\n var sendEncodingParameters;\n var recvEncodingParameters;\n var localCapabilities;\n\n var track;\n // FIXME: ensure the mediaSection has rtcp-mux set.\n var remoteCapabilities = SDPUtils.parseRtpParameters(mediaSection);\n var remoteIceParameters;\n var remoteDtlsParameters;\n if (!rejected) {\n remoteIceParameters = SDPUtils.getIceParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters = SDPUtils.getDtlsParameters(mediaSection,\n sessionpart);\n remoteDtlsParameters.role = 'client';\n }\n recvEncodingParameters =\n SDPUtils.parseRtpEncodingParameters(mediaSection);\n\n var rtcpParameters = SDPUtils.parseRtcpParameters(mediaSection);\n\n var isComplete = SDPUtils.matchPrefix(mediaSection,\n 'a=end-of-candidates', sessionpart).length > 0;\n var cands = SDPUtils.matchPrefix(mediaSection, 'a=candidate:')\n .map(function(cand) {\n return SDPUtils.parseCandidate(cand);\n })\n .filter(function(cand) {\n return cand.component === 1;\n });\n\n // Check if we can use BUNDLE and dispose transports.\n if ((description.type === 'offer' || description.type === 'answer') &&\n !rejected && usingBundle && sdpMLineIndex > 0 &&\n pc.transceivers[sdpMLineIndex]) {\n pc._disposeIceAndDtlsTransports(sdpMLineIndex);\n pc.transceivers[sdpMLineIndex].iceGatherer =\n pc.transceivers[0].iceGatherer;\n pc.transceivers[sdpMLineIndex].iceTransport =\n pc.transceivers[0].iceTransport;\n pc.transceivers[sdpMLineIndex].dtlsTransport =\n pc.transceivers[0].dtlsTransport;\n if (pc.transceivers[sdpMLineIndex].rtpSender) {\n pc.transceivers[sdpMLineIndex].rtpSender.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n if (pc.transceivers[sdpMLineIndex].rtpReceiver) {\n pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(\n pc.transceivers[0].dtlsTransport);\n }\n }\n if (description.type === 'offer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex] ||\n pc._createTransceiver(kind);\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n usingBundle);\n }\n\n if (cands.length && transceiver.iceTransport.state === 'new') {\n if (isComplete && (!usingBundle || sdpMLineIndex === 0)) {\n transceiver.iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n localCapabilities = window.RTCRtpReceiver.getCapabilities(kind);\n\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n\n sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 2) * 1001\n }];\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n var isNewTrack = false;\n if (direction === 'sendrecv' || direction === 'sendonly') {\n isNewTrack = !transceiver.rtpReceiver;\n rtpReceiver = transceiver.rtpReceiver ||\n new window.RTCRtpReceiver(transceiver.dtlsTransport, kind);\n\n if (isNewTrack) {\n var stream;\n track = rtpReceiver.track;\n // FIXME: does not work with Plan B.\n if (remoteMsid && remoteMsid.stream === '-') {\n // no-op. a stream id of '-' means: no associated stream.\n } else if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n Object.defineProperty(streams[remoteMsid.stream], 'id', {\n get: function() {\n return remoteMsid.stream;\n }\n });\n }\n Object.defineProperty(track, 'id', {\n get: function() {\n return remoteMsid.track;\n }\n });\n stream = streams[remoteMsid.stream];\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n stream = streams.default;\n }\n if (stream) {\n addTrackToStreamAndFireEvent(track, stream);\n transceiver.associatedRemoteMediaStreams.push(stream);\n }\n receiverList.push([track, rtpReceiver, stream]);\n }\n } else if (transceiver.rtpReceiver && transceiver.rtpReceiver.track) {\n transceiver.associatedRemoteMediaStreams.forEach(function(s) {\n var nativeTrack = s.getTracks().find(function(t) {\n return t.id === transceiver.rtpReceiver.track.id;\n });\n if (nativeTrack) {\n removeTrackFromStreamAndFireEvent(nativeTrack, s);\n }\n });\n transceiver.associatedRemoteMediaStreams = [];\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.remoteCapabilities = remoteCapabilities;\n transceiver.rtpReceiver = rtpReceiver;\n transceiver.rtcpParameters = rtcpParameters;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n transceiver.recvEncodingParameters = recvEncodingParameters;\n\n // Start the RTCRtpReceiver now. The RTPSender is started in\n // setLocalDescription.\n pc._transceive(pc.transceivers[sdpMLineIndex],\n false,\n isNewTrack);\n } else if (description.type === 'answer' && !rejected) {\n transceiver = pc.transceivers[sdpMLineIndex];\n iceGatherer = transceiver.iceGatherer;\n iceTransport = transceiver.iceTransport;\n dtlsTransport = transceiver.dtlsTransport;\n rtpReceiver = transceiver.rtpReceiver;\n sendEncodingParameters = transceiver.sendEncodingParameters;\n localCapabilities = transceiver.localCapabilities;\n\n pc.transceivers[sdpMLineIndex].recvEncodingParameters =\n recvEncodingParameters;\n pc.transceivers[sdpMLineIndex].remoteCapabilities =\n remoteCapabilities;\n pc.transceivers[sdpMLineIndex].rtcpParameters = rtcpParameters;\n\n if (cands.length && iceTransport.state === 'new') {\n if ((isIceLite || isComplete) &&\n (!usingBundle || sdpMLineIndex === 0)) {\n iceTransport.setRemoteCandidates(cands);\n } else {\n cands.forEach(function(candidate) {\n maybeAddCandidate(transceiver.iceTransport, candidate);\n });\n }\n }\n\n if (!usingBundle || sdpMLineIndex === 0) {\n if (iceTransport.state === 'new') {\n iceTransport.start(iceGatherer, remoteIceParameters,\n 'controlling');\n }\n if (dtlsTransport.state === 'new') {\n dtlsTransport.start(remoteDtlsParameters);\n }\n }\n\n // If the offer contained RTX but the answer did not,\n // remove RTX from sendEncodingParameters.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n pc._transceive(transceiver,\n direction === 'sendrecv' || direction === 'recvonly',\n direction === 'sendrecv' || direction === 'sendonly');\n\n // TODO: rewrite to use http://w3c.github.io/webrtc-pc/#set-associated-remote-streams\n if (rtpReceiver &&\n (direction === 'sendrecv' || direction === 'sendonly')) {\n track = rtpReceiver.track;\n if (remoteMsid) {\n if (!streams[remoteMsid.stream]) {\n streams[remoteMsid.stream] = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams[remoteMsid.stream]);\n receiverList.push([track, rtpReceiver, streams[remoteMsid.stream]]);\n } else {\n if (!streams.default) {\n streams.default = new window.MediaStream();\n }\n addTrackToStreamAndFireEvent(track, streams.default);\n receiverList.push([track, rtpReceiver, streams.default]);\n }\n } else {\n // FIXME: actually the receiver should be created later.\n delete transceiver.rtpReceiver;\n }\n }\n });\n\n if (pc._dtlsRole === undefined) {\n pc._dtlsRole = description.type === 'offer' ? 'active' : 'passive';\n }\n\n pc._remoteDescription = {\n type: description.type,\n sdp: description.sdp\n };\n if (description.type === 'offer') {\n pc._updateSignalingState('have-remote-offer');\n } else {\n pc._updateSignalingState('stable');\n }\n Object.keys(streams).forEach(function(sid) {\n var stream = streams[sid];\n if (stream.getTracks().length) {\n if (pc.remoteStreams.indexOf(stream) === -1) {\n pc.remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n window.setTimeout(function() {\n pc._dispatchEvent('addstream', event);\n });\n }\n\n receiverList.forEach(function(item) {\n var track = item[0];\n var receiver = item[1];\n if (stream.id !== item[2].id) {\n return;\n }\n fireAddTrack(pc, track, receiver, [stream]);\n });\n }\n });\n receiverList.forEach(function(item) {\n if (item[2]) {\n return;\n }\n fireAddTrack(pc, item[0], item[1], []);\n });\n\n // check whether addIceCandidate({}) was called within four seconds after\n // setRemoteDescription.\n window.setTimeout(function() {\n if (!(pc && pc.transceivers)) {\n return;\n }\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport &&\n transceiver.iceTransport.state === 'new' &&\n transceiver.iceTransport.getRemoteCandidates().length > 0) {\n console.warn('Timeout for addRemoteCandidate. Consider sending ' +\n 'an end-of-candidates notification');\n transceiver.iceTransport.addRemoteCandidate({});\n }\n });\n }, 4000);\n\n return Promise.resolve();\n };\n\n RTCPeerConnection.prototype.close = function() {\n this.transceivers.forEach(function(transceiver) {\n /* not yet\n if (transceiver.iceGatherer) {\n transceiver.iceGatherer.close();\n }\n */\n if (transceiver.iceTransport) {\n transceiver.iceTransport.stop();\n }\n if (transceiver.dtlsTransport) {\n transceiver.dtlsTransport.stop();\n }\n if (transceiver.rtpSender) {\n transceiver.rtpSender.stop();\n }\n if (transceiver.rtpReceiver) {\n transceiver.rtpReceiver.stop();\n }\n });\n // FIXME: clean up tracks, local streams, remote streams, etc\n this._isClosed = true;\n this._updateSignalingState('closed');\n };\n\n // Update the signaling state.\n RTCPeerConnection.prototype._updateSignalingState = function(newState) {\n this.signalingState = newState;\n var event = new Event('signalingstatechange');\n this._dispatchEvent('signalingstatechange', event);\n };\n\n // Determine whether to fire the negotiationneeded event.\n RTCPeerConnection.prototype._maybeFireNegotiationNeeded = function() {\n var pc = this;\n if (this.signalingState !== 'stable' || this.needNegotiation === true) {\n return;\n }\n this.needNegotiation = true;\n window.setTimeout(function() {\n if (pc.needNegotiation) {\n pc.needNegotiation = false;\n var event = new Event('negotiationneeded');\n pc._dispatchEvent('negotiationneeded', event);\n }\n }, 0);\n };\n\n // Update the ice connection state.\n RTCPeerConnection.prototype._updateIceConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n checking: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n }\n });\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.checking > 0) {\n newState = 'checking';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n } else if (states.completed > 0) {\n newState = 'completed';\n }\n\n if (newState !== this.iceConnectionState) {\n this.iceConnectionState = newState;\n var event = new Event('iceconnectionstatechange');\n this._dispatchEvent('iceconnectionstatechange', event);\n }\n };\n\n // Update the connection state.\n RTCPeerConnection.prototype._updateConnectionState = function() {\n var newState;\n var states = {\n 'new': 0,\n closed: 0,\n connecting: 0,\n connected: 0,\n completed: 0,\n disconnected: 0,\n failed: 0\n };\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.iceTransport && transceiver.dtlsTransport &&\n !transceiver.rejected) {\n states[transceiver.iceTransport.state]++;\n states[transceiver.dtlsTransport.state]++;\n }\n });\n // ICETransport.completed and connected are the same for this purpose.\n states.connected += states.completed;\n\n newState = 'new';\n if (states.failed > 0) {\n newState = 'failed';\n } else if (states.connecting > 0) {\n newState = 'connecting';\n } else if (states.disconnected > 0) {\n newState = 'disconnected';\n } else if (states.new > 0) {\n newState = 'new';\n } else if (states.connected > 0) {\n newState = 'connected';\n }\n\n if (newState !== this.connectionState) {\n this.connectionState = newState;\n var event = new Event('connectionstatechange');\n this._dispatchEvent('connectionstatechange', event);\n }\n };\n\n RTCPeerConnection.prototype.createOffer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createOffer after close'));\n }\n\n var numAudioTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'audio';\n }).length;\n var numVideoTracks = pc.transceivers.filter(function(t) {\n return t.kind === 'video';\n }).length;\n\n // Determine number of audio and video tracks we need to send/recv.\n var offerOptions = arguments[0];\n if (offerOptions) {\n // Reject Chrome legacy constraints.\n if (offerOptions.mandatory || offerOptions.optional) {\n throw new TypeError(\n 'Legacy mandatory/optional constraints not supported.');\n }\n if (offerOptions.offerToReceiveAudio !== undefined) {\n if (offerOptions.offerToReceiveAudio === true) {\n numAudioTracks = 1;\n } else if (offerOptions.offerToReceiveAudio === false) {\n numAudioTracks = 0;\n } else {\n numAudioTracks = offerOptions.offerToReceiveAudio;\n }\n }\n if (offerOptions.offerToReceiveVideo !== undefined) {\n if (offerOptions.offerToReceiveVideo === true) {\n numVideoTracks = 1;\n } else if (offerOptions.offerToReceiveVideo === false) {\n numVideoTracks = 0;\n } else {\n numVideoTracks = offerOptions.offerToReceiveVideo;\n }\n }\n }\n\n pc.transceivers.forEach(function(transceiver) {\n if (transceiver.kind === 'audio') {\n numAudioTracks--;\n if (numAudioTracks < 0) {\n transceiver.wantReceive = false;\n }\n } else if (transceiver.kind === 'video') {\n numVideoTracks--;\n if (numVideoTracks < 0) {\n transceiver.wantReceive = false;\n }\n }\n });\n\n // Create M-lines for recvonly streams.\n while (numAudioTracks > 0 || numVideoTracks > 0) {\n if (numAudioTracks > 0) {\n pc._createTransceiver('audio');\n numAudioTracks--;\n }\n if (numVideoTracks > 0) {\n pc._createTransceiver('video');\n numVideoTracks--;\n }\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n // For each track, create an ice gatherer, ice transport,\n // dtls transport, potentially rtpsender and rtpreceiver.\n var track = transceiver.track;\n var kind = transceiver.kind;\n var mid = transceiver.mid || SDPUtils.generateIdentifier();\n transceiver.mid = mid;\n\n if (!transceiver.iceGatherer) {\n transceiver.iceGatherer = pc._createIceGatherer(sdpMLineIndex,\n pc.usingBundle);\n }\n\n var localCapabilities = window.RTCRtpSender.getCapabilities(kind);\n // filter RTX until additional stuff needed for RTX is implemented\n // in adapter.js\n if (edgeVersion < 15019) {\n localCapabilities.codecs = localCapabilities.codecs.filter(\n function(codec) {\n return codec.name !== 'rtx';\n });\n }\n localCapabilities.codecs.forEach(function(codec) {\n // work around https://bugs.chromium.org/p/webrtc/issues/detail?id=6552\n // by adding level-asymmetry-allowed=1\n if (codec.name === 'H264' &&\n codec.parameters['level-asymmetry-allowed'] === undefined) {\n codec.parameters['level-asymmetry-allowed'] = '1';\n }\n\n // for subsequent offers, we might have to re-use the payload\n // type of the last offer.\n if (transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.codecs) {\n transceiver.remoteCapabilities.codecs.forEach(function(remoteCodec) {\n if (codec.name.toLowerCase() === remoteCodec.name.toLowerCase() &&\n codec.clockRate === remoteCodec.clockRate) {\n codec.preferredPayloadType = remoteCodec.payloadType;\n }\n });\n }\n });\n localCapabilities.headerExtensions.forEach(function(hdrExt) {\n var remoteExtensions = transceiver.remoteCapabilities &&\n transceiver.remoteCapabilities.headerExtensions || [];\n remoteExtensions.forEach(function(rHdrExt) {\n if (hdrExt.uri === rHdrExt.uri) {\n hdrExt.id = rHdrExt.id;\n }\n });\n });\n\n // generate an ssrc now, to be used later in rtpSender.send\n var sendEncodingParameters = transceiver.sendEncodingParameters || [{\n ssrc: (2 * sdpMLineIndex + 1) * 1001\n }];\n if (track) {\n // add RTX\n if (edgeVersion >= 15019 && kind === 'video' &&\n !sendEncodingParameters[0].rtx) {\n sendEncodingParameters[0].rtx = {\n ssrc: sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n\n if (transceiver.wantReceive) {\n transceiver.rtpReceiver = new window.RTCRtpReceiver(\n transceiver.dtlsTransport, kind);\n }\n\n transceiver.localCapabilities = localCapabilities;\n transceiver.sendEncodingParameters = sendEncodingParameters;\n });\n\n // always offer BUNDLE and dispose on return if not supported.\n if (pc._config.bundlePolicy !== 'max-compat') {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n sdp += writeMediaSection(transceiver, transceiver.localCapabilities,\n 'offer', transceiver.stream, pc._dtlsRole);\n sdp += 'a=rtcp-rsize\\r\\n';\n\n if (transceiver.iceGatherer && pc.iceGatheringState !== 'new' &&\n (sdpMLineIndex === 0 || !pc.usingBundle)) {\n transceiver.iceGatherer.getLocalCandidates().forEach(function(cand) {\n cand.component = 1;\n sdp += 'a=' + SDPUtils.writeCandidate(cand) + '\\r\\n';\n });\n\n if (transceiver.iceGatherer.state === 'completed') {\n sdp += 'a=end-of-candidates\\r\\n';\n }\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'offer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.createAnswer = function() {\n var pc = this;\n\n if (pc._isClosed) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer after close'));\n }\n\n if (!(pc.signalingState === 'have-remote-offer' ||\n pc.signalingState === 'have-local-pranswer')) {\n return Promise.reject(makeError('InvalidStateError',\n 'Can not call createAnswer in signalingState ' + pc.signalingState));\n }\n\n var sdp = SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,\n pc._sdpSessionVersion++);\n if (pc.usingBundle) {\n sdp += 'a=group:BUNDLE ' + pc.transceivers.map(function(t) {\n return t.mid;\n }).join(' ') + '\\r\\n';\n }\n sdp += 'a=ice-options:trickle\\r\\n';\n\n var mediaSectionsInOffer = SDPUtils.getMediaSections(\n pc._remoteDescription.sdp).length;\n pc.transceivers.forEach(function(transceiver, sdpMLineIndex) {\n if (sdpMLineIndex + 1 > mediaSectionsInOffer) {\n return;\n }\n if (transceiver.rejected) {\n if (transceiver.kind === 'application') {\n if (transceiver.protocol === 'DTLS/SCTP') { // legacy fmt\n sdp += 'm=application 0 DTLS/SCTP 5000\\r\\n';\n } else {\n sdp += 'm=application 0 ' + transceiver.protocol +\n ' webrtc-datachannel\\r\\n';\n }\n } else if (transceiver.kind === 'audio') {\n sdp += 'm=audio 0 UDP/TLS/RTP/SAVPF 0\\r\\n' +\n 'a=rtpmap:0 PCMU/8000\\r\\n';\n } else if (transceiver.kind === 'video') {\n sdp += 'm=video 0 UDP/TLS/RTP/SAVPF 120\\r\\n' +\n 'a=rtpmap:120 VP8/90000\\r\\n';\n }\n sdp += 'c=IN IP4 0.0.0.0\\r\\n' +\n 'a=inactive\\r\\n' +\n 'a=mid:' + transceiver.mid + '\\r\\n';\n return;\n }\n\n // FIXME: look at direction.\n if (transceiver.stream) {\n var localTrack;\n if (transceiver.kind === 'audio') {\n localTrack = transceiver.stream.getAudioTracks()[0];\n } else if (transceiver.kind === 'video') {\n localTrack = transceiver.stream.getVideoTracks()[0];\n }\n if (localTrack) {\n // add RTX\n if (edgeVersion >= 15019 && transceiver.kind === 'video' &&\n !transceiver.sendEncodingParameters[0].rtx) {\n transceiver.sendEncodingParameters[0].rtx = {\n ssrc: transceiver.sendEncodingParameters[0].ssrc + 1\n };\n }\n }\n }\n\n // Calculate intersection of capabilities.\n var commonCapabilities = getCommonCapabilities(\n transceiver.localCapabilities,\n transceiver.remoteCapabilities);\n\n var hasRtx = commonCapabilities.codecs.filter(function(c) {\n return c.name.toLowerCase() === 'rtx';\n }).length;\n if (!hasRtx && transceiver.sendEncodingParameters[0].rtx) {\n delete transceiver.sendEncodingParameters[0].rtx;\n }\n\n sdp += writeMediaSection(transceiver, commonCapabilities,\n 'answer', transceiver.stream, pc._dtlsRole);\n if (transceiver.rtcpParameters &&\n transceiver.rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n });\n\n var desc = new window.RTCSessionDescription({\n type: 'answer',\n sdp: sdp\n });\n return Promise.resolve(desc);\n };\n\n RTCPeerConnection.prototype.addIceCandidate = function(candidate) {\n var pc = this;\n var sections;\n if (candidate && !(candidate.sdpMLineIndex !== undefined ||\n candidate.sdpMid)) {\n return Promise.reject(new TypeError('sdpMLineIndex or sdpMid required'));\n }\n\n // TODO: needs to go into ops queue.\n return new Promise(function(resolve, reject) {\n if (!pc._remoteDescription) {\n return reject(makeError('InvalidStateError',\n 'Can not add ICE candidate without a remote description'));\n } else if (!candidate || candidate.candidate === '') {\n for (var j = 0; j < pc.transceivers.length; j++) {\n if (pc.transceivers[j].rejected) {\n continue;\n }\n pc.transceivers[j].iceTransport.addRemoteCandidate({});\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[j] += 'a=end-of-candidates\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n if (pc.usingBundle) {\n break;\n }\n }\n } else {\n var sdpMLineIndex = candidate.sdpMLineIndex;\n if (candidate.sdpMid) {\n for (var i = 0; i < pc.transceivers.length; i++) {\n if (pc.transceivers[i].mid === candidate.sdpMid) {\n sdpMLineIndex = i;\n break;\n }\n }\n }\n var transceiver = pc.transceivers[sdpMLineIndex];\n if (transceiver) {\n if (transceiver.rejected) {\n return resolve();\n }\n var cand = Object.keys(candidate.candidate).length > 0 ?\n SDPUtils.parseCandidate(candidate.candidate) : {};\n // Ignore Chrome's invalid candidates since Edge does not like them.\n if (cand.protocol === 'tcp' && (cand.port === 0 || cand.port === 9)) {\n return resolve();\n }\n // Ignore RTCP candidates, we assume RTCP-MUX.\n if (cand.component && cand.component !== 1) {\n return resolve();\n }\n // when using bundle, avoid adding candidates to the wrong\n // ice transport. And avoid adding candidates added in the SDP.\n if (sdpMLineIndex === 0 || (sdpMLineIndex > 0 &&\n transceiver.iceTransport !== pc.transceivers[0].iceTransport)) {\n if (!maybeAddCandidate(transceiver.iceTransport, cand)) {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n\n // update the remoteDescription.\n var candidateString = candidate.candidate.trim();\n if (candidateString.indexOf('a=') === 0) {\n candidateString = candidateString.substr(2);\n }\n sections = SDPUtils.getMediaSections(pc._remoteDescription.sdp);\n sections[sdpMLineIndex] += 'a=' +\n (cand.type ? candidateString : 'end-of-candidates')\n + '\\r\\n';\n pc._remoteDescription.sdp =\n SDPUtils.getDescription(pc._remoteDescription.sdp) +\n sections.join('');\n } else {\n return reject(makeError('OperationError',\n 'Can not add ICE candidate'));\n }\n }\n resolve();\n });\n };\n\n RTCPeerConnection.prototype.getStats = function(selector) {\n if (selector && selector instanceof window.MediaStreamTrack) {\n var senderOrReceiver = null;\n this.transceivers.forEach(function(transceiver) {\n if (transceiver.rtpSender &&\n transceiver.rtpSender.track === selector) {\n senderOrReceiver = transceiver.rtpSender;\n } else if (transceiver.rtpReceiver &&\n transceiver.rtpReceiver.track === selector) {\n senderOrReceiver = transceiver.rtpReceiver;\n }\n });\n if (!senderOrReceiver) {\n throw makeError('InvalidAccessError', 'Invalid selector.');\n }\n return senderOrReceiver.getStats();\n }\n\n var promises = [];\n this.transceivers.forEach(function(transceiver) {\n ['rtpSender', 'rtpReceiver', 'iceGatherer', 'iceTransport',\n 'dtlsTransport'].forEach(function(method) {\n if (transceiver[method]) {\n promises.push(transceiver[method].getStats());\n }\n });\n });\n return Promise.all(promises).then(function(allStats) {\n var results = new Map();\n allStats.forEach(function(stats) {\n stats.forEach(function(stat) {\n results.set(stat.id, stat);\n });\n });\n return results;\n });\n };\n\n // fix low-level stat names and return Map instead of object.\n var ortcObjects = ['RTCRtpSender', 'RTCRtpReceiver', 'RTCIceGatherer',\n 'RTCIceTransport', 'RTCDtlsTransport'];\n ortcObjects.forEach(function(ortcObjectName) {\n var obj = window[ortcObjectName];\n if (obj && obj.prototype && obj.prototype.getStats) {\n var nativeGetstats = obj.prototype.getStats;\n obj.prototype.getStats = function() {\n return nativeGetstats.apply(this)\n .then(function(nativeStats) {\n var mapStats = new Map();\n Object.keys(nativeStats).forEach(function(id) {\n nativeStats[id].type = fixStatsType(nativeStats[id]);\n mapStats.set(id, nativeStats[id]);\n });\n return mapStats;\n });\n };\n }\n });\n\n // legacy callback shims. Should be moved to adapter.js some days.\n var methods = ['createOffer', 'createAnswer'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[0] === 'function' ||\n typeof args[1] === 'function') { // legacy\n return nativeMethod.apply(this, [arguments[2]])\n .then(function(description) {\n if (typeof args[0] === 'function') {\n args[0].apply(null, [description]);\n }\n }, function(error) {\n if (typeof args[1] === 'function') {\n args[1].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n methods = ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'];\n methods.forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function' ||\n typeof args[2] === 'function') { // legacy\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n }, function(error) {\n if (typeof args[2] === 'function') {\n args[2].apply(null, [error]);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n // getStats is special. It doesn't have a spec legacy method yet we support\n // getStats(something, cb) without error callbacks.\n ['getStats'].forEach(function(method) {\n var nativeMethod = RTCPeerConnection.prototype[method];\n RTCPeerConnection.prototype[method] = function() {\n var args = arguments;\n if (typeof args[1] === 'function') {\n return nativeMethod.apply(this, arguments)\n .then(function() {\n if (typeof args[1] === 'function') {\n args[1].apply(null);\n }\n });\n }\n return nativeMethod.apply(this, arguments);\n };\n });\n\n return RTCPeerConnection;\n};\n\n\n/***/ }),\n\n/***/ 985:\n/*!*********************************!*\\\n !*** ./node_modules/sdp/sdp.js ***!\n \\*********************************/\n/***/ ((module) => {\n\n\"use strict\";\n/* eslint-env node */\n\n\n// SDP helpers.\nvar SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(function(line) {\n return line.trim();\n });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n var parts = blob.split('\\nm=');\n return parts.map(function(part, index) {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n};\n\n// returns the session description.\nSDPUtils.getDescription = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(function(line) {\n return line.indexOf(prefix) === 0;\n });\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\nSDPUtils.parseCandidate = function(line) {\n var parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n var candidate = {\n foundation: parts[0],\n component: parseInt(parts[1], 10),\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compability.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag\n candidate[parts[i]] = parts[i + 1];\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\nSDPUtils.writeCandidate = function(candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n sdp.push(candidate.component);\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n};\n\n// Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n var parsed = {};\n var kv;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(function(param) {\n if (codec.parameters[param]) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(function(fb) {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\nSDPUtils.parseSsrcGroup = function(line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(function(ssrc) {\n return parseInt(ssrc, 10);\n })\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\nSDPUtils.parseFingerprint = function(line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1]\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role.\n // Note2: 'algorithm' is not case sensitive except in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(function(fp) {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n var parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES paramters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n return 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp: is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function(line) {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(function(codec) {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(function(codec) {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n var maxptime = 0;\n caps.codecs.forEach(function(codec) {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n sdp += 'a=rtcp-mux\\r\\n';\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(function(extension) {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(parts) {\n return parts.attribute === 'cname';\n });\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc;\n\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(function(line) {\n var parts = line.substr(17).split(' ');\n return parts.map(function(part) {\n return parseInt(part, 10);\n });\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(function(codec) {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(function(params) {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n var rtcpParameters = {};\n\n // Gets the first SSRC. Note tha with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(obj) {\n return obj.attribute === 'cname';\n })[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n var parts;\n var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(function(line) {\n return SDPUtils.parseSsrcMedia(line);\n })\n .filter(function(msidParts) {\n return msidParts.attribute === 'msid';\n });\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n var mline = SDPUtils.parseMLine(mediaSection);\n var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n var maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize: maxMessageSize\n };\n }\n var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n var parts = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:')[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize: maxMessageSize\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n var output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n'\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boilder plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n var sessionId;\n var version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n var user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\nSDPUtils.writeMediaSection = function(transceiver, caps, type, stream) {\n var sdp = SDPUtils.writeRtpDescription(transceiver.kind, caps);\n\n // Map ICE parameters (ufrag, pwd) to SDP.\n sdp += SDPUtils.writeIceParameters(\n transceiver.iceGatherer.getLocalParameters());\n\n // Map DTLS parameters to SDP.\n sdp += SDPUtils.writeDtlsParameters(\n transceiver.dtlsTransport.getLocalParameters(),\n type === 'offer' ? 'actpass' : 'active');\n\n sdp += 'a=mid:' + transceiver.mid + '\\r\\n';\n\n if (transceiver.direction) {\n sdp += 'a=' + transceiver.direction + '\\r\\n';\n } else if (transceiver.rtpSender && transceiver.rtpReceiver) {\n sdp += 'a=sendrecv\\r\\n';\n } else if (transceiver.rtpSender) {\n sdp += 'a=sendonly\\r\\n';\n } else if (transceiver.rtpReceiver) {\n sdp += 'a=recvonly\\r\\n';\n } else {\n sdp += 'a=inactive\\r\\n';\n }\n\n if (transceiver.rtpSender) {\n // spec.\n var msid = 'msid:' + stream.id + ' ' +\n transceiver.rtpSender.track.id + '\\r\\n';\n sdp += 'a=' + msid;\n\n // for Chrome.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' ' + msid;\n if (transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' ' + msid;\n sdp += 'a=ssrc-group:FID ' +\n transceiver.sendEncodingParameters[0].ssrc + ' ' +\n transceiver.sendEncodingParameters[0].rtx.ssrc +\n '\\r\\n';\n }\n }\n // FIXME: this should be written by writeRtpDescription.\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n if (transceiver.rtpSender && transceiver.sendEncodingParameters[0].rtx) {\n sdp += 'a=ssrc:' + transceiver.sendEncodingParameters[0].rtx.ssrc +\n ' cname:' + SDPUtils.localCName + '\\r\\n';\n }\n return sdp;\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n var parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n var lines = SDPUtils.splitLines(blob);\n for (var i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (true) {\n module.exports = SDPUtils;\n}\n\n\n/***/ }),\n\n/***/ 778:\n/*!***********************************!*\\\n !*** external \"@gamestream/core\" ***!\n \\***********************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = require(\"@gamestream/core\");\n\n/***/ }),\n\n/***/ 754:\n/*!*************************************!*\\\n !*** external \"@opentelemetry/api\" ***!\n \\*************************************/\n/***/ ((module) => {\n\n\"use strict\";\nmodule.exports = require(\"@opentelemetry/api\");\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it need to be in strict mode.\n(() => {\n\"use strict\";\n/*!*******************************!*\\\n !*** ./index.js + 16 modules ***!\n \\*******************************/\n// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"AdAction\": () => (/* reexport */ AdAction),\n \"AdState\": () => (/* reexport */ AdState),\n \"AddPlatformTelemetry\": () => (/* reexport */ AddPlatformTelemetry),\n \"AppLaunchMode\": () => (/* reexport */ AppLaunchMode),\n \"AppLevelProtocol\": () => (/* reexport */ AppLevelProtocol),\n \"AudioFormat\": () => (/* reexport */ AudioFormat),\n \"AuthType\": () => (/* reexport */ AuthType),\n \"BitDepth\": () => (/* reexport */ BitDepth),\n \"BrowserFeature\": () => (/* reexport */ BrowserFeature),\n \"BrowserName\": () => (/* reexport */ BrowserName),\n \"CHANGELIST\": () => (/* reexport */ CHANGELIST),\n \"CLIENT_IDENTIFICATION\": () => (/* reexport */ CLIENT_IDENTIFICATION),\n \"CLIENT_VERSION\": () => (/* reexport */ CLIENT_VERSION),\n \"CalculateDataUsage\": () => (/* reexport */ CalculateDataUsage),\n \"CalculateMaxBitrateKbps\": () => (/* reexport */ CalculateMaxBitrateKbps),\n \"ChooseStreamingResolution\": () => (/* reexport */ ChooseStreamingResolution),\n \"ChooseStreamingSettings\": () => (/* reexport */ ChooseStreamingSettings),\n \"ClientHeaderBrowserType\": () => (/* reexport */ ClientHeaderBrowserType),\n \"ClientHeaderDeviceType\": () => (/* reexport */ ClientHeaderDeviceType),\n \"ClientHeaderOSType\": () => (/* reexport */ ClientHeaderOSType),\n \"ClientStreamer\": () => (/* reexport */ ClientStreamer),\n \"ClientType\": () => (/* reexport */ ClientType),\n \"ConfigureGridServerSettings\": () => (/* reexport */ ConfigureGridServerSettings),\n \"ConfigureRagnarokSettings\": () => (/* reexport */ ConfigureRagnarokSettings),\n \"CursorType\": () => (/* reexport */ CursorType),\n \"DeviceModel\": () => (/* reexport */ DeviceModel),\n \"DeviceOS\": () => (/* reexport */ DeviceOS),\n \"DeviceType\": () => (/* reexport */ DeviceType),\n \"DeviceVendor\": () => (/* reexport */ DeviceVendor),\n \"DynamicStreamingMode\": () => (/* reexport */ DynamicStreamingMode),\n \"EVENTS\": () => (/* reexport */ EVENTS),\n \"GS_EVENTS\": () => (/* reexport */ GS_EVENTS),\n \"GetDeviceCapabilities\": () => (/* reexport */ GetDeviceCapabilities),\n \"GetSupportedAudioChannelCount\": () => (/* reexport */ GetSupportedAudioChannelCount),\n \"GridApp\": () => (/* reexport */ GridApp),\n \"GridServer\": () => (/* reexport */ GridServer),\n \"GridServerSettings\": () => (/* reexport */ GridServerSettings),\n \"GsErrorCode\": () => (/* reexport */ GsErrorCode),\n \"HidType\": () => (/* reexport */ HidType),\n \"HotkeyModifier\": () => (/* reexport */ HotkeyModifier),\n \"InitializeUtils\": () => (/* reexport */ InitializeUtils),\n \"InputType\": () => (/* reexport */ InputType),\n \"IsFeatureSupported\": () => (/* reexport */ IsFeatureSupported),\n \"LogImpl\": () => (/* reexport */ LogImpl),\n \"LogLevel\": () => (/* reexport */ LogLevel),\n \"MediaTrackKind\": () => (/* reexport */ MediaTrackKind),\n \"MicState\": () => (/* reexport */ MicState),\n \"NetworkType\": () => (/* reexport */ NetworkType),\n \"NskTelemetry\": () => (/* reexport */ NskTelemetry),\n \"PassThruServer\": () => (/* reexport */ PassThruServer),\n \"PayloadBrowserType\": () => (/* reexport */ PayloadBrowserType),\n \"PayloadDeviceType\": () => (/* reexport */ PayloadDeviceType),\n \"PayloadOSType\": () => (/* reexport */ PayloadOSType),\n \"PlatformName\": () => (/* reexport */ PlatformName),\n \"Protocol\": () => (/* reexport */ Protocol),\n \"RErrorCode\": () => (/* reexport */ RErrorCode),\n \"RNotificationCode\": () => (/* reexport */ RNotificationCode),\n \"SESSIONMODIFY_ACTION\": () => (/* reexport */ SESSIONMODIFY_ACTION),\n \"STREAMING_STATE\": () => (/* reexport */ STREAMING_STATE),\n \"ScErrorCode\": () => (/* reexport */ ScErrorCode),\n \"SdrHdrMode\": () => (/* reexport */ SdrHdrMode),\n \"SessionControlTelemetry\": () => (/* reexport */ SessionControlTelemetry),\n \"SessionProgressState\": () => (/* reexport */ SessionProgressState),\n \"SessionState\": () => (/* reexport */ SessionState),\n \"StreamStopReason\": () => (/* reexport */ StreamStopReason),\n \"StreamWarningType\": () => (/* reexport */ StreamWarningType),\n \"StreamingProfilePreset\": () => (/* reexport */ StreamingProfilePreset),\n \"StreamingState\": () => (/* reexport */ StreamingState),\n \"TrackType\": () => (/* reexport */ TrackType),\n \"Usage\": () => (/* reexport */ Usage),\n \"VideoCodecType\": () => (/* reexport */ VideoCodecType),\n \"VirtualButton\": () => (/* reexport */ VirtualButton),\n \"VirtualGamepadHandler\": () => (/* reexport */ VirtualGamepadHandler),\n \"VsyncType\": () => (/* reexport */ VsyncType),\n \"configureRagnarokSettings\": () => (/* reexport */ configureRagnarokSettings),\n \"configureSessionControlSettings\": () => (/* reexport */ configureSessionControlSettings),\n \"createNskStreamClient\": () => (/* reexport */ createNskStreamClient),\n \"createSessionControl\": () => (/* reexport */ createSessionControl),\n \"defaultInputConfigFlags\": () => (/* reexport */ defaultInputConfigFlags),\n \"estimateDataUsage\": () => (/* reexport */ estimateDataUsage),\n \"getDeviceCapabilities\": () => (/* reexport */ getDeviceCapabilities),\n \"getNetworkTypeDetector\": () => (/* reexport */ getNetworkTypeDetector),\n \"getPlatformDetails\": () => (/* reexport */ getPlatformDetails),\n \"getRecommendedBitrate\": () => (/* reexport */ getRecommendedBitrate),\n \"getResumableSession\": () => (/* reexport */ getResumableSession),\n \"getStreamStartParameters\": () => (/* reexport */ getStreamStartParameters),\n \"getStreamerType\": () => (/* reexport */ getStreamerType),\n \"getSupportedCodecs\": () => (/* reexport */ getSupportedCodecs),\n \"isCancelCode\": () => (/* reexport */ isCancelCode),\n \"isFeatureSupported\": () => (/* reexport */ isFeatureSupported),\n \"isResumableSessionState\": () => (/* reexport */ isResumableSessionState),\n \"performHttpRequest\": () => (/* reexport */ performHttpRequest),\n \"registerLogCallback\": () => (/* reexport */ registerLogCallback),\n \"serializeDeviceCapabilities\": () => (/* reexport */ serializeDeviceCapabilities),\n \"shouldDefaultEnableMic\": () => (/* reexport */ shouldDefaultEnableMic),\n \"translatePlatformDetailsForClientHeader\": () => (/* reexport */ translatePlatformDetailsForClientHeader),\n \"translatePlatformDetailsForPayload\": () => (/* reexport */ translatePlatformDetailsForPayload),\n \"updateSessionParameters\": () => (/* reexport */ updateSessionParameters)\n});\n\n// NAMESPACE OBJECT: ./node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js\nvar chrome_shim_namespaceObject = {};\n__webpack_require__.r(chrome_shim_namespaceObject);\n__webpack_require__.d(chrome_shim_namespaceObject, {\n \"fixNegotiationNeeded\": () => (fixNegotiationNeeded),\n \"shimAddTrackRemoveTrack\": () => (shimAddTrackRemoveTrack),\n \"shimAddTrackRemoveTrackWithNative\": () => (shimAddTrackRemoveTrackWithNative),\n \"shimGetDisplayMedia\": () => (shimGetDisplayMedia),\n \"shimGetSendersWithDtmf\": () => (shimGetSendersWithDtmf),\n \"shimGetStats\": () => (shimGetStats),\n \"shimGetUserMedia\": () => (shimGetUserMedia),\n \"shimMediaStream\": () => (shimMediaStream),\n \"shimOnTrack\": () => (shimOnTrack),\n \"shimPeerConnection\": () => (shimPeerConnection),\n \"shimSenderReceiverGetStats\": () => (shimSenderReceiverGetStats)\n});\n\n// NAMESPACE OBJECT: ./node_modules/webrtc-adapter/src/js/edge/edge_shim.js\nvar edge_shim_namespaceObject = {};\n__webpack_require__.r(edge_shim_namespaceObject);\n__webpack_require__.d(edge_shim_namespaceObject, {\n \"shimGetDisplayMedia\": () => (getdisplaymedia_shimGetDisplayMedia),\n \"shimGetUserMedia\": () => (getusermedia_shimGetUserMedia),\n \"shimPeerConnection\": () => (edge_shim_shimPeerConnection),\n \"shimReplaceTrack\": () => (shimReplaceTrack)\n});\n\n// NAMESPACE OBJECT: ./node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js\nvar firefox_shim_namespaceObject = {};\n__webpack_require__.r(firefox_shim_namespaceObject);\n__webpack_require__.d(firefox_shim_namespaceObject, {\n \"shimAddTransceiver\": () => (shimAddTransceiver),\n \"shimCreateAnswer\": () => (shimCreateAnswer),\n \"shimCreateOffer\": () => (shimCreateOffer),\n \"shimGetDisplayMedia\": () => (firefox_getdisplaymedia_shimGetDisplayMedia),\n \"shimGetParameters\": () => (shimGetParameters),\n \"shimGetUserMedia\": () => (firefox_getusermedia_shimGetUserMedia),\n \"shimOnTrack\": () => (firefox_shim_shimOnTrack),\n \"shimPeerConnection\": () => (firefox_shim_shimPeerConnection),\n \"shimRTCDataChannel\": () => (shimRTCDataChannel),\n \"shimReceiverGetStats\": () => (shimReceiverGetStats),\n \"shimRemoveStream\": () => (shimRemoveStream),\n \"shimSenderGetStats\": () => (shimSenderGetStats)\n});\n\n// NAMESPACE OBJECT: ./node_modules/webrtc-adapter/src/js/safari/safari_shim.js\nvar safari_shim_namespaceObject = {};\n__webpack_require__.r(safari_shim_namespaceObject);\n__webpack_require__.d(safari_shim_namespaceObject, {\n \"shimAudioContext\": () => (shimAudioContext),\n \"shimCallbacksAPI\": () => (shimCallbacksAPI),\n \"shimConstraints\": () => (shimConstraints),\n \"shimCreateOfferLegacy\": () => (shimCreateOfferLegacy),\n \"shimGetUserMedia\": () => (safari_shim_shimGetUserMedia),\n \"shimLocalStreamsAPI\": () => (shimLocalStreamsAPI),\n \"shimRTCIceServerUrls\": () => (shimRTCIceServerUrls),\n \"shimRemoteStreamsAPI\": () => (shimRemoteStreamsAPI),\n \"shimTrackEventTransceiver\": () => (shimTrackEventTransceiver)\n});\n\n// NAMESPACE OBJECT: ./node_modules/webrtc-adapter/src/js/common_shim.js\nvar common_shim_namespaceObject = {};\n__webpack_require__.r(common_shim_namespaceObject);\n__webpack_require__.d(common_shim_namespaceObject, {\n \"removeAllowExtmapMixed\": () => (removeAllowExtmapMixed),\n \"shimConnectionState\": () => (shimConnectionState),\n \"shimMaxMessageSize\": () => (shimMaxMessageSize),\n \"shimRTCIceCandidate\": () => (shimRTCIceCandidate),\n \"shimSendThrowTypeError\": () => (shimSendThrowTypeError)\n});\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/utils.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n const match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n const nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n const wrappedCallback = (e) => {\n const modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName,\n wrappedCallback]);\n };\n\n const nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function(nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap\n || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName,\n unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get() {\n return this['_on' + eventNameToWrap];\n },\n set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap,\n this['_on' + eventNameToWrap] = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return (bool) ? 'adapter.js logging disabled' :\n 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + typeof bool +\n '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nfunction log() {\n if (typeof window === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod +\n ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n const {navigator} = window;\n\n // Returned result object.\n const result = {browser: null, version: null};\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n if (navigator.mozGetUserMedia) { // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent,\n /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia ||\n (window.isSecureContext === false && window.webkitRTCPeerConnection &&\n !window.RTCIceGatherer)) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent,\n /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (navigator.mediaDevices &&\n navigator.userAgent.match(/Edge\\/(\\d+).(\\d+)$/)) { // Edge.\n result.browser = 'edge';\n result.version = extractVersion(navigator.userAgent,\n /Edge\\/(\\d+).(\\d+)$/, 2);\n } else if (window.RTCPeerConnection &&\n navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) { // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent,\n /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver &&\n 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else { // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function(accumulator, key) {\n const isObj = isObject(data[key]);\n const value = isObj ? compactObject(data[key]) : data[key];\n const isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, {[key]: value});\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(name => {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(id => {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n const filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n const trackStats = [];\n result.forEach(value => {\n if (value.type === 'track' &&\n value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(trackStat => {\n result.forEach(stats => {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/chrome/getusermedia.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\nconst logging = log;\n\nfunction shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n const browserDetails = detectBrowser(window);\n\n const constraintsToChrome_ = function(c) {\n if (typeof c !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n const cc = {};\n Object.keys(c).forEach(key => {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n const r = (typeof c[key] === 'object') ? c[key] : {ideal: c[key]};\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n const oldname_ = function(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return (name === 'deviceId') ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n let oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(mix => {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n const shimConstraints_ = function(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && typeof constraints.audio === 'object') {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && typeof constraints.video === 'object') {\n // Shim facingMode for mobile & surface pro.\n let face = constraints.video.facingMode;\n face = face && ((typeof face === 'object') ? face : {ideal: face});\n const getSupportedFacingModeLies = browserDetails.version < 66;\n\n if ((face && (face.exact === 'user' || face.exact === 'environment' ||\n face.ideal === 'user' || face.ideal === 'environment')) &&\n !(navigator.mediaDevices.getSupportedConstraints &&\n navigator.mediaDevices.getSupportedConstraints().facingMode &&\n !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n let matches;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices()\n .then(devices => {\n devices = devices.filter(d => d.kind === 'videoinput');\n let dev = devices.find(d => matches.some(match =>\n d.label.toLowerCase().includes(match)));\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? {exact: dev.deviceId} :\n {ideal: dev.deviceId};\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n const shimError_ = function(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n const getUserMedia_ = function(constraints, onSuccess, onError) {\n shimConstraints_(constraints, c => {\n navigator.webkitGetUserMedia(c, onSuccess, e => {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(cs) {\n return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n if (c.audio && !stream.getAudioTracks().length ||\n c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(track => {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, e => Promise.reject(shimError_(e))));\n };\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\nfunction shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' +\n 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n return getSourceId(constraints)\n .then(sourceId => {\n const widthSpecified = constraints.video && constraints.video.width;\n const heightSpecified = constraints.video &&\n constraints.video.height;\n const frameRateSpecified = constraints.video &&\n constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n\n\n\n\n\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nfunction shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in\n window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get() {\n return this._ontrack;\n },\n set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n enumerable: true,\n configurable: true\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n if (!this._ontrackpoly) {\n this._ontrackpoly = (e) => {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', te => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === te.track.id);\n } else {\n receiver = {track: te.track};\n }\n\n const event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(track => {\n let receiver;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = this.getReceivers()\n .find(r => r.track && r.track.id === track.id);\n } else {\n receiver = {track};\n }\n const event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = {receiver};\n event.streams = [e.stream];\n this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n wrapPeerConnectionEvent(window, 'track', e => {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver',\n {value: {receiver: e.receiver}});\n }\n return e;\n });\n }\n}\n\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if (typeof window === 'object' && window.RTCPeerConnection &&\n !('getSenders' in window.RTCPeerConnection.prototype) &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n const shimSenderWithDtmf = function(pc, track) {\n return {\n track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n let sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n const idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(track => {\n this._senders.push(shimSenderWithDtmf(this, track));\n });\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(track => {\n const sender = this._senders.find(s => s.track === track);\n if (sender) { // remove sender\n this._senders.splice(this._senders.indexOf(sender), 1);\n }\n });\n };\n } else if (typeof window === 'object' && window.RTCPeerConnection &&\n 'getSenders' in window.RTCPeerConnection.prototype &&\n 'createDTMFSender' in window.RTCPeerConnection.prototype &&\n window.RTCRtpSender &&\n !('dtmf' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 ||\n typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n const fixChromeStats_ = function(response) {\n const standardReport = {};\n const reports = response.result();\n reports.forEach(report => {\n const standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(name => {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n const makeMapStats = function(stats) {\n return new Map(Object.keys(stats).map(key => [key, stats[key]]));\n };\n\n if (arguments.length >= 2) {\n const successCallbackWrapper_ = function(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_,\n selector]);\n }\n\n // promise-support\n return new Promise((resolve, reject) => {\n origGetStats.apply(this, [\n function(response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nfunction shimSenderReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n const sender = this;\n return this._pc.getStats().then(result =>\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n filterStats(result, sender.track, true));\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers =\n function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n const receiver = this;\n return this._pc.getStats().then(result =>\n filterStats(result, receiver.track, false));\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype &&\n 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n const origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 &&\n arguments[0] instanceof window.MediaStreamTrack) {\n const track = arguments[0];\n let sender;\n let receiver;\n let err;\n this.getSenders().forEach(s => {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(r => {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || (sender && receiver)) {\n return Promise.reject(new DOMException(\n 'There are more than one sender or receiver for the track.',\n 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException(\n 'There is no sender or receiver for the track.',\n 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams)\n .map(streamId => this._shimmedLocalStreams[streamId][0]);\n };\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n const sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n const existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n const newSenders = this.getSenders()\n .filter(newSender => existingSenders.indexOf(newSender) === -1);\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n this._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (this._shimmedLocalStreams[streamId].length === 1) {\n delete this._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrack(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const browserDetails = detectBrowser(window);\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack &&\n browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n const origGetLocalStreams = window.RTCPeerConnection.prototype\n .getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n const nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n };\n\n const origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(track => {\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n const newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [(this._streams[stream.id] || stream)]);\n delete this._reverseStreams[(this._streams[stream.id] ?\n this._streams[stream.id].id : stream.id)];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, stream) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n const streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 ||\n !streams[0].getTracks().find(t => t === track)) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException(\n 'The adapter.js addTrack polyfill only supports a single ' +\n ' stream which is associated with the specified track.',\n 'NotSupportedError');\n }\n\n const alreadyExists = this.getSenders().find(s => s.track === track);\n if (alreadyExists) {\n throw new DOMException('Track already exists.',\n 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n const oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(() => {\n this.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n const newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(s => s.track === track);\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'),\n externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n let sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(internalId => {\n const externalStream = pc._reverseStreams[internalId];\n const internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'),\n internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n const args = arguments;\n const isLegacyCall = arguments.length &&\n typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [\n (description) => {\n const desc = replaceInternalStreamId(this, description);\n args[0].apply(null, [desc]);\n },\n (err) => {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]\n ]);\n }\n return nativeMethod.apply(this, arguments)\n .then(description => replaceInternalStreamId(this, description));\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n const origSetLocalDescription =\n window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription =\n function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n const origLocalDescription = Object.getOwnPropertyDescriptor(\n window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype,\n 'localDescription', {\n get() {\n const description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack =\n function removeTrack(sender) {\n if (this.signalingState === 'closed') {\n throw new DOMException(\n 'The RTCPeerConnection\\'s signalingState is \\'closed\\'.',\n 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' +\n 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n const isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.',\n 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n let stream;\n Object.keys(this._streams).forEach(streamid => {\n const hasTrack = this._streams[streamid].getTracks()\n .find(track => sender.track === track);\n if (hasTrack) {\n stream = this._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nfunction shimPeerConnection(window) {\n const browserDetails = detectBrowser(window);\n\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n const addIceCandidateNullSupported =\n window.RTCPeerConnection.prototype.addIceCandidate.length === 0;\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n // support for addIceCandidate(null or undefined)\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!addIceCandidateNullSupported && !arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions. Native support planned for Chrome M77.\n if (browserDetails.version < 78 &&\n arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window) {\n const browserDetails = detectBrowser(window);\n wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n const pc = e.target;\n if (browserDetails.version < 72 || (pc.getConfiguration &&\n pc.getConfiguration().sdpSemantics === 'plan-b')) {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/edge/filtericeservers.js\n/*\n * Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n// Edge does not like\n// 1) stun: filtered after 14393 unless ?transport=udp is present\n// 2) turn: that does not have all of turn:host:port?transport=udp\n// 3) turn: with ipv6 addresses\n// 4) turn: occurring muliple times\nfunction filterIceServers(iceServers, edgeVersion) {\n let hasTurn = false;\n iceServers = JSON.parse(JSON.stringify(iceServers));\n return iceServers.filter(server => {\n if (server && (server.urls || server.url)) {\n var urls = server.urls || server.url;\n if (server.url && !server.urls) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n }\n const isString = typeof urls === 'string';\n if (isString) {\n urls = [urls];\n }\n urls = urls.filter(url => {\n // filter STUN unconditionally.\n if (url.indexOf('stun:') === 0) {\n return false;\n }\n\n const validTurn = url.startsWith('turn') &&\n !url.startsWith('turn:[') &&\n url.includes('transport=udp');\n if (validTurn && !hasTurn) {\n hasTurn = true;\n return true;\n }\n return validTurn && !hasTurn;\n });\n\n delete server.url;\n server.urls = isString ? urls[0] : urls;\n return !!urls.length;\n }\n });\n}\n\n// EXTERNAL MODULE: ./node_modules/rtcpeerconnection-shim/rtcpeerconnection.js\nvar rtcpeerconnection = __webpack_require__(134);\nvar rtcpeerconnection_default = /*#__PURE__*/__webpack_require__.n(rtcpeerconnection);\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/edge/getusermedia.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n\nfunction getusermedia_shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n const shimError_ = function(e) {\n return {\n name: {PermissionDeniedError: 'NotAllowedError'}[e.name] || e.name,\n message: e.message,\n constraint: e.constraint,\n toString() {\n return this.name;\n }\n };\n };\n\n // getUserMedia error shim.\n const origGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n return origGetUserMedia(c).catch(e => Promise.reject(shimError_(e)));\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/edge/getdisplaymedia.js\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n /* eslint-env node */\n\n\nfunction getdisplaymedia_shimGetDisplayMedia(window) {\n if (!('getDisplayMedia' in window.navigator)) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n window.navigator.getDisplayMedia.bind(window.navigator);\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/edge/edge_shim.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n\n\n\n\n\n\nfunction edge_shim_shimPeerConnection(window) {\n const browserDetails = detectBrowser(window);\n\n if (window.RTCIceGatherer) {\n if (!window.RTCIceCandidate) {\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n return args;\n };\n }\n if (!window.RTCSessionDescription) {\n window.RTCSessionDescription = function RTCSessionDescription(args) {\n return args;\n };\n }\n // this adds an additional event listener to MediaStrackTrack that signals\n // when a tracks enabled property was changed. Workaround for a bug in\n // addStream, see below. No longer required in 15025+\n if (browserDetails.version < 15025) {\n const origMSTEnabled = Object.getOwnPropertyDescriptor(\n window.MediaStreamTrack.prototype, 'enabled');\n Object.defineProperty(window.MediaStreamTrack.prototype, 'enabled', {\n set(value) {\n origMSTEnabled.set.call(this, value);\n const ev = new Event('enabled');\n ev.enabled = value;\n this.dispatchEvent(ev);\n }\n });\n }\n }\n\n // ORTC defines the DTMF sender a bit different.\n // https://github.com/w3c/ortc/issues/714\n if (window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = new window.RTCDtmfSender(this);\n } else if (this.track.kind === 'video') {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n // Edge currently only implements the RTCDtmfSender, not the\n // RTCDTMFSender alias. See http://draft.ortc.org/#rtcdtmfsender2*\n if (window.RTCDtmfSender && !window.RTCDTMFSender) {\n window.RTCDTMFSender = window.RTCDtmfSender;\n }\n\n const RTCPeerConnectionShim = rtcpeerconnection_default()(window,\n browserDetails.version);\n window.RTCPeerConnection = function RTCPeerConnection(config) {\n if (config && config.iceServers) {\n config.iceServers = filterIceServers(config.iceServers,\n browserDetails.version);\n log('ICE servers after filtering:', config.iceServers);\n }\n return new RTCPeerConnectionShim(config);\n };\n window.RTCPeerConnection.prototype = RTCPeerConnectionShim.prototype;\n}\n\nfunction shimReplaceTrack(window) {\n // ORTC has replaceTrack -- https://github.com/w3c/ortc/issues/614\n if (window.RTCRtpSender &&\n !('replaceTrack' in window.RTCRtpSender.prototype)) {\n window.RTCRtpSender.prototype.replaceTrack =\n window.RTCRtpSender.prototype.setTrack;\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/firefox/getusermedia.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n\nfunction firefox_getusermedia_shimGetUserMedia(window) {\n const browserDetails = detectBrowser(window);\n const navigator = window && window.navigator;\n const MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function(constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n deprecated('navigator.getUserMedia',\n 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 &&\n 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n const remap = function(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.\n bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function(c) {\n if (typeof c === 'object' && typeof c.audio === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function() {\n const obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n const nativeApplyConstraints =\n MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function(c) {\n if (this.kind === 'audio' && typeof c === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\nfunction firefox_getdisplaymedia_shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices &&\n 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!(window.navigator.mediaDevices)) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia =\n function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n const err = new DOMException('getDisplayMedia without video ' +\n 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = {mediaSource: preferredMediaSource};\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n\n\n\nfunction firefox_shim_shimOnTrack(window) {\n if (typeof window === 'object' && window.RTCTrackEvent &&\n ('receiver' in window.RTCTrackEvent.prototype) &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction firefox_shim_shimPeerConnection(window) {\n const browserDetails = detectBrowser(window);\n\n if (typeof window !== 'object' ||\n !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate']\n .forEach(function(method) {\n const nativeMethod = window.RTCPeerConnection.prototype[method];\n const methodObj = {[method]() {\n arguments[0] = new ((method === 'addIceCandidate') ?\n window.RTCIceCandidate :\n window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n }};\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n // support for addIceCandidate(null or undefined)\n // as well as ignoring {sdpMid, candidate: \"\"}\n if (browserDetails.version < 68) {\n const nativeAddIceCandidate =\n window.RTCPeerConnection.prototype.addIceCandidate;\n window.RTCPeerConnection.prototype.addIceCandidate =\n function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n if (arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n }\n\n const modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n const [selector, onSucc, onErr] = arguments;\n return nativeGetStats.apply(this, [selector || null])\n .then(stats => {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(stat => {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach((stat, i) => {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n })\n .then(onSucc, onErr);\n };\n}\n\nfunction shimSenderGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n const senders = origGetSenders.apply(this, []);\n senders.forEach(sender => sender._pc = this);\n return senders;\n };\n }\n\n const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n const sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) :\n Promise.resolve(new Map());\n };\n}\n\nfunction shimReceiverGetStats(window) {\n if (!(typeof window === 'object' && window.RTCPeerConnection &&\n window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n const receivers = origGetReceivers.apply(this, []);\n receivers.forEach(receiver => receiver._pc = this);\n return receivers;\n };\n }\n wrapPeerConnectionEvent(window, 'track', e => {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection ||\n 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(sender => {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n}\n\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver =\n function addTransceiver() {\n this.setParametersPromises = [];\n const initParameters = arguments[1];\n const shouldPerformCheck = initParameters &&\n 'sendEncodings' in initParameters;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n initParameters.sendEncodings.forEach((encodingParam) => {\n if ('rid' in encodingParam) {\n const ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n const transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n const {sender} = transceiver;\n const params = sender.getParameters();\n if (!('encodings' in params)) {\n params.encodings = initParameters.sendEncodings;\n sender.sendEncodings = initParameters.sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params)\n .then(() => {\n delete sender.sendEncodings;\n }).catch(() => {\n delete sender.sendEncodings;\n })\n );\n }\n }\n return transceiver;\n };\n }\n}\n\nfunction shimGetParameters(window) {\n if (!(typeof window === 'object' && window.RTCRtpSender)) {\n return;\n }\n const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters =\n function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('sendEncodings' in this)) {\n return params;\n }\n return Object.assign({}, {encodings: this.sendEncodings}, params);\n };\n }\n}\n\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateOffer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n return;\n }\n const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises)\n .then(() => {\n return origCreateAnswer.apply(this, arguments);\n })\n .finally(() => {\n this.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/safari/safari_shim.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n\n\nfunction shimLocalStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams =\n function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(track => _addTrack.call(this, track,\n stream));\n stream.getVideoTracks().forEach(track => _addTrack.call(this, track,\n stream));\n };\n\n window.RTCPeerConnection.prototype.addTrack =\n function addTrack(track, ...streams) {\n if (streams) {\n streams.forEach((stream) => {\n if (!this._localStreams) {\n this._localStreams = [stream];\n } else if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream =\n function removeStream(stream) {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n const index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n const tracks = stream.getTracks();\n this.getSenders().forEach(sender => {\n if (tracks.includes(sender.track)) {\n this.removeTrack(sender);\n }\n });\n };\n }\n}\n\nfunction shimRemoteStreamsAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams =\n function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get() {\n return this._onaddstream;\n },\n set(f) {\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = (e) => {\n e.streams.forEach(stream => {\n if (!this._remoteStreams) {\n this._remoteStreams = [];\n }\n if (this._remoteStreams.includes(stream)) {\n return;\n }\n this._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n this.dispatchEvent(event);\n });\n });\n }\n });\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n const pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function(e) {\n e.streams.forEach(stream => {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n const event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nfunction shimCallbacksAPI(window) {\n if (typeof window !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n const prototype = window.RTCPeerConnection.prototype;\n const origCreateOffer = prototype.createOffer;\n const origCreateAnswer = prototype.createAnswer;\n const setLocalDescription = prototype.setLocalDescription;\n const setRemoteDescription = prototype.setRemoteDescription;\n const addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer =\n function createOffer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer =\n function createAnswer(successCallback, failureCallback) {\n const options = (arguments.length >= 2) ? arguments[2] : arguments[0];\n const promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n let withCallback = function(description, successCallback, failureCallback) {\n const promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function(description, successCallback, failureCallback) {\n const promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function(candidate, successCallback, failureCallback) {\n const promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nfunction safari_shim_shimGetUserMedia(window) {\n const navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n const mediaDevices = navigator.mediaDevices;\n const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = (constraints) => {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices &&\n navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints)\n .then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({},\n constraints,\n {video: compactObject(constraints.video)}\n );\n }\n\n return constraints;\n}\n\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n const OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection =\n function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n const newIceServers = [];\n for (let i = 0; i < pcConfig.iceServers.length; i++) {\n let server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') &&\n server.hasOwnProperty('url')) {\n deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if (typeof window === 'object' && window.RTCTrackEvent &&\n 'receiver' in window.RTCTrackEvent.prototype &&\n !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get() {\n return {receiver: this.receiver};\n }\n });\n }\n}\n\nfunction shimCreateOfferLegacy(window) {\n const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer =\n function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio =\n !!offerOptions.offerToReceiveAudio;\n }\n const audioTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'audio');\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true &&\n !audioTransceiver) {\n this.addTransceiver('audio');\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo =\n !!offerOptions.offerToReceiveVideo;\n }\n const videoTransceiver = this.getTransceivers().find(transceiver =>\n transceiver.receiver.track.kind === 'video');\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true &&\n !videoTransceiver) {\n this.addTransceiver('video');\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimAudioContext(window) {\n if (typeof window !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n// EXTERNAL MODULE: ./node_modules/sdp/sdp.js\nvar sdp = __webpack_require__(985);\nvar sdp_default = /*#__PURE__*/__webpack_require__.n(sdp);\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/common_shim.js\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n\n\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || (window.RTCIceCandidate && 'foundation' in\n window.RTCIceCandidate.prototype)) {\n return;\n }\n\n const NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if (typeof args === 'object' && args.candidate &&\n args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n const nativeCandidate = new NativeRTCIceCandidate(args);\n const parsedCandidate = sdp_default().parseCandidate(args.candidate);\n const augmentedCandidate = Object.assign(nativeCandidate,\n parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment,\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n wrapPeerConnectionEvent(window, 'icecandidate', e => {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nfunction shimMaxMessageSize(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n const browserDetails = detectBrowser(window);\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n const sctpInDescription = function(description) {\n if (!description || !description.sdp) {\n return false;\n }\n const sections = sdp_default().splitSections(description.sdp);\n sections.shift();\n return sections.some(mediaSection => {\n const mLine = sdp_default().parseMLine(mediaSection);\n return mLine && mLine.kind === 'application'\n && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n const getRemoteFirefoxVersion = function(description) {\n // TODO: Is there a better solution for detecting Firefox?\n const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n const version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n const getCanSendMaxMessageSize = function(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n let canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize =\n browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n const getMaxMessageSize = function(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n let maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox'\n && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n const match = sdp_default().matchPrefix(description.sdp,\n 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' &&\n remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n const origSetRemoteDescription =\n window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n const {sdpSemantics} = this.getConfiguration();\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n let maxMessageSize;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n const sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection &&\n 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n const origDataChannelSend = dc.send;\n dc.send = function send() {\n const data = arguments[0];\n const length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' &&\n pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' +\n pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n const origCreateDataChannel =\n window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel =\n function createDataChannel() {\n const dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n wrapPeerConnectionEvent(window, 'datachannel', e => {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection ||\n 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n const proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get() {\n return this._onconnectionstatechange || null;\n },\n set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange',\n this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange',\n this._onconnectionstatechange = cb);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach((method) => {\n const origMethod = proto[method];\n proto[method] = function() {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = e => {\n const pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n const newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange',\n this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nfunction removeAllowExtmapMixed(window) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n const browserDetails = detectBrowser(window);\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription =\n function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n desc.sdp = desc.sdp.split('\\n').filter((line) => {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/adapter_factory.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n\n\n // Browser shims.\n\n\n\n\n\n\n// Shimming starts here.\nfunction adapterFactory({window} = {}, options = {\n shimChrome: true,\n shimFirefox: true,\n shimEdge: true,\n shimSafari: true,\n}) {\n // Utils.\n const logging = log;\n const browserDetails = detectBrowser(window);\n\n const adapter = {\n browserDetails,\n commonShim: common_shim_namespaceObject,\n extractVersion: extractVersion,\n disableLog: disableLog,\n disableWarnings: disableWarnings\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chrome_shim_namespaceObject || !shimPeerConnection ||\n !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chrome_shim_namespaceObject;\n\n shimGetUserMedia(window);\n shimMediaStream(window);\n shimPeerConnection(window);\n shimOnTrack(window);\n shimAddTrackRemoveTrack(window);\n shimGetSendersWithDtmf(window);\n shimGetStats(window);\n shimSenderReceiverGetStats(window);\n fixNegotiationNeeded(window);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window);\n shimSendThrowTypeError(window);\n removeAllowExtmapMixed(window);\n break;\n case 'firefox':\n if (!firefox_shim_namespaceObject || !firefox_shim_shimPeerConnection ||\n !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefox_shim_namespaceObject;\n\n firefox_getusermedia_shimGetUserMedia(window);\n firefox_shim_shimPeerConnection(window);\n firefox_shim_shimOnTrack(window);\n shimRemoveStream(window);\n shimSenderGetStats(window);\n shimReceiverGetStats(window);\n shimRTCDataChannel(window);\n shimAddTransceiver(window);\n shimGetParameters(window);\n shimCreateOffer(window);\n shimCreateAnswer(window);\n\n shimRTCIceCandidate(window);\n shimConnectionState(window);\n shimMaxMessageSize(window);\n shimSendThrowTypeError(window);\n break;\n case 'edge':\n if (!edge_shim_namespaceObject || !edge_shim_shimPeerConnection || !options.shimEdge) {\n logging('MS edge shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming edge.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = edge_shim_namespaceObject;\n\n getusermedia_shimGetUserMedia(window);\n getdisplaymedia_shimGetDisplayMedia(window);\n edge_shim_shimPeerConnection(window);\n shimReplaceTrack(window);\n\n // the edge shim implements the full RTCIceCandidate object.\n\n shimMaxMessageSize(window);\n shimSendThrowTypeError(window);\n break;\n case 'safari':\n if (!safari_shim_namespaceObject || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safari_shim_namespaceObject;\n\n shimRTCIceServerUrls(window);\n shimCreateOfferLegacy(window);\n shimCallbacksAPI(window);\n shimLocalStreamsAPI(window);\n shimRemoteStreamsAPI(window);\n shimTrackEventTransceiver(window);\n safari_shim_shimGetUserMedia(window);\n shimAudioContext(window);\n\n shimRTCIceCandidate(window);\n shimMaxMessageSize(window);\n shimSendThrowTypeError(window);\n removeAllowExtmapMixed(window);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n\n;// CONCATENATED MODULE: ./node_modules/webrtc-adapter/src/js/adapter_core.js\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n\n\n\n\nconst adapter = adapterFactory({window});\n/* harmony default export */ const adapter_core = ((/* unused pure expression or super */ null && (adapter)));\n\n// EXTERNAL MODULE: ../ragnarok-core/dist/ragnarok.js\nvar ragnarok = __webpack_require__(393);\n;// CONCATENATED MODULE: ../ragnarok-core/dist/shim.js\nvar GridApp = Ragnarok.GridApp\nvar ChooseStreamingSettings = Ragnarok.ChooseStreamingSettings\nvar ChooseStreamingResolution = Ragnarok.ChooseStreamingResolution\nvar InitializeUtils = Ragnarok.InitializeUtils\nvar GetSupportedAudioChannelCount = Ragnarok.GetSupportedAudioChannelCount\nvar GetDeviceCapabilities = Ragnarok.GetDeviceCapabilities\nvar getSupportedCodecs = Ragnarok.getSupportedCodecs\nvar VirtualButton = Ragnarok.VirtualButton\nvar VirtualGamepadHandler = Ragnarok.VirtualGamepadHandler\nvar ConfigureRagnarokSettings = Ragnarok.ConfigureRagnarokSettings\nvar CHANGELIST = Ragnarok.CHANGELIST\nvar AuthType = Ragnarok.AuthType\nvar performHttpRequest = Ragnarok.performHttpRequest\nvar AddPlatformTelemetry = Ragnarok.AddPlatformTelemetry\nvar IsFeatureSupported = Ragnarok.IsFeatureSupported\nvar CalculateMaxBitrateKbps = Ragnarok.CalculateMaxBitrateKbps\nvar CalculateDataUsage = Ragnarok.CalculateDataUsage\nvar LogImpl = Ragnarok.LogImpl\nvar EVENTS = Ragnarok.EVENTS\nvar HotkeyModifier = Ragnarok.HotkeyModifier\nvar defaultInputConfigFlags = Ragnarok.defaultInputConfigFlags\nvar StreamingProfilePreset = Ragnarok.StreamingProfilePreset\nvar TrackType = Ragnarok.TrackType\nvar STREAMING_STATE = Ragnarok.STREAMING_STATE\nvar RNotificationCode = Ragnarok.RNotificationCode\nvar ScErrorCode = Ragnarok.ScErrorCode\nvar configureSessionControlSettings = Ragnarok.configureSessionControlSettings\nvar DeviceType = Ragnarok.DeviceType\nvar DeviceOS = Ragnarok.DeviceOS\nvar NetworkType = Ragnarok.NetworkType\nvar registerLogCallback = Ragnarok.registerLogCallback\nvar LogLevel = Ragnarok.LogLevel\nvar createSessionControl = Ragnarok.createSessionControl\nvar SdrHdrMode = Ragnarok.SdrHdrMode\nvar Usage = Ragnarok.Usage\nvar Protocol = Ragnarok.Protocol\nvar AppLevelProtocol = Ragnarok.AppLevelProtocol\nvar AdState = Ragnarok.AdState\nvar AdAction = Ragnarok.AdAction\nvar BitDepth = Ragnarok.BitDepth\nvar ClientType = Ragnarok.ClientType\nvar SessionState = Ragnarok.SessionState\nvar SessionProgressState = Ragnarok.SessionProgressState\nvar AppLaunchMode = Ragnarok.AppLaunchMode\nvar updateSessionParameters = Ragnarok.updateSessionParameters\nvar isCancelCode = Ragnarok.isCancelCode\nvar isResumableSessionState = Ragnarok.isResumableSessionState\nvar getResumableSession = Ragnarok.getResumableSession\nvar SessionControlTelemetry = Ragnarok.SessionControlTelemetry\nvar GsErrorCode = Ragnarok.GsErrorCode\nvar GridServerSettings = Ragnarok.GridServerSettings\nvar ConfigureGridServerSettings = Ragnarok.ConfigureGridServerSettings\nvar BrowserName = Ragnarok.BrowserName\nvar PlatformName = Ragnarok.PlatformName\nvar getPlatformDetails = Ragnarok.getPlatformDetails\nvar DeviceModel = Ragnarok.DeviceModel\nvar DeviceVendor = Ragnarok.DeviceVendor\nvar CLIENT_VERSION = Ragnarok.CLIENT_VERSION\nvar CLIENT_IDENTIFICATION = Ragnarok.CLIENT_IDENTIFICATION\nvar SESSIONMODIFY_ACTION = Ragnarok.SESSIONMODIFY_ACTION\nvar AudioFormat = Ragnarok.AudioFormat\nvar ClientStreamer = Ragnarok.ClientStreamer\nvar GS_EVENTS = Ragnarok.GS_EVENTS\nvar GridServer = Ragnarok.GridServer\nvar PassThruServer = Ragnarok.PassThruServer\nvar VsyncType = Ragnarok.VsyncType\nvar getDeviceCapabilities = Ragnarok.getDeviceCapabilities\nvar serializeDeviceCapabilities = Ragnarok.serializeDeviceCapabilities\nvar PayloadOSType = Ragnarok.PayloadOSType\nvar PayloadBrowserType = Ragnarok.PayloadBrowserType\nvar PayloadDeviceType = Ragnarok.PayloadDeviceType\nvar ClientHeaderOSType = Ragnarok.ClientHeaderOSType\nvar ClientHeaderBrowserType = Ragnarok.ClientHeaderBrowserType\nvar ClientHeaderDeviceType = Ragnarok.ClientHeaderDeviceType\nvar translatePlatformDetailsForPayload = Ragnarok.translatePlatformDetailsForPayload\nvar translatePlatformDetailsForClientHeader = Ragnarok.translatePlatformDetailsForClientHeader\nvar getStreamerType = Ragnarok.getStreamerType\nvar BrowserFeature = Ragnarok.BrowserFeature\nvar isFeatureSupported = Ragnarok.isFeatureSupported\nvar shouldDefaultEnableMic = Ragnarok.shouldDefaultEnableMic\nvar getRecommendedBitrate = Ragnarok.getRecommendedBitrate\nvar getStreamStartParameters = Ragnarok.getStreamStartParameters\nvar estimateDataUsage = Ragnarok.estimateDataUsage\nvar NskTelemetry = Ragnarok.NskTelemetry\nvar createNskStreamClient = Ragnarok.createNskStreamClient\nvar configureRagnarokSettings = Ragnarok.configureRagnarokSettings\nvar getNetworkTypeDetector = Ragnarok.getNetworkTypeDetector\nvar RErrorCode = Ragnarok.RErrorCode\nvar HidType = Ragnarok.HidType\nvar InputType = Ragnarok.InputType\nvar VideoCodecType = Ragnarok.VideoCodecType\nvar MicState = Ragnarok.MicState\nvar DynamicStreamingMode = Ragnarok.DynamicStreamingMode\nvar MediaTrackKind = Ragnarok.MediaTrackKind\nvar StreamStopReason = Ragnarok.StreamStopReason\nvar StreamWarningType = Ragnarok.StreamWarningType\nvar CursorType = Ragnarok.CursorType\nvar StreamingState = Ragnarok.StreamingState\n\n;// CONCATENATED MODULE: ./index.js\n\n\n\n})();\n\nmodule.exports = __webpack_exports__;\n/******/ })()\n;\n//# sourceMappingURL=ragnarok.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./src/logger\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LogImpl = void 0;\n/**\n * Provides implementation of {@link LogInterface} that can be configured with console logging enabled or disabled.\n * Manages a queue of log entries and supports registering callbacks for log events.\n *\n * Sample usage:\n * const Log = new LogImpl(\"MyModule\", {\n enableConsoleLogging: true\n });\n ...\n * const callback = (data: LogData) => {...};\n * Log.setLogCallback(callback);\n * ...\n * Log.i('MyTag', 'This is an info message');\n *\n */\nclass LogImpl {\n /**\n * Constructs a new instance of LogImpl.\n * @param module Module name to prepend to log tags.\n * @param options Optional configuration parameters for the logger.\n * @param options.enable Flag indicating whether to enable logging. Enabled by default.\n * When enabled, log messages are processed according to their severity levels.\n * When disabled, all log levels are disabled except for error level.\n * @param options.enableConsoleLogging- Flag indicating whether to enable console logging. Disabled by default.\n * When console logging is enabled, log messages are output directly to the console.\n * When console logging is disabled, log messages are delivered asynchronously to registered log callback.\n */\n constructor(module, options) {\n this.module = module;\n this.enabled = true;\n this.shouldLogToConsole = false;\n this.queue = [];\n if (options) {\n if (options.enable !== undefined) {\n this.enabled = options.enable;\n }\n if (options.enableConsoleLogging !== undefined) {\n this.shouldLogToConsole = options.enableConsoleLogging;\n }\n }\n this._nop = (tag, msg, ...jsonObject) => { };\n this._d = (tag, msg, ...jsonObject) => this.handleLog(\"DEBUG\" /* LogLevel.DEBUG */, tag, msg, jsonObject);\n this._i = (tag, msg, ...jsonObject) => this.handleLog(\"INFO\" /* LogLevel.INFO */, tag, msg, jsonObject);\n this._w = (tag, msg, ...jsonObject) => this.handleLog(\"WARN\" /* LogLevel.WARN */, tag, msg, jsonObject);\n this._e = (tag, msg, ...jsonObject) => this.handleLog(\"ERROR\" /* LogLevel.ERROR */, tag, msg, jsonObject);\n }\n get d() {\n if (!this.enabled) {\n return this._nop;\n }\n if (this.shouldLogToConsole) {\n return console.debug.bind(console, \"%s DEBUG [%s] %s@@\", this.renderDate(new Date()));\n }\n return this._d;\n }\n get w() {\n if (!this.enabled) {\n return this._nop;\n }\n if (this.shouldLogToConsole) {\n return console.warn.bind(console, \"%s WARN [%s] %s@@\", this.renderDate(new Date()));\n }\n return this._w;\n }\n get i() {\n if (!this.enabled) {\n return this._nop;\n }\n if (this.shouldLogToConsole) {\n return console.info.bind(console, \"%s INFO [%s] %s@@\", this.renderDate(new Date()));\n }\n return this._i;\n }\n get e() {\n if (this.shouldLogToConsole) {\n return console.error.bind(console, \"%s ERROR [%s] %s@@\", this.renderDate(new Date()));\n }\n else {\n return this._e;\n }\n }\n /**\n * Register callback function for receiving log messages.\n * To clear registered callback, can invoke this method without passing a callback as an argument.\n * @param callback Function which can handle the log messages.\n * @note Once a callback is registered this function delivers all the queued log messages in callback asynchronously.\n */\n setLogCallback(callback) {\n this.callback = callback;\n if (this.callback && this.queue.length) {\n window.setTimeout(() => {\n this.executeLogCallback(true);\n });\n }\n }\n /**\n * Informs whether a callback is currently registered.\n * @returns true if a callback is registered, false otherwise.\n */\n isCallbackRegistered() {\n return !!this.callback;\n }\n /**\n * Sanitizes sensitive information in the log message.\n * @param msg The message to sanitize.\n * @returns The sanitized message.\n */\n sanitize(msg) {\n if (!msg) {\n return msg;\n }\n const sanitizationGroups = [\n {\n secretBlock: /(partnerCustomData\" *: *\")((\\\\\"|[^\"])*)(?=\")/g,\n replaceStr: \"$1***\"\n },\n {\n secretBlock: /(\"clientIp\" *: *\")(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})(?=\")/g,\n replaceStr: \"$1***\"\n }\n ];\n for (const group of sanitizationGroups) {\n msg = msg.replace(group.secretBlock, group.replaceStr);\n }\n return msg;\n }\n /**\n * Converts arguments to a JSON string.\n * @param args The arguments to stringify.\n * @returns The stringified arguments.\n */\n stringifyArgs(...args) {\n if (args.length) {\n return `##${JSON.stringify(args)}`;\n }\n return \"\";\n }\n /**\n * @private\n * Delivers the first log in the queue via callback.\n * If callback is not set or queue is empty then this function is a no-op.\n * @param recursive If true, queues a task to deliver the next log via callback if the queue has more elements.\n */\n executeLogCallback(recursive) {\n if (this.callback && this.queue.length) {\n this.callback(this.queue[0]);\n this.queue.shift();\n if (recursive && this.queue.length) {\n // execute the next log through window.setTimeout.\n window.setTimeout(() => {\n this.executeLogCallback(true);\n });\n }\n }\n }\n /**\n * Handles log messages by creating a LogData object and adding it to the queue.\n * @param level The severity level of the log.\n * @param tag The source tag of the log.\n * @param msg The log message.\n * @param args Additional arguments for the log message.\n */\n handleLog(level, tag, msg, args) {\n let logMsg = `${msg}${this.stringifyArgs(...args)}`;\n let data = {\n timestamp: this.renderDate(new Date()),\n level: level,\n tag: this.module + \"/\" + tag,\n message: logMsg\n };\n this.queue.push(data);\n if (this.callback) {\n window.setTimeout(() => {\n this.executeLogCallback(false);\n });\n }\n else {\n if (this.queue.length > LogImpl.MAX_QUEUE_SIZE) {\n this.queue.shift();\n }\n }\n }\n /**\n * Renders the date in the format \"YYYY-MM-DD HH:MM:SS.XYZ\".\n * @param date The date to render.\n * @returns The formatted date string.\n */\n renderDate(date) {\n const lpad = (value, chars, padWith) => {\n const howMany = chars - value.length;\n if (howMany > 0) {\n let res = \"\";\n for (let i = 0; i < howMany; i++) {\n res += padWith;\n }\n res += value;\n return res;\n }\n return value;\n };\n const fullYear = (d) => {\n return lpad(d.getFullYear().toString(), 4, \"0\");\n };\n const month = (d) => {\n return lpad((d.getMonth() + 1).toString(), 2, \"0\");\n };\n const day = (d) => {\n return lpad(d.getDate().toString(), 2, \"0\");\n };\n const hours = (d) => {\n return lpad(d.getHours().toString(), 2, \"0\");\n };\n const minutes = (d) => {\n return lpad(d.getMinutes().toString(), 2, \"0\");\n };\n const seconds = (d) => {\n return lpad(d.getSeconds().toString(), 2, \"0\");\n };\n const millis = (d) => {\n return lpad(d.getMilliseconds().toString(), 3, \"0\");\n };\n const dateSeparator = \"-\";\n let ds = \"\";\n ds =\n fullYear(date) +\n dateSeparator +\n month(date) +\n dateSeparator +\n day(date) +\n \" \" +\n hours(date) +\n \":\" +\n minutes(date) +\n \":\" +\n seconds(date) +\n \".\" +\n millis(date);\n return ds;\n }\n}\nexports.LogImpl = LogImpl;\nLogImpl.MAX_QUEUE_SIZE = 50;\n//# sourceMappingURL=logger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Updates to this file should also be replicated to @opentelemetry/core too.\n/**\n * - globalThis (New standard)\n * - self (Will return the current window instance for supported browsers)\n * - window (fallback for older browser implementations)\n * - global (NodeJS implementation)\n * - (When all else fails)\n */\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins, no-undef\nexport var _globalThis = typeof globalThis === 'object'\n ? globalThis\n : typeof self === 'object'\n ? self\n : typeof window === 'object'\n ? window\n : typeof global === 'object'\n ? global\n : {};\n//# sourceMappingURL=globalThis.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// this is autogenerated file, see scripts/version-update.js\nexport var VERSION = '1.4.1';\n//# sourceMappingURL=version.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { VERSION } from '../version';\nvar re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(ownVersion) {\n var acceptedVersions = new Set([ownVersion]);\n var rejectedVersions = new Set();\n var myVersionMatch = ownVersion.match(re);\n if (!myVersionMatch) {\n // we cannot guarantee compatibility so we always return noop\n return function () { return false; };\n }\n var ownVersionParsed = {\n major: +myVersionMatch[1],\n minor: +myVersionMatch[2],\n patch: +myVersionMatch[3],\n prerelease: myVersionMatch[4],\n };\n // if ownVersion has a prerelease tag, versions must match exactly\n if (ownVersionParsed.prerelease != null) {\n return function isExactmatch(globalVersion) {\n return globalVersion === ownVersion;\n };\n }\n function _reject(v) {\n rejectedVersions.add(v);\n return false;\n }\n function _accept(v) {\n acceptedVersions.add(v);\n return true;\n }\n return function isCompatible(globalVersion) {\n if (acceptedVersions.has(globalVersion)) {\n return true;\n }\n if (rejectedVersions.has(globalVersion)) {\n return false;\n }\n var globalVersionMatch = globalVersion.match(re);\n if (!globalVersionMatch) {\n // cannot parse other version\n // we cannot guarantee compatibility so we always noop\n return _reject(globalVersion);\n }\n var globalVersionParsed = {\n major: +globalVersionMatch[1],\n minor: +globalVersionMatch[2],\n patch: +globalVersionMatch[3],\n prerelease: globalVersionMatch[4],\n };\n // if globalVersion has a prerelease tag, versions must match exactly\n if (globalVersionParsed.prerelease != null) {\n return _reject(globalVersion);\n }\n // major versions must match\n if (ownVersionParsed.major !== globalVersionParsed.major) {\n return _reject(globalVersion);\n }\n if (ownVersionParsed.major === 0) {\n if (ownVersionParsed.minor === globalVersionParsed.minor &&\n ownVersionParsed.patch <= globalVersionParsed.patch) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n }\n if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n return _accept(globalVersion);\n }\n return _reject(globalVersion);\n };\n}\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n * - 1.x package cannot use global 2.x package\n * - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport var isCompatible = _makeCompatibilityCheck(VERSION);\n//# sourceMappingURL=semver.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { _globalThis } from '../platform';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\nvar major = VERSION.split('.')[0];\nvar GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\"opentelemetry.js.api.\" + major);\nvar _global = _globalThis;\nexport function registerGlobal(type, instance, diag, allowOverride) {\n var _a;\n if (allowOverride === void 0) { allowOverride = false; }\n var api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : {\n version: VERSION,\n });\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n var err = new Error(\"@opentelemetry/api: Attempted duplicate registration of API: \" + type);\n diag.error(err.stack || err.message);\n return false;\n }\n if (api.version !== VERSION) {\n // All registered APIs must be of the same version exactly\n var err = new Error(\"@opentelemetry/api: Registration of version v\" + api.version + \" for \" + type + \" does not match previously registered API v\" + VERSION);\n diag.error(err.stack || err.message);\n return false;\n }\n api[type] = instance;\n diag.debug(\"@opentelemetry/api: Registered a global for \" + type + \" v\" + VERSION + \".\");\n return true;\n}\nexport function getGlobal(type) {\n var _a, _b;\n var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version;\n if (!globalVersion || !isCompatible(globalVersion)) {\n return;\n }\n return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type];\n}\nexport function unregisterGlobal(type, diag) {\n diag.debug(\"@opentelemetry/api: Unregistering a global for \" + type + \" v\" + VERSION + \".\");\n var api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n if (api) {\n delete api[type];\n }\n}\n//# sourceMappingURL=global-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { getGlobal } from '../internal/global-utils';\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nvar DiagComponentLogger = /** @class */ (function () {\n function DiagComponentLogger(props) {\n this._namespace = props.namespace || 'DiagComponentLogger';\n }\n DiagComponentLogger.prototype.debug = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('debug', this._namespace, args);\n };\n DiagComponentLogger.prototype.error = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('error', this._namespace, args);\n };\n DiagComponentLogger.prototype.info = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('info', this._namespace, args);\n };\n DiagComponentLogger.prototype.warn = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('warn', this._namespace, args);\n };\n DiagComponentLogger.prototype.verbose = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return logProxy('verbose', this._namespace, args);\n };\n return DiagComponentLogger;\n}());\nexport { DiagComponentLogger };\nfunction logProxy(funcName, namespace, args) {\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger) {\n return;\n }\n args.unshift(namespace);\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n}\n//# sourceMappingURL=ComponentLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport var DiagLogLevel;\n(function (DiagLogLevel) {\n /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n DiagLogLevel[DiagLogLevel[\"NONE\"] = 0] = \"NONE\";\n /** Identifies an error scenario */\n DiagLogLevel[DiagLogLevel[\"ERROR\"] = 30] = \"ERROR\";\n /** Identifies a warning scenario */\n DiagLogLevel[DiagLogLevel[\"WARN\"] = 50] = \"WARN\";\n /** General informational log message */\n DiagLogLevel[DiagLogLevel[\"INFO\"] = 60] = \"INFO\";\n /** General debug log message */\n DiagLogLevel[DiagLogLevel[\"DEBUG\"] = 70] = \"DEBUG\";\n /**\n * Detailed trace level logging should only be used for development, should only be set\n * in a development environment.\n */\n DiagLogLevel[DiagLogLevel[\"VERBOSE\"] = 80] = \"VERBOSE\";\n /** Used to set the logging level to include all logging */\n DiagLogLevel[DiagLogLevel[\"ALL\"] = 9999] = \"ALL\";\n})(DiagLogLevel || (DiagLogLevel = {}));\n//# sourceMappingURL=types.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport { DiagLogLevel, } from '../diag/types';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nvar API_NAME = 'diag';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nvar DiagAPI = /** @class */ (function () {\n /**\n * Private internal constructor\n * @private\n */\n function DiagAPI() {\n function _logProxy(funcName) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var logger = getGlobal('diag');\n // shortcut if logger not set\n if (!logger)\n return;\n return logger[funcName].apply(logger, __spreadArray([], __read(args), false));\n };\n }\n // Using self local variable for minification purposes as 'this' cannot be minified\n var self = this;\n // DiagAPI specific functions\n var setLogger = function (logger, optionsOrLogLevel) {\n var _a, _b, _c;\n if (optionsOrLogLevel === void 0) { optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }; }\n if (logger === self) {\n // There isn't much we can do here.\n // Logging to the console might break the user application.\n // Try to log to self. If a logger was previously registered it will receive the log.\n var err = new Error('Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation');\n self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message);\n return false;\n }\n if (typeof optionsOrLogLevel === 'number') {\n optionsOrLogLevel = {\n logLevel: optionsOrLogLevel,\n };\n }\n var oldLogger = getGlobal('diag');\n var newLogger = createLogLevelDiagLogger((_b = optionsOrLogLevel.logLevel) !== null && _b !== void 0 ? _b : DiagLogLevel.INFO, logger);\n // There already is an logger registered. We'll let it know before overwriting it.\n if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : '';\n oldLogger.warn(\"Current logger will be overwritten from \" + stack);\n newLogger.warn(\"Current logger will overwrite one already registered from \" + stack);\n }\n return registerGlobal('diag', newLogger, self, true);\n };\n self.setLogger = setLogger;\n self.disable = function () {\n unregisterGlobal(API_NAME, self);\n };\n self.createComponentLogger = function (options) {\n return new DiagComponentLogger(options);\n };\n self.verbose = _logProxy('verbose');\n self.debug = _logProxy('debug');\n self.info = _logProxy('info');\n self.warn = _logProxy('warn');\n self.error = _logProxy('error');\n }\n /** Get the singleton instance of the DiagAPI API */\n DiagAPI.instance = function () {\n if (!this._instance) {\n this._instance = new DiagAPI();\n }\n return this._instance;\n };\n return DiagAPI;\n}());\nexport { DiagAPI };\n//# sourceMappingURL=diag.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DiagLogLevel } from '../types';\nexport function createLogLevelDiagLogger(maxLevel, logger) {\n if (maxLevel < DiagLogLevel.NONE) {\n maxLevel = DiagLogLevel.NONE;\n }\n else if (maxLevel > DiagLogLevel.ALL) {\n maxLevel = DiagLogLevel.ALL;\n }\n // In case the logger is null or undefined\n logger = logger || {};\n function _filterFunc(funcName, theLevel) {\n var theFunc = logger[funcName];\n if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n return theFunc.bind(logger);\n }\n return function () { };\n }\n return {\n error: _filterFunc('error', DiagLogLevel.ERROR),\n warn: _filterFunc('warn', DiagLogLevel.WARN),\n info: _filterFunc('info', DiagLogLevel.INFO),\n debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n };\n}\n//# sourceMappingURL=logLevelLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar BaggageImpl = /** @class */ (function () {\n function BaggageImpl(entries) {\n this._entries = entries ? new Map(entries) : new Map();\n }\n BaggageImpl.prototype.getEntry = function (key) {\n var entry = this._entries.get(key);\n if (!entry) {\n return undefined;\n }\n return Object.assign({}, entry);\n };\n BaggageImpl.prototype.getAllEntries = function () {\n return Array.from(this._entries.entries()).map(function (_a) {\n var _b = __read(_a, 2), k = _b[0], v = _b[1];\n return [k, v];\n });\n };\n BaggageImpl.prototype.setEntry = function (key, entry) {\n var newBaggage = new BaggageImpl(this._entries);\n newBaggage._entries.set(key, entry);\n return newBaggage;\n };\n BaggageImpl.prototype.removeEntry = function (key) {\n var newBaggage = new BaggageImpl(this._entries);\n newBaggage._entries.delete(key);\n return newBaggage;\n };\n BaggageImpl.prototype.removeEntries = function () {\n var e_1, _a;\n var keys = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n keys[_i] = arguments[_i];\n }\n var newBaggage = new BaggageImpl(this._entries);\n try {\n for (var keys_1 = __values(keys), keys_1_1 = keys_1.next(); !keys_1_1.done; keys_1_1 = keys_1.next()) {\n var key = keys_1_1.value;\n newBaggage._entries.delete(key);\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (keys_1_1 && !keys_1_1.done && (_a = keys_1.return)) _a.call(keys_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return newBaggage;\n };\n BaggageImpl.prototype.clear = function () {\n return new BaggageImpl();\n };\n return BaggageImpl;\n}());\nexport { BaggageImpl };\n//# sourceMappingURL=baggage-impl.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Symbol used to make BaggageEntryMetadata an opaque type\n */\nexport var baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');\n//# sourceMappingURL=symbol.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { DiagAPI } from '../api/diag';\nimport { BaggageImpl } from './internal/baggage-impl';\nimport { baggageEntryMetadataSymbol } from './internal/symbol';\nvar diag = DiagAPI.instance();\n/**\n * Create a new Baggage with optional entries\n *\n * @param entries An array of baggage entries the new baggage should contain\n */\nexport function createBaggage(entries) {\n if (entries === void 0) { entries = {}; }\n return new BaggageImpl(new Map(Object.entries(entries)));\n}\n/**\n * Create a serializable BaggageEntryMetadata object from a string.\n *\n * @param str string metadata. Format is currently not defined by the spec and has no special meaning.\n *\n */\nexport function baggageEntryMetadataFromString(str) {\n if (typeof str !== 'string') {\n diag.error(\"Cannot create baggage metadata from unknown type: \" + typeof str);\n str = '';\n }\n return {\n __TYPE__: baggageEntryMetadataSymbol,\n toString: function () {\n return str;\n },\n };\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description) {\n // The specification states that for the same input, multiple calls should\n // return different keys. Due to the nature of the JS dependency management\n // system, this creates problems where multiple versions of some package\n // could hold different keys for the same property.\n //\n // Therefore, we use Symbol.for which returns the same key for the same input.\n return Symbol.for(description);\n}\nvar BaseContext = /** @class */ (function () {\n /**\n * Construct a new context which inherits values from an optional parent context.\n *\n * @param parentContext a context from which to inherit values\n */\n function BaseContext(parentContext) {\n // for minification\n var self = this;\n self._currentContext = parentContext ? new Map(parentContext) : new Map();\n self.getValue = function (key) { return self._currentContext.get(key); };\n self.setValue = function (key, value) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.set(key, value);\n return context;\n };\n self.deleteValue = function (key) {\n var context = new BaseContext(self._currentContext);\n context._currentContext.delete(key);\n return context;\n };\n }\n return BaseContext;\n}());\n/** The root context is used as the default parent context when there is no active context */\nexport var ROOT_CONTEXT = new BaseContext();\n//# sourceMappingURL=context.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n/**\n * NoopMeter is a noop implementation of the {@link Meter} interface. It reuses\n * constant NoopMetrics for all of its methods.\n */\nvar NoopMeter = /** @class */ (function () {\n function NoopMeter() {\n }\n /**\n * @see {@link Meter.createHistogram}\n */\n NoopMeter.prototype.createHistogram = function (_name, _options) {\n return NOOP_HISTOGRAM_METRIC;\n };\n /**\n * @see {@link Meter.createCounter}\n */\n NoopMeter.prototype.createCounter = function (_name, _options) {\n return NOOP_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createUpDownCounter}\n */\n NoopMeter.prototype.createUpDownCounter = function (_name, _options) {\n return NOOP_UP_DOWN_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createObservableGauge}\n */\n NoopMeter.prototype.createObservableGauge = function (_name, _options) {\n return NOOP_OBSERVABLE_GAUGE_METRIC;\n };\n /**\n * @see {@link Meter.createObservableCounter}\n */\n NoopMeter.prototype.createObservableCounter = function (_name, _options) {\n return NOOP_OBSERVABLE_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.createObservableUpDownCounter}\n */\n NoopMeter.prototype.createObservableUpDownCounter = function (_name, _options) {\n return NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;\n };\n /**\n * @see {@link Meter.addBatchObservableCallback}\n */\n NoopMeter.prototype.addBatchObservableCallback = function (_callback, _observables) { };\n /**\n * @see {@link Meter.removeBatchObservableCallback}\n */\n NoopMeter.prototype.removeBatchObservableCallback = function (_callback) { };\n return NoopMeter;\n}());\nexport { NoopMeter };\nvar NoopMetric = /** @class */ (function () {\n function NoopMetric() {\n }\n return NoopMetric;\n}());\nexport { NoopMetric };\nvar NoopCounterMetric = /** @class */ (function (_super) {\n __extends(NoopCounterMetric, _super);\n function NoopCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopCounterMetric.prototype.add = function (_value, _attributes) { };\n return NoopCounterMetric;\n}(NoopMetric));\nexport { NoopCounterMetric };\nvar NoopUpDownCounterMetric = /** @class */ (function (_super) {\n __extends(NoopUpDownCounterMetric, _super);\n function NoopUpDownCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopUpDownCounterMetric.prototype.add = function (_value, _attributes) { };\n return NoopUpDownCounterMetric;\n}(NoopMetric));\nexport { NoopUpDownCounterMetric };\nvar NoopHistogramMetric = /** @class */ (function (_super) {\n __extends(NoopHistogramMetric, _super);\n function NoopHistogramMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NoopHistogramMetric.prototype.record = function (_value, _attributes) { };\n return NoopHistogramMetric;\n}(NoopMetric));\nexport { NoopHistogramMetric };\nvar NoopObservableMetric = /** @class */ (function () {\n function NoopObservableMetric() {\n }\n NoopObservableMetric.prototype.addCallback = function (_callback) { };\n NoopObservableMetric.prototype.removeCallback = function (_callback) { };\n return NoopObservableMetric;\n}());\nexport { NoopObservableMetric };\nvar NoopObservableCounterMetric = /** @class */ (function (_super) {\n __extends(NoopObservableCounterMetric, _super);\n function NoopObservableCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableCounterMetric;\n}(NoopObservableMetric));\nexport { NoopObservableCounterMetric };\nvar NoopObservableGaugeMetric = /** @class */ (function (_super) {\n __extends(NoopObservableGaugeMetric, _super);\n function NoopObservableGaugeMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableGaugeMetric;\n}(NoopObservableMetric));\nexport { NoopObservableGaugeMetric };\nvar NoopObservableUpDownCounterMetric = /** @class */ (function (_super) {\n __extends(NoopObservableUpDownCounterMetric, _super);\n function NoopObservableUpDownCounterMetric() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return NoopObservableUpDownCounterMetric;\n}(NoopObservableMetric));\nexport { NoopObservableUpDownCounterMetric };\nexport var NOOP_METER = new NoopMeter();\n// Synchronous instruments\nexport var NOOP_COUNTER_METRIC = new NoopCounterMetric();\nexport var NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric();\nexport var NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric();\n// Asynchronous instruments\nexport var NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric();\nexport var NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric();\nexport var NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric();\n/**\n * Create a no-op Meter\n */\nexport function createNoopMeter() {\n return NOOP_METER;\n}\n//# sourceMappingURL=NoopMeter.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** The Type of value. It describes how the data is reported. */\nexport var ValueType;\n(function (ValueType) {\n ValueType[ValueType[\"INT\"] = 0] = \"INT\";\n ValueType[ValueType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n})(ValueType || (ValueType = {}));\n//# sourceMappingURL=Metric.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar consoleMap = [\n { n: 'error', c: 'error' },\n { n: 'warn', c: 'warn' },\n { n: 'info', c: 'info' },\n { n: 'debug', c: 'debug' },\n { n: 'verbose', c: 'trace' },\n];\n/**\n * A simple Immutable Console based diagnostic logger which will output any messages to the Console.\n * If you want to limit the amount of logging to a specific level or lower use the\n * {@link createLogLevelDiagLogger}\n */\nvar DiagConsoleLogger = /** @class */ (function () {\n function DiagConsoleLogger() {\n function _consoleFunc(funcName) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (console) {\n // Some environments only expose the console when the F12 developer console is open\n // eslint-disable-next-line no-console\n var theFunc = console[funcName];\n if (typeof theFunc !== 'function') {\n // Not all environments support all functions\n // eslint-disable-next-line no-console\n theFunc = console.log;\n }\n // One last final check\n if (typeof theFunc === 'function') {\n return theFunc.apply(console, args);\n }\n }\n };\n }\n for (var i = 0; i < consoleMap.length; i++) {\n this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);\n }\n }\n return DiagConsoleLogger;\n}());\nexport { DiagConsoleLogger };\n//# sourceMappingURL=consoleLogger.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var defaultTextMapGetter = {\n get: function (carrier, key) {\n if (carrier == null) {\n return undefined;\n }\n return carrier[key];\n },\n keys: function (carrier) {\n if (carrier == null) {\n return [];\n }\n return Object.keys(carrier);\n },\n};\nexport var defaultTextMapSetter = {\n set: function (carrier, key, value) {\n if (carrier == null) {\n return;\n }\n carrier[key] = value;\n },\n};\n//# sourceMappingURL=TextMapPropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var TraceFlags;\n(function (TraceFlags) {\n /** Represents no flag set. */\n TraceFlags[TraceFlags[\"NONE\"] = 0] = \"NONE\";\n /** Bit to represent whether trace is sampled in trace flags. */\n TraceFlags[TraceFlags[\"SAMPLED\"] = 1] = \"SAMPLED\";\n})(TraceFlags || (TraceFlags = {}));\n//# sourceMappingURL=trace_flags.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { ROOT_CONTEXT } from './context';\nvar NoopContextManager = /** @class */ (function () {\n function NoopContextManager() {\n }\n NoopContextManager.prototype.active = function () {\n return ROOT_CONTEXT;\n };\n NoopContextManager.prototype.with = function (_context, fn, thisArg) {\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return fn.call.apply(fn, __spreadArray([thisArg], __read(args), false));\n };\n NoopContextManager.prototype.bind = function (_context, target) {\n return target;\n };\n NoopContextManager.prototype.enable = function () {\n return this;\n };\n NoopContextManager.prototype.disable = function () {\n return this;\n };\n return NoopContextManager;\n}());\nexport { NoopContextManager };\n//# sourceMappingURL=NoopContextManager.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'context';\nvar NOOP_CONTEXT_MANAGER = new NoopContextManager();\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nvar ContextAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function ContextAPI() {\n }\n /** Get the singleton instance of the Context API */\n ContextAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new ContextAPI();\n }\n return this._instance;\n };\n /**\n * Set the current context manager.\n *\n * @returns true if the context manager was successfully registered, else false\n */\n ContextAPI.prototype.setGlobalContextManager = function (contextManager) {\n return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n };\n /**\n * Get the currently active context\n */\n ContextAPI.prototype.active = function () {\n return this._getContextManager().active();\n };\n /**\n * Execute a function with an active context\n *\n * @param context context to be active during function execution\n * @param fn function to execute in a context\n * @param thisArg optional receiver to be used for calling fn\n * @param args optional arguments forwarded to fn\n */\n ContextAPI.prototype.with = function (context, fn, thisArg) {\n var _a;\n var args = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n args[_i - 3] = arguments[_i];\n }\n return (_a = this._getContextManager()).with.apply(_a, __spreadArray([context, fn, thisArg], __read(args), false));\n };\n /**\n * Bind a context to a target function or event emitter\n *\n * @param context context to bind to the event emitter or function. Defaults to the currently active context\n * @param target function or event emitter to bind\n */\n ContextAPI.prototype.bind = function (context, target) {\n return this._getContextManager().bind(context, target);\n };\n ContextAPI.prototype._getContextManager = function () {\n return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n };\n /** Disable and remove the global context manager */\n ContextAPI.prototype.disable = function () {\n this._getContextManager().disable();\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n return ContextAPI;\n}());\nexport { ContextAPI };\n//# sourceMappingURL=context.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TraceFlags } from './trace_flags';\nexport var INVALID_SPANID = '0000000000000000';\nexport var INVALID_TRACEID = '00000000000000000000000000000000';\nexport var INVALID_SPAN_CONTEXT = {\n traceId: INVALID_TRACEID,\n spanId: INVALID_SPANID,\n traceFlags: TraceFlags.NONE,\n};\n//# sourceMappingURL=invalid-span-constants.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nvar NonRecordingSpan = /** @class */ (function () {\n function NonRecordingSpan(_spanContext) {\n if (_spanContext === void 0) { _spanContext = INVALID_SPAN_CONTEXT; }\n this._spanContext = _spanContext;\n }\n // Returns a SpanContext.\n NonRecordingSpan.prototype.spanContext = function () {\n return this._spanContext;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttribute = function (_key, _value) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setAttributes = function (_attributes) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.addEvent = function (_name, _attributes) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.setStatus = function (_status) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.updateName = function (_name) {\n return this;\n };\n // By default does nothing\n NonRecordingSpan.prototype.end = function (_endTime) { };\n // isRecording always returns false for NonRecordingSpan.\n NonRecordingSpan.prototype.isRecording = function () {\n return false;\n };\n // By default does nothing\n NonRecordingSpan.prototype.recordException = function (_exception, _time) { };\n return NonRecordingSpan;\n}());\nexport { NonRecordingSpan };\n//# sourceMappingURL=NonRecordingSpan.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createContextKey } from '../context/context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n/**\n * span key\n */\nvar SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context) {\n return context.getValue(SPAN_KEY) || undefined;\n}\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan() {\n return getSpan(ContextAPI.getInstance().active());\n}\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context, span) {\n return context.setValue(SPAN_KEY, span);\n}\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context) {\n return context.deleteValue(SPAN_KEY);\n}\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(context, spanContext) {\n return setSpan(context, new NonRecordingSpan(spanContext));\n}\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context) {\n var _a;\n return (_a = getSpan(context)) === null || _a === void 0 ? void 0 : _a.spanContext();\n}\n//# sourceMappingURL=context-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nvar VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nvar VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\nexport function isValidTraceId(traceId) {\n return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\nexport function isValidSpanId(spanId) {\n return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext) {\n return (isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId));\n}\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext) {\n return new NonRecordingSpan(spanContext);\n}\n//# sourceMappingURL=spancontext-utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ContextAPI } from '../api/context';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { isSpanContextValid } from './spancontext-utils';\nvar contextApi = ContextAPI.getInstance();\n/**\n * No-op implementations of {@link Tracer}.\n */\nvar NoopTracer = /** @class */ (function () {\n function NoopTracer() {\n }\n // startSpan starts a noop span.\n NoopTracer.prototype.startSpan = function (name, options, context) {\n if (context === void 0) { context = contextApi.active(); }\n var root = Boolean(options === null || options === void 0 ? void 0 : options.root);\n if (root) {\n return new NonRecordingSpan();\n }\n var parentFromContext = context && getSpanContext(context);\n if (isSpanContext(parentFromContext) &&\n isSpanContextValid(parentFromContext)) {\n return new NonRecordingSpan(parentFromContext);\n }\n else {\n return new NonRecordingSpan();\n }\n };\n NoopTracer.prototype.startActiveSpan = function (name, arg2, arg3, arg4) {\n var opts;\n var ctx;\n var fn;\n if (arguments.length < 2) {\n return;\n }\n else if (arguments.length === 2) {\n fn = arg2;\n }\n else if (arguments.length === 3) {\n opts = arg2;\n fn = arg3;\n }\n else {\n opts = arg2;\n ctx = arg3;\n fn = arg4;\n }\n var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active();\n var span = this.startSpan(name, opts, parentContext);\n var contextWithSpanSet = setSpan(parentContext, span);\n return contextApi.with(contextWithSpanSet, fn, undefined, span);\n };\n return NoopTracer;\n}());\nexport { NoopTracer };\nfunction isSpanContext(spanContext) {\n return (typeof spanContext === 'object' &&\n typeof spanContext['spanId'] === 'string' &&\n typeof spanContext['traceId'] === 'string' &&\n typeof spanContext['traceFlags'] === 'number');\n}\n//# sourceMappingURL=NoopTracer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\nvar NOOP_TRACER = new NoopTracer();\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nvar ProxyTracer = /** @class */ (function () {\n function ProxyTracer(_provider, name, version, options) {\n this._provider = _provider;\n this.name = name;\n this.version = version;\n this.options = options;\n }\n ProxyTracer.prototype.startSpan = function (name, options, context) {\n return this._getTracer().startSpan(name, options, context);\n };\n ProxyTracer.prototype.startActiveSpan = function (_name, _options, _context, _fn) {\n var tracer = this._getTracer();\n return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n };\n /**\n * Try to get a tracer from the proxy tracer provider.\n * If the proxy tracer provider has no delegate, return a noop tracer.\n */\n ProxyTracer.prototype._getTracer = function () {\n if (this._delegate) {\n return this._delegate;\n }\n var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options);\n if (!tracer) {\n return NOOP_TRACER;\n }\n this._delegate = tracer;\n return this._delegate;\n };\n return ProxyTracer;\n}());\nexport { ProxyTracer };\n//# sourceMappingURL=ProxyTracer.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @deprecated use the one declared in @opentelemetry/sdk-trace-base instead.\n * A sampling decision that determines how a {@link Span} will be recorded\n * and collected.\n */\nexport var SamplingDecision;\n(function (SamplingDecision) {\n /**\n * `Span.isRecording() === false`, span will not be recorded and all events\n * and attributes will be dropped.\n */\n SamplingDecision[SamplingDecision[\"NOT_RECORD\"] = 0] = \"NOT_RECORD\";\n /**\n * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags}\n * MUST NOT be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD\"] = 1] = \"RECORD\";\n /**\n * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags}\n * MUST be set.\n */\n SamplingDecision[SamplingDecision[\"RECORD_AND_SAMPLED\"] = 2] = \"RECORD_AND_SAMPLED\";\n})(SamplingDecision || (SamplingDecision = {}));\n//# sourceMappingURL=SamplingResult.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport var SpanKind;\n(function (SpanKind) {\n /** Default value. Indicates that the span is used internally. */\n SpanKind[SpanKind[\"INTERNAL\"] = 0] = \"INTERNAL\";\n /**\n * Indicates that the span covers server-side handling of an RPC or other\n * remote request.\n */\n SpanKind[SpanKind[\"SERVER\"] = 1] = \"SERVER\";\n /**\n * Indicates that the span covers the client-side wrapper around an RPC or\n * other remote request.\n */\n SpanKind[SpanKind[\"CLIENT\"] = 2] = \"CLIENT\";\n /**\n * Indicates that the span describes producer sending a message to a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"PRODUCER\"] = 3] = \"PRODUCER\";\n /**\n * Indicates that the span describes consumer receiving a message from a\n * broker. Unlike client and server, there is no direct critical path latency\n * relationship between producer and consumer spans.\n */\n SpanKind[SpanKind[\"CONSUMER\"] = 4] = \"CONSUMER\";\n})(SpanKind || (SpanKind = {}));\n//# sourceMappingURL=span_kind.js.map","/**\n * An enumeration of status codes.\n */\nexport var SpanStatusCode;\n(function (SpanStatusCode) {\n /**\n * The default status.\n */\n SpanStatusCode[SpanStatusCode[\"UNSET\"] = 0] = \"UNSET\";\n /**\n * The operation has been validated by an Application developer or\n * Operator to have completed successfully.\n */\n SpanStatusCode[SpanStatusCode[\"OK\"] = 1] = \"OK\";\n /**\n * The operation contains an error.\n */\n SpanStatusCode[SpanStatusCode[\"ERROR\"] = 2] = \"ERROR\";\n})(SpanStatusCode || (SpanStatusCode = {}));\n//# sourceMappingURL=status.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nvar NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n * When a delegate is set, traces are provided from the delegate.\n * When a delegate is set after tracers have already been provided,\n * all tracers already provided will use the provided delegate implementation.\n */\nvar ProxyTracerProvider = /** @class */ (function () {\n function ProxyTracerProvider() {\n }\n /**\n * Get a {@link ProxyTracer}\n */\n ProxyTracerProvider.prototype.getTracer = function (name, version, options) {\n var _a;\n return ((_a = this.getDelegateTracer(name, version, options)) !== null && _a !== void 0 ? _a : new ProxyTracer(this, name, version, options));\n };\n ProxyTracerProvider.prototype.getDelegate = function () {\n var _a;\n return (_a = this._delegate) !== null && _a !== void 0 ? _a : NOOP_TRACER_PROVIDER;\n };\n /**\n * Set the delegate tracer provider\n */\n ProxyTracerProvider.prototype.setDelegate = function (delegate) {\n this._delegate = delegate;\n };\n ProxyTracerProvider.prototype.getDelegateTracer = function (name, version, options) {\n var _a;\n return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version, options);\n };\n return ProxyTracerProvider;\n}());\nexport { ProxyTracerProvider };\n//# sourceMappingURL=ProxyTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NoopTracer } from './NoopTracer';\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nvar NoopTracerProvider = /** @class */ (function () {\n function NoopTracerProvider() {\n }\n NoopTracerProvider.prototype.getTracer = function (_name, _version, _options) {\n return new NoopTracer();\n };\n return NoopTracerProvider;\n}());\nexport { NoopTracerProvider };\n//# sourceMappingURL=NoopTracerProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nvar VALID_KEY_CHAR_RANGE = '[_0-9a-z-*/]';\nvar VALID_KEY = \"[a-z]\" + VALID_KEY_CHAR_RANGE + \"{0,255}\";\nvar VALID_VENDOR_KEY = \"[a-z0-9]\" + VALID_KEY_CHAR_RANGE + \"{0,240}@[a-z]\" + VALID_KEY_CHAR_RANGE + \"{0,13}\";\nvar VALID_KEY_REGEX = new RegExp(\"^(?:\" + VALID_KEY + \"|\" + VALID_VENDOR_KEY + \")$\");\nvar VALID_VALUE_BASE_REGEX = /^[ -~]{0,255}[!-~]$/;\nvar INVALID_VALUE_COMMA_EQUAL_REGEX = /,|=/;\n/**\n * Key is opaque string up to 256 characters printable. It MUST begin with a\n * lowercase letter, and can only contain lowercase letters a-z, digits 0-9,\n * underscores _, dashes -, asterisks *, and forward slashes /.\n * For multi-tenant vendor scenarios, an at sign (@) can be used to prefix the\n * vendor name. Vendors SHOULD set the tenant ID at the beginning of the key.\n * see https://www.w3.org/TR/trace-context/#key\n */\nexport function validateKey(key) {\n return VALID_KEY_REGEX.test(key);\n}\n/**\n * Value is opaque string up to 256 characters printable ASCII RFC0020\n * characters (i.e., the range 0x20 to 0x7E) except comma , and =.\n */\nexport function validateValue(value) {\n return (VALID_VALUE_BASE_REGEX.test(value) &&\n !INVALID_VALUE_COMMA_EQUAL_REGEX.test(value));\n}\n//# sourceMappingURL=tracestate-validators.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { validateKey, validateValue } from './tracestate-validators';\nvar MAX_TRACE_STATE_ITEMS = 32;\nvar MAX_TRACE_STATE_LEN = 512;\nvar LIST_MEMBERS_SEPARATOR = ',';\nvar LIST_MEMBER_KEY_VALUE_SPLITTER = '=';\n/**\n * TraceState must be a class and not a simple object type because of the spec\n * requirement (https://www.w3.org/TR/trace-context/#tracestate-field).\n *\n * Here is the list of allowed mutations:\n * - New key-value pair should be added into the beginning of the list\n * - The value of any key can be updated. Modified keys MUST be moved to the\n * beginning of the list.\n */\nvar TraceStateImpl = /** @class */ (function () {\n function TraceStateImpl(rawTraceState) {\n this._internalState = new Map();\n if (rawTraceState)\n this._parse(rawTraceState);\n }\n TraceStateImpl.prototype.set = function (key, value) {\n // TODO: Benchmark the different approaches(map vs list) and\n // use the faster one.\n var traceState = this._clone();\n if (traceState._internalState.has(key)) {\n traceState._internalState.delete(key);\n }\n traceState._internalState.set(key, value);\n return traceState;\n };\n TraceStateImpl.prototype.unset = function (key) {\n var traceState = this._clone();\n traceState._internalState.delete(key);\n return traceState;\n };\n TraceStateImpl.prototype.get = function (key) {\n return this._internalState.get(key);\n };\n TraceStateImpl.prototype.serialize = function () {\n var _this = this;\n return this._keys()\n .reduce(function (agg, key) {\n agg.push(key + LIST_MEMBER_KEY_VALUE_SPLITTER + _this.get(key));\n return agg;\n }, [])\n .join(LIST_MEMBERS_SEPARATOR);\n };\n TraceStateImpl.prototype._parse = function (rawTraceState) {\n if (rawTraceState.length > MAX_TRACE_STATE_LEN)\n return;\n this._internalState = rawTraceState\n .split(LIST_MEMBERS_SEPARATOR)\n .reverse() // Store in reverse so new keys (.set(...)) will be placed at the beginning\n .reduce(function (agg, part) {\n var listMember = part.trim(); // Optional Whitespace (OWS) handling\n var i = listMember.indexOf(LIST_MEMBER_KEY_VALUE_SPLITTER);\n if (i !== -1) {\n var key = listMember.slice(0, i);\n var value = listMember.slice(i + 1, part.length);\n if (validateKey(key) && validateValue(value)) {\n agg.set(key, value);\n }\n else {\n // TODO: Consider to add warning log\n }\n }\n return agg;\n }, new Map());\n // Because of the reverse() requirement, trunc must be done after map is created\n if (this._internalState.size > MAX_TRACE_STATE_ITEMS) {\n this._internalState = new Map(Array.from(this._internalState.entries())\n .reverse() // Use reverse same as original tracestate parse chain\n .slice(0, MAX_TRACE_STATE_ITEMS));\n }\n };\n TraceStateImpl.prototype._keys = function () {\n return Array.from(this._internalState.keys()).reverse();\n };\n TraceStateImpl.prototype._clone = function () {\n var traceState = new TraceStateImpl();\n traceState._internalState = new Map(this._internalState);\n return traceState;\n };\n return TraceStateImpl;\n}());\nexport { TraceStateImpl };\n//# sourceMappingURL=tracestate-impl.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TraceStateImpl } from './tracestate-impl';\nexport function createTraceState(rawTraceState) {\n return new TraceStateImpl(rawTraceState);\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport var context = ContextAPI.getInstance();\n//# sourceMappingURL=context-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { DiagAPI } from './api/diag';\n/**\n * Entrypoint for Diag API.\n * Defines Diagnostic handler used for internal diagnostic logging operations.\n * The default provides a Noop DiagLogger implementation which may be changed via the\n * diag.setLogger(logger: DiagLogger) function.\n */\nexport var diag = DiagAPI.instance();\n//# sourceMappingURL=diag-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_METER } from './NoopMeter';\n/**\n * An implementation of the {@link MeterProvider} which returns an impotent Meter\n * for all calls to `getMeter`\n */\nvar NoopMeterProvider = /** @class */ (function () {\n function NoopMeterProvider() {\n }\n NoopMeterProvider.prototype.getMeter = function (_name, _version, _options) {\n return NOOP_METER;\n };\n return NoopMeterProvider;\n}());\nexport { NoopMeterProvider };\nexport var NOOP_METER_PROVIDER = new NoopMeterProvider();\n//# sourceMappingURL=NoopMeterProvider.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { NOOP_METER_PROVIDER } from '../metrics/NoopMeterProvider';\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'metrics';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Metrics API\n */\nvar MetricsAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function MetricsAPI() {\n }\n /** Get the singleton instance of the Metrics API */\n MetricsAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new MetricsAPI();\n }\n return this._instance;\n };\n /**\n * Set the current global meter provider.\n * Returns true if the meter provider was successfully registered, else false.\n */\n MetricsAPI.prototype.setGlobalMeterProvider = function (provider) {\n return registerGlobal(API_NAME, provider, DiagAPI.instance());\n };\n /**\n * Returns the global meter provider.\n */\n MetricsAPI.prototype.getMeterProvider = function () {\n return getGlobal(API_NAME) || NOOP_METER_PROVIDER;\n };\n /**\n * Returns a meter from the global meter provider.\n */\n MetricsAPI.prototype.getMeter = function (name, version, options) {\n return this.getMeterProvider().getMeter(name, version, options);\n };\n /** Remove the global meter provider */\n MetricsAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n return MetricsAPI;\n}());\nexport { MetricsAPI };\n//# sourceMappingURL=metrics.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { MetricsAPI } from './api/metrics';\n/** Entrypoint for metrics API */\nexport var metrics = MetricsAPI.getInstance();\n//# sourceMappingURL=metrics-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * No-op implementations of {@link TextMapPropagator}.\n */\nvar NoopTextMapPropagator = /** @class */ (function () {\n function NoopTextMapPropagator() {\n }\n /** Noop inject function does nothing */\n NoopTextMapPropagator.prototype.inject = function (_context, _carrier) { };\n /** Noop extract function does nothing and returns the input context */\n NoopTextMapPropagator.prototype.extract = function (context, _carrier) {\n return context;\n };\n NoopTextMapPropagator.prototype.fields = function () {\n return [];\n };\n return NoopTextMapPropagator;\n}());\nexport { NoopTextMapPropagator };\n//# sourceMappingURL=NoopTextMapPropagator.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ContextAPI } from '../api/context';\nimport { createContextKey } from '../context/context';\n/**\n * Baggage key\n */\nvar BAGGAGE_KEY = createContextKey('OpenTelemetry Baggage Key');\n/**\n * Retrieve the current baggage from the given context\n *\n * @param {Context} Context that manage all context values\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getBaggage(context) {\n return context.getValue(BAGGAGE_KEY) || undefined;\n}\n/**\n * Retrieve the current baggage from the active/current context\n *\n * @returns {Baggage} Extracted baggage from the context\n */\nexport function getActiveBaggage() {\n return getBaggage(ContextAPI.getInstance().active());\n}\n/**\n * Store a baggage in the given context\n *\n * @param {Context} Context that manage all context values\n * @param {Baggage} baggage that will be set in the actual context\n */\nexport function setBaggage(context, baggage) {\n return context.setValue(BAGGAGE_KEY, baggage);\n}\n/**\n * Delete the baggage stored in the given context\n *\n * @param {Context} Context that manage all context values\n */\nexport function deleteBaggage(context) {\n return context.deleteValue(BAGGAGE_KEY);\n}\n//# sourceMappingURL=context-helpers.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { NoopTextMapPropagator } from '../propagation/NoopTextMapPropagator';\nimport { defaultTextMapGetter, defaultTextMapSetter, } from '../propagation/TextMapPropagator';\nimport { getBaggage, getActiveBaggage, setBaggage, deleteBaggage, } from '../baggage/context-helpers';\nimport { createBaggage } from '../baggage/utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'propagation';\nvar NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator();\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Propagation API\n */\nvar PropagationAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function PropagationAPI() {\n this.createBaggage = createBaggage;\n this.getBaggage = getBaggage;\n this.getActiveBaggage = getActiveBaggage;\n this.setBaggage = setBaggage;\n this.deleteBaggage = deleteBaggage;\n }\n /** Get the singleton instance of the Propagator API */\n PropagationAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new PropagationAPI();\n }\n return this._instance;\n };\n /**\n * Set the current propagator.\n *\n * @returns true if the propagator was successfully registered, else false\n */\n PropagationAPI.prototype.setGlobalPropagator = function (propagator) {\n return registerGlobal(API_NAME, propagator, DiagAPI.instance());\n };\n /**\n * Inject context into a carrier to be propagated inter-process\n *\n * @param context Context carrying tracing data to inject\n * @param carrier carrier to inject context into\n * @param setter Function used to set values on the carrier\n */\n PropagationAPI.prototype.inject = function (context, carrier, setter) {\n if (setter === void 0) { setter = defaultTextMapSetter; }\n return this._getGlobalPropagator().inject(context, carrier, setter);\n };\n /**\n * Extract context from a carrier\n *\n * @param context Context which the newly created context will inherit from\n * @param carrier Carrier to extract context from\n * @param getter Function used to extract keys from a carrier\n */\n PropagationAPI.prototype.extract = function (context, carrier, getter) {\n if (getter === void 0) { getter = defaultTextMapGetter; }\n return this._getGlobalPropagator().extract(context, carrier, getter);\n };\n /**\n * Return a list of all fields which may be used by the propagator.\n */\n PropagationAPI.prototype.fields = function () {\n return this._getGlobalPropagator().fields();\n };\n /** Remove the global propagator */\n PropagationAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n };\n PropagationAPI.prototype._getGlobalPropagator = function () {\n return getGlobal(API_NAME) || NOOP_TEXT_MAP_PROPAGATOR;\n };\n return PropagationAPI;\n}());\nexport { PropagationAPI };\n//# sourceMappingURL=propagation.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { PropagationAPI } from './api/propagation';\n/** Entrypoint for propagation API */\nexport var propagation = PropagationAPI.getInstance();\n//# sourceMappingURL=propagation-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { getGlobal, registerGlobal, unregisterGlobal, } from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport { isSpanContextValid, wrapSpanContext, } from '../trace/spancontext-utils';\nimport { deleteSpan, getActiveSpan, getSpan, getSpanContext, setSpan, setSpanContext, } from '../trace/context-utils';\nimport { DiagAPI } from './diag';\nvar API_NAME = 'trace';\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nvar TraceAPI = /** @class */ (function () {\n /** Empty private constructor prevents end users from constructing a new instance of the API */\n function TraceAPI() {\n this._proxyTracerProvider = new ProxyTracerProvider();\n this.wrapSpanContext = wrapSpanContext;\n this.isSpanContextValid = isSpanContextValid;\n this.deleteSpan = deleteSpan;\n this.getSpan = getSpan;\n this.getActiveSpan = getActiveSpan;\n this.getSpanContext = getSpanContext;\n this.setSpan = setSpan;\n this.setSpanContext = setSpanContext;\n }\n /** Get the singleton instance of the Trace API */\n TraceAPI.getInstance = function () {\n if (!this._instance) {\n this._instance = new TraceAPI();\n }\n return this._instance;\n };\n /**\n * Set the current global tracer.\n *\n * @returns true if the tracer provider was successfully registered, else false\n */\n TraceAPI.prototype.setGlobalTracerProvider = function (provider) {\n var success = registerGlobal(API_NAME, this._proxyTracerProvider, DiagAPI.instance());\n if (success) {\n this._proxyTracerProvider.setDelegate(provider);\n }\n return success;\n };\n /**\n * Returns the global tracer provider.\n */\n TraceAPI.prototype.getTracerProvider = function () {\n return getGlobal(API_NAME) || this._proxyTracerProvider;\n };\n /**\n * Returns a tracer from the global tracer provider.\n */\n TraceAPI.prototype.getTracer = function (name, version) {\n return this.getTracerProvider().getTracer(name, version);\n };\n /** Remove the global tracer provider */\n TraceAPI.prototype.disable = function () {\n unregisterGlobal(API_NAME, DiagAPI.instance());\n this._proxyTracerProvider = new ProxyTracerProvider();\n };\n return TraceAPI;\n}());\nexport { TraceAPI };\n//# sourceMappingURL=trace.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport var trace = TraceAPI.getInstance();\n//# sourceMappingURL=trace-api.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport { baggageEntryMetadataFromString } from './baggage/utils';\n// Context APIs\nexport { createContextKey, ROOT_CONTEXT } from './context/context';\n// Diag APIs\nexport { DiagConsoleLogger } from './diag/consoleLogger';\nexport { DiagLogLevel, } from './diag/types';\n// Metrics APIs\nexport { createNoopMeter } from './metrics/NoopMeter';\nexport { ValueType, } from './metrics/Metric';\n// Propagation APIs\nexport { defaultTextMapGetter, defaultTextMapSetter, } from './propagation/TextMapPropagator';\nexport { ProxyTracer } from './trace/ProxyTracer';\nexport { ProxyTracerProvider } from './trace/ProxyTracerProvider';\nexport { SamplingDecision } from './trace/SamplingResult';\nexport { SpanKind } from './trace/span_kind';\nexport { SpanStatusCode } from './trace/status';\nexport { TraceFlags } from './trace/trace_flags';\nexport { createTraceState } from './trace/internal/utils';\nexport { isSpanContextValid, isValidTraceId, isValidSpanId, } from './trace/spancontext-utils';\nexport { INVALID_SPANID, INVALID_TRACEID, INVALID_SPAN_CONTEXT, } from './trace/invalid-span-constants';\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { context } from './context-api';\nimport { diag } from './diag-api';\nimport { metrics } from './metrics-api';\nimport { propagation } from './propagation-api';\nimport { trace } from './trace-api';\n// Named export.\nexport { context, diag, metrics, propagation, trace };\n// Default export.\nexport default {\n context: context,\n diag: diag,\n metrics: metrics,\n propagation: propagation,\n trace: trace,\n};\n//# sourceMappingURL=index.js.map",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe=true) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe=true) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working varialbes\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA1 = C_algo.SHA1;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA1\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA1,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));","module.exports = require('./dist/lightstep-tracer.min.js');\n","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.lightstep=e():t.lightstep=e()}(self,(()=>(()=>{var t={31:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=function(t,e){if(t)for(var r in t)hasOwnProperty.call(t,r)&&e(t[r],r)},t.exports=e.default},843:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.LS_META_TRACE_KEY=e.LS_META_TRACER_GUID_KEY=e.LS_META_TRACER_CREATE=e.LS_META_SP_START=e.LS_META_SP_FINISH=e.LS_META_SPAN_KEY=e.LS_META_PROPAGATION_KEY=e.LS_META_INJECT=e.LS_META_EXTRACT=e.LS_META_EVENT_KEY=e.LOG_WARN=e.LOG_STRING_TO_LEVEL=e.LOG_LEVEL_TO_STRING=e.LOG_INFO=e.LOG_FATAL=e.LOG_ERROR=e.LIGHTSTEP_APP_URL_PREFIX=e.JOIN_ID_PREFIX=e.FORMAT_B3=e.CLOCK_STATE_REFRESH_INTERVAL_MS=void 0,e.LOG_INFO=0,e.LOG_WARN=1,e.LOG_ERROR=2,e.LOG_FATAL=3,e.LOG_LEVEL_TO_STRING={LOG_INFO:\"I\",LOG_WARN:\"W\",LOG_ERROR:\"E\",LOG_FATAL:\"F\"};e.LOG_STRING_TO_LEVEL={I:0,W:1,E:2,F:3},e.CLOCK_STATE_REFRESH_INTERVAL_MS=350,e.LIGHTSTEP_APP_URL_PREFIX=\"https://app.lightstep.com\",e.JOIN_ID_PREFIX=\"join:\",e.LS_META_EVENT_KEY=\"lightstep.meta_event\",e.LS_META_PROPAGATION_KEY=\"lightstep.propagation_format\",e.LS_META_TRACE_KEY=\"lightstep.trace_id\",e.LS_META_SPAN_KEY=\"lightstep.span_id\",e.LS_META_TRACER_GUID_KEY=\"lightstep.tracer_guid\",e.LS_META_EXTRACT=\"lightstep.extract_span\",e.LS_META_INJECT=\"lightstep.inject_span\",e.LS_META_SP_START=\"lightstep.span_start\",e.LS_META_SP_FINISH=\"lightstep.span_finish\",e.LS_META_TRACER_CREATE=\"lightstep.tracer_create\",e.FORMAT_B3=\"format.b3\"},261:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=r(295);function o(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.toBoolean=function(t){return!!t},e.toNumber=function(t){return Number(t)},e.toString=function(t){return\"\"+t}},34:(t,e,r)=>{\"use strict\";var n,o=(n=r(31))&&n.__esModule?n:{default:n};function i(t,e){for(var r=0;r{\"use strict\";var n=r(295);function o(t,e){for(var r=0;r=i.LOG_ERROR&&this.error(!0),this}},{key:\"span\",value:function(t){return void 0!==t&&(this._record.span_guid=a.toString(t)),this}},{key:\"name\",value:function(t){return this._record.stable_name=a.toString(t),this}},{key:\"error\",value:function(t){return this._record.error_flag=a.toBoolean(t),this}},{key:\"payload\",value:function(t){return void 0!==t&&(this._record.payload_json=this._encodePayload(t)),this}},{key:\"_encodePayload\",value:function(t){var e=null;try{e=JSON.stringify(t)}catch(t){return}return e}}])&&o(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();t.exports=s},489:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,o=r(295),i=(n=r(31))&&n.__esModule?n:{default:n},a=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=s(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(\"default\"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var a=o?Object.getOwnPropertyDescriptor(t,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=t[i]}return n.default=t,r&&r.set(t,n),n}(r(69));function s(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(s=function(t){return t?r:e})(t)}function c(t,e){for(var r=0;rthis._logFieldKeyHardLimit&&(this._keysOverLimit+=1,e=\"\".concat(e.substr(0,this._logFieldKeyHardLimit),\"...\")),e}},{key:\"getFieldValue\",value:function(t){var e=null;if(t instanceof Error)try{e=JSON.stringify(t,Object.getOwnPropertyNames(t))}catch(t){e=\"Could not encode value. Exception: \".concat(t)}else if(t instanceof Object)try{e=JSON.stringify(t,null,\" \")}catch(t){e=\"Could not encode value. Exception: \".concat(t)}else e=a.toString(t);return e.length>this._logFieldValueHardLimit&&(this._valuesOverLimit+=1,e=\"\".concat(e.substr(0,this._logFieldValueHardLimit),\"...\")),e}}])&&c(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();e.default=u,t.exports=e.default},638:(t,e,r)=>{\"use strict\";t.exports=r(933).crouton_thrift},933:t=>{\"use strict\";var e,r;e={},void 0===(r={})&&(r={}),r.KeyValue=function(t){if(this.Key=null,this.Value=null,t){if(void 0===t.Key)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field Key is unset!\");if(this.Key=t.Key,void 0===t.Value)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field Value is unset!\");this.Value=t.Value}},r.KeyValue.prototype={},r.KeyValue.prototype.read=!1,r.KeyValue.prototype.write=!1,r.NamedCounter=function(t){if(this.Name=null,this.Value=null,t){if(void 0===t.Name)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field Name is unset!\");if(this.Name=t.Name,void 0===t.Value)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field Value is unset!\");this.Value=t.Value}},r.NamedCounter.prototype={},r.NamedCounter.prototype.read=!1,r.NamedCounter.prototype.write=!1,r.Runtime=function(t){this.guid=null,this.start_micros=null,this.group_name=null,this.attrs=null,t&&(void 0!==t.guid&&(this.guid=t.guid),void 0!==t.start_micros&&(this.start_micros=t.start_micros),void 0!==t.group_name&&(this.group_name=t.group_name),void 0!==t.attrs&&(this.attrs=t.attrs))},r.Runtime.prototype={},r.Runtime.prototype.read=!1,r.Runtime.prototype.write=!1,r.LogRecord=function(t){this.timestamp_micros=null,this.fields=null,this.runtime_guid=null,this.span_guid=null,this.stable_name=null,this.message=null,this.level=null,this.thread_id=null,this.filename=null,this.line_number=null,this.stack_frames=null,this.payload_json=null,this.error_flag=null,t&&(void 0!==t.timestamp_micros&&(this.timestamp_micros=t.timestamp_micros),void 0!==t.fields&&(this.fields=t.fields),void 0!==t.runtime_guid&&(this.runtime_guid=t.runtime_guid),void 0!==t.span_guid&&(this.span_guid=t.span_guid),void 0!==t.stable_name&&(this.stable_name=t.stable_name),void 0!==t.message&&(this.message=t.message),void 0!==t.level&&(this.level=t.level),void 0!==t.thread_id&&(this.thread_id=t.thread_id),void 0!==t.filename&&(this.filename=t.filename),void 0!==t.line_number&&(this.line_number=t.line_number),void 0!==t.stack_frames&&(this.stack_frames=t.stack_frames),void 0!==t.payload_json&&(this.payload_json=t.payload_json),void 0!==t.error_flag&&(this.error_flag=t.error_flag))},r.LogRecord.prototype={},r.LogRecord.prototype.read=!1,r.LogRecord.prototype.write=!1,r.TraceJoinId=function(t){if(this.TraceKey=null,this.Value=null,t){if(void 0===t.TraceKey)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field TraceKey is unset!\");if(this.TraceKey=t.TraceKey,void 0===t.Value)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field Value is unset!\");this.Value=t.Value}},r.TraceJoinId.prototype={},r.TraceJoinId.prototype.read=!1,r.TraceJoinId.prototype.write=!1,r.SpanRecord=function(t){this.span_guid=null,this.trace_guid=null,this.runtime_guid=null,this.span_name=null,this.join_ids=null,this.oldest_micros=null,this.youngest_micros=null,this.attributes=null,this.error_flag=null,this.log_records=null,t&&(void 0!==t.span_guid&&(this.span_guid=t.span_guid),void 0!==t.trace_guid&&(this.trace_guid=t.trace_guid),void 0!==t.runtime_guid&&(this.runtime_guid=t.runtime_guid),void 0!==t.span_name&&(this.span_name=t.span_name),void 0!==t.join_ids&&(this.join_ids=t.join_ids),void 0!==t.oldest_micros&&(this.oldest_micros=t.oldest_micros),void 0!==t.youngest_micros&&(this.youngest_micros=t.youngest_micros),void 0!==t.attributes&&(this.attributes=t.attributes),void 0!==t.error_flag&&(this.error_flag=t.error_flag),void 0!==t.log_records&&(this.log_records=t.log_records))},r.SpanRecord.prototype={},r.SpanRecord.prototype.read=!1,r.SpanRecord.prototype.write=!1,r.Auth=function(t){this.access_token=null,t&&void 0!==t.access_token&&(this.access_token=t.access_token)},r.Auth.prototype={},r.Auth.prototype.read=!1,r.Auth.prototype.write=!1,r.Timing=function(t){this.receive_micros=null,this.transmit_micros=null,t&&(void 0!==t.receive_micros&&(this.receive_micros=t.receive_micros),void 0!==t.transmit_micros&&(this.transmit_micros=t.transmit_micros))},r.Timing.prototype={},r.Timing.prototype.read=!1,r.Timing.prototype.write=!1,r.SampleCount=function(t){this.oldest_micros=null,this.youngest_micros=null,this.count=null,t&&(void 0!==t.oldest_micros&&(this.oldest_micros=t.oldest_micros),void 0!==t.youngest_micros&&(this.youngest_micros=t.youngest_micros),void 0!==t.count&&(this.count=t.count))},r.SampleCount.prototype={},r.SampleCount.prototype.read=!1,r.SampleCount.prototype.write=!1,r.MetricsSample=function(t){if(this.name=null,this.int64_value=null,this.double_value=null,t){if(void 0===t.name)throw new e.TProtocolException(e.TProtocolExceptionType.UNKNOWN,\"Required field name is unset!\");this.name=t.name,void 0!==t.int64_value&&(this.int64_value=t.int64_value),void 0!==t.double_value&&(this.double_value=t.double_value)}},r.MetricsSample.prototype={},r.MetricsSample.prototype.read=!1,r.MetricsSample.prototype.write=!1,r.Metrics=function(t){this.counts=null,this.gauges=null,t&&(void 0!==t.counts&&(this.counts=t.counts),void 0!==t.gauges&&(this.gauges=t.gauges))},r.Metrics.prototype={},r.Metrics.prototype.read=!1,r.Metrics.prototype.write=!1,r.ReportRequest=function(t){this.runtime=null,this.span_records=null,this.log_records=null,this.timestamp_offset_micros=null,this.oldest_micros=null,this.youngest_micros=null,this.counters=null,this.internal_logs=null,this.internal_metrics=null,t&&(void 0!==t.runtime&&(this.runtime=t.runtime),void 0!==t.span_records&&(this.span_records=t.span_records),void 0!==t.log_records&&(this.log_records=t.log_records),void 0!==t.timestamp_offset_micros&&(this.timestamp_offset_micros=t.timestamp_offset_micros),void 0!==t.oldest_micros&&(this.oldest_micros=t.oldest_micros),void 0!==t.youngest_micros&&(this.youngest_micros=t.youngest_micros),void 0!==t.counters&&(this.counters=t.counters),void 0!==t.internal_logs&&(this.internal_logs=t.internal_logs),void 0!==t.internal_metrics&&(this.internal_metrics=t.internal_metrics))},r.ReportRequest.prototype={},r.ReportRequest.prototype.read=!1,r.ReportRequest.prototype.write=!1,r.Command=function(t){this.disable=null,t&&void 0!==t.disable&&(this.disable=t.disable)},r.Command.prototype={},r.Command.prototype.read=!1,r.Command.prototype.write=!1,r.ReportResponse=function(t){this.commands=null,this.timing=null,t&&(void 0!==t.commands&&(this.commands=t.commands),void 0!==t.timing&&(this.timing=t.timing))},r.ReportResponse.prototype={},r.ReportResponse.prototype.read=!1,r.ReportResponse.prototype.write=!1,t.exports.crouton_thrift=r,t.exports.Thrift={}},250:(t,e,r)=>{\"use strict\";var n=r(714),o=function(){if(\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope)return null;if(!n.isBrowser())return null;var t=document.getElementsByTagName(\"SCRIPT\");return t.length>0?t[t.length-1]:null}();t.exports={parseScriptElementOptions:n.isBrowser()?function(t,e){if(o){var r=o.dataset,n=r.access_token;\"string\"==typeof n&&n.length>0&&(t.access_token=n);var i=r.component_name;\"string\"==typeof i&&i.length>0&&(t.component_name=i);var a=r.collector_host;\"string\"==typeof a&&a.length>0&&(t.collector_host=a);var s=r.collector_port;s&&(t.collector_port=parseInt(s,10));var c=r.collector_path;\"string\"==typeof c&&c.length>0&&(t.collector_path=c);var u=r.collector_encryption;u&&(t.collector_encryption=u);var l=r.enable;\"string\"==typeof l&&(\"true\"===l?t.enable=!0:\"false\"===l&&(t.enable=!1));var p=r.verbosity;\"string\"==typeof p&&(t.verbosity=parseInt(p,10));var f=r.init_global_tracer;\"string\"==typeof f&&(\"true\"===f?e.init_global_tracer=!0:\"false\"===f&&(e.init_global_tracer=!1)),\"string\"==typeof r.xhr_instrumentation&&\"true\"===r.xhr_instrumentation&&(t.xhr_instrumentation=!0),\"string\"==typeof r.instrument_page_load&&\"true\"===r.instrument_page_load&&(t.instrument_page_load=!0)}}:function(t,e){},parseURLQueryOptions:n.isBrowser()?function(t){var e=function(t){var e={},r=window.location.href.indexOf(\"?\");if(r<0)return e;var n=window.location.href.slice(r+1);n.indexOf(\"#\")>=0&&(n=n.slice(0,n.indexOf(\"#\")));for(var o=n.replace(/\\+/,\"%20\").split(\"&\"),i=0;i{\"use strict\";function n(t,e){for(var r=0;r{\"use strict\";t.exports=r(933).Thrift},374:(t,e)=>{\"use strict\";function r(t,e){for(var r=0;r{\"use strict\";function e(){return\"undefined\"!=typeof document}t.exports={cookie:e()?function(t,e,r,n,o,i){if(arguments.length>1){var a=t+\"=\"+encodeURIComponent(e)+(r?\"; expires=\"+new Date(+new Date+1e3*r).toUTCString():\"\")+(n?\"; path=\"+n:\"\")+(o?\"; domain=\"+o:\"\")+(i?\"; secure\":\"\");return document.cookie=a,a}return decodeURIComponent(((\"; \"+document.cookie).split(\"; \"+t+\"=\")[1]||\"\").split(\";\")[0])}:function(){return null},isBrowser:e}},938:(t,e)=>{\"use strict\";function r(t,e){for(var r=0;r{\"use strict\";var n;function o(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=a(r(31)),o=a(r(970)),i=a(r(683));function a(t){return t&&t.__esModule?t:{default:t}}function s(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=i(r(31)),o=i(r(970));function i(t){return t&&t.__esModule?t:{default:t}}function a(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,o=r(295),i=(n=r(31))&&n.__esModule?n:{default:n},a=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=s(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(\"default\"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var a=o?Object.getOwnPropertyDescriptor(t,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=t[i]}return n.default=t,r&&r.set(t,n),n}(r(69));function s(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(s=function(t){return t?r:e})(t)}function c(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,o=r(295),i=(n=r(31))&&n.__esModule?n:{default:n},a=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=s(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(\"default\"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var a=o?Object.getOwnPropertyDescriptor(t,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=t[i]}return n.default=t,r&&r.set(t,n),n}(r(69));function s(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(s=function(t){return t?r:e})(t)}function c(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n,o=(n=r(31))&&n.__esModule?n:{default:n};function i(t,e){for(var r=0;r{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=f(r(725)),o=f(r(69)),i=f(r(843)),a=l(r(31)),s=r(295),c=l(r(489)),u=l(r(278));function l(t){return t&&t.__esModule?t:{default:t}}function p(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(p=function(t){return t?r:e})(t)}function f(t,e){if(!e&&t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=p(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(\"default\"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var a=o?Object.getOwnPropertyDescriptor(t,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=t[i]}return n.default=t,r&&r.set(t,n),n}function _(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function d(t,e){for(var r=0;r0&&this._endMicros>0?Math.floor((this._beginMicros+this._endMicros)/2):this._tracerImp._platform.nowMicros();var e=i.LIGHTSTEP_APP_URL_PREFIX,r=encodeURIComponent(this._tracerImp.options().access_token),n=encodeURIComponent(this.guid());return\"\".concat(e,\"/\").concat(r,\"/trace?span_guid=\").concat(n,\"&at_micros=\").concat(t)}},{key:\"getTags\",value:function(){return this._tags}},{key:\"end\",value:function(t){var e;this._ended||(this._ended=!0,void 0!==t&&this.setEndMicros(Math.floor(1e3*t)),0===this._endMicros&&this.setEndMicros(this._tracerImp._platform.nowMicros()),u.default.shouldSendMetaSpan(this._tracer().options(),this.getTags())&&this._tracerImp.startSpan(i.LS_META_SP_FINISH,{tags:(e={},_(e,i.LS_META_EVENT_KEY,!0),_(e,i.LS_META_TRACE_KEY,this.traceGUID()),_(e,i.LS_META_SPAN_KEY,this.guid()),e)}).finish(),this._tracerImp._addSpanRecord(this))}},{key:\"_toThrift\",value:function(){var t=this,e=[];(0,a.default)(this._tags,(function(t,r){e.push(new s.crouton_thrift.KeyValue({Key:o.toString(r),Value:o.toString(t)}))}));var r=[];return(0,a.default)(this._log_records,(function(e){var n=e.toThrift();t._tracerImp._counters[\"logs.keys.over_limit\"]+=e.getNumKeysOverLimit(),t._tracerImp._counters[\"logs.values.over_limit\"]+=e.getNumValuesOverLimit(),r.push(n)})),new s.crouton_thrift.SpanRecord({span_guid:this.guid(),trace_guid:this.traceGUID(),runtime_guid:this._tracerImp.guid(),span_name:this._operationName,oldest_micros:this._beginMicros,youngest_micros:this._endMicros,attributes:e,error_flag:this._errorFlag,log_records:r})}}])&&d(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),f}(n.Span);e.default=v,t.exports=e.default},90:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default=void 0;var n=h(r(729)),o=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=d(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(\"default\"!==i&&Object.prototype.hasOwnProperty.call(t,i)){var a=o?Object.getOwnPropertyDescriptor(t,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=t[i]}return n.default=t,r&&r.set(t,n),n}(r(725)),i=h(r(970)),a=h(r(405)),s=h(r(31)),c=r(295),u=h(r(261)),l=h(r(102)),p=h(r(676)),f=h(r(938)),_=h(r(683));function d(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(d=function(t){return t?r:e})(t)}function h(t){return t&&t.__esModule?t:{default:t}}function g(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function y(t){for(var e=1;e=3){var o=\"\",i=0;(0,s.default)(r,(function(t,e){o+=\"\\t\".concat(JSON.stringify(e),\": \").concat(JSON.stringify(t.newValue),\"\\n\"),i++})),i>0&&this._debug(\"Options modified:\\n\".concat(o))}this.emit(\"options\",r,this._options,this)}},{key:\"_setOptionInternal\",value:function(t,e,r,n){var o=n.name,i=r[o],a=typeof i;if(void 0!==i){switch(n.type){case\"any\":break;case\"bool\":if(!0!==i&&!1!==i)return void this._error(\"Invalid boolean option '\".concat(o,\"' '\").concat(i,\"'\"));break;case\"function\":if(\"function\"!=typeof i)return void this._error(\"Invalid function option '\".concat(o,\"' '\").concat(i,\"'\"));break;case\"int\":if(\"number\"!==a||Math.floor(i)!==i)return void this._error(\"Invalid int option '\".concat(o,\"' '\").concat(i,\"'\"));if(void 0!==n.min&&void 0!==n.max&&!(i>=n.min&&i<=n.max))return void this._error(\"Option '\".concat(o,\"' out of range '\").concat(i,\"' is not between \").concat(n.min,\" and \").concat(n.max));break;case\"string\":switch(a){case\"string\":break;case\"number\":i=k.toString(i);break;default:return void this._error(\"Invalid string option \".concat(o,\" \").concat(i))}break;case\"array\":if(\"[object Array]\"!==Object.prototype.toString.call(i))return void this._error(\"Invalid type for array option \".concat(o,\": found '\").concat(a,\"'\"));break;default:return void this._error(\"Unknown option type '\".concat(n.type,\"'\"))}var s=this._options[o];if(void 0===s)throw new Error(\"Attempt to set unknown option \".concat(o));\"object\"===a||s!==i?(t[o]={oldValue:s,newValue:i},this._options[o]=i):e[o]=!0}}},{key:\"_initReportingDataIfNeeded\",value:function(t){var e=this;if(null===this._auth){this._runtimeGUID=this._platform.runtimeGUID(this._options.component_name),this._auth=new u.default(this._options.access_token);var r={};(0,s.default)(this._options.tags,(function(t,n){\"string\"==typeof t?r[n]=t:e._error(\"Tracer tag value is not a string: key=\".concat(n))})),r[\"lightstep.tracer_version\"]=P.version;var n=this._platform.tracerTags();(0,s.default)(n,(function(t,e){r[e]=t})),this._runtime=new l.default(this._runtimeGUID,this._startMicros,this._options.component_name,r),this._info(\"Initializing reporting data\",{component_name:this._options.component_name,access_token:this._auth.getAccessToken()}),this.emit(\"reporting_initialized\")}else{if(!this._runtime)return this._error(\"Inconsistent state: auth initialized without runtime.\");if(t.access_token)throw new Error(\"Cannot change access_token after it has been set.\");if(t.component_name)throw new Error(\"Cannot change component_name after it has been set.\");if(t.collector_host)throw new Error(\"Cannot change collector_host after the connection is established\");if(t.collector_port)throw new Error(\"Cannot change collector_port after the connection is established\");if(t.collector_path)throw new Error(\"Cannot change collector_path after the connection is established\");if(t.collector_encryption)throw new Error(\"Cannot change collector_encryption after the connection is established\")}}},{key:\"getLogFieldKeyHardLimit\",value:function(){return this._options.log_field_key_hard_limit}},{key:\"getLogFieldValueHardLimit\",value:function(){return this._options.log_field_value_hard_limit}},{key:\"addPlatformPlugins\",value:function(t){var e=this,r=this._platform.plugins(t);(0,s.default)(r,(function(t){e.addPlugin(t)}))}},{key:\"addPlugin\",value:function(t){var e=t.name();this._plugins[e]||(this._plugins[e]=t,t.addOptions(this))}},{key:\"startPlugins\",value:function(){var t=this;(0,s.default)(this._plugins,(function(e,r){t._plugins[r].start(t)}))}},{key:\"addActiveRootSpan\",value:function(t){this._activeRootSpanSet[t._guid]=t,this._setActiveRootSpanToYoungest()}},{key:\"removeActiveRootSpan\",value:function(t){delete this._activeRootSpanSet[t._guid],this._setActiveRootSpanToYoungest()}},{key:\"_setActiveRootSpanToYoungest\",value:function(){var t=this;this._activeRootSpan=null,(0,s.default)(this._activeRootSpanSet,(function(e){(!t._activeRootSpan||e._beginMicros>t._activeRootSpan._beginMicros)&&(t._activeRootSpan=e)}))}},{key:\"_objectToUint8Array\",value:function(t){var e;try{e=encodeURIComponent(JSON.stringify(t))}catch(t){return this._error(\"Could not binary encode carrier data.\"),null}for(var r=new ArrayBuffer(e.length),n=new Uint8Array(r),o=0;o=0&&i<=255))return this._error(\"Unexpected character code\"),null;n[o]=i}return n}},{key:\"_uint8ArrayToObject\",value:function(t){if(!t)return this._error(\"Array is null\"),null;for(var e=\"\",r=0;r0)return!1;if(this._internalLogs.length>0)return!1;var t=!0;return(0,s.default)(this._counters,(function(e){e>0&&(t=!1)})),t}},{key:\"_addSpanRecord\",value:function(t){this._internalAddSpanRecord(t),this.emit(\"span_added\",t)}},{key:\"_internalAddSpanRecord\",value:function(t){if(t)if(this._spanRecords.length>=this._options.max_span_records){var e=Math.floor(this._spanRecords.length*Math.random());this._spanRecords[e]=t,this._counters[\"spans.dropped\"]++}else this._spanRecords.push(t);else this._error(\"Attempt to add null record to buffer\")}},{key:\"_restoreRecords\",value:function(t,e,r){var n=this;(0,s.default)(t,(function(t){n._internalAddSpanRecord(t)}));var o=this._internalLogs;this._internalLogs=[];var i=e.concat(o);(0,s.default)(i,(function(t){n._pushInternalLog(t)})),(0,s.default)(r,(function(t,e){e in n._counters?n._counters[e]+=t:n._error(\"Bad counter name: \".concat(e))}))}},{key:\"_clearSpanRecordsIfMaxErrors\",value:function(){var t=this.options().clear_span_buffer_consecutive_errors;if(!(null===t||this._reportErrorStreak0||(t._info(\"Final flush before exit.\"),t._flushReport(!1,!0,(function(e){e&&t._warn(\"Final report before exit failed\",{error:e,unflushed_spans:t._spanRecords.length,buffer_youngest_micros:t._reportYoungestMicros})})))}))}}},{key:\"_startReportingLoop\",value:function(){var t=this;if(this._options.disabled)this._info(\"Not starting reporting loop: instrumentation is disabled.\");else if(this._options.disable_reporting_loop)this._info(\"Not starting reporting loop: reporting loop is disabled.\");else if(null!==this._auth)if(this._reportingLoopActive)this._info(\"Reporting loop already started!\");else{this._info(\"Starting reporting loop:\",this._runtime),this._reportingLoopActive=!0;var e=0;this._platform.onBeforeExit((function(){e++>0||t._stopReportingLoop()}));var r=function(){t._enqueueNextReport((function(e){t._reportingLoopActive&&r()}))},n=Math.floor(Math.random()*this._options.delay_initial_report_millis);x.detachedTimeout((function(){r()}),n)}}},{key:\"_stopReportingLoop\",value:function(){this._debug(\"Stopping reporting loop\"),this._reportingLoopActive=!1,clearTimeout(this._reportTimer),this._reportTimer=null}},{key:\"_enqueueNextReport\",value:function(t){var e=this;if(!this._reportTimer){var r=this._options.max_reporting_interval_millis;0===this._reportErrorStreak&&this._useClockState&&!this._clockState.isReady()&&(r=Math.min(R.CLOCK_STATE_REFRESH_INTERVAL_MS,r));var n=(1+Math.min(7,Math.max(0,this._reportErrorStreak)))*r,o=.5*Math.random()-.25+1,i=Math.floor(Math.max(0,o*n));this._debug(\"Delaying next flush for \".concat(i,\"ms\")),this._reportTimer=x.detachedTimeout((function(){e._reportTimer=null,e._flushReport(!1,!1,t)}),i)}}},{key:\"_flushReport\",value:function(t,e,r){var n=this;r=r||function(t){};var o=this._clockState.isReady(),i=this._clockState.offsetMicros();this._debug(\"time correction state\",{offset_micros:i,active_samples:this._clockState.activeSampleCount(),ready:o});var a=this._spanRecords,s=this._counters,c=this._internalLogs;if(!this._useClockState||t||o||e){if(this._buffersAreEmpty())return this._debug(\"Skipping empty report\"),r(null);this._clearBuffers(),this._debug(\"Flushing report (\".concat(a.length,\" spans)\"))}else this._debug(\"Flushing empty report to prime clock state\"),a=[],s={},c=[];this._transport.ensureConnection(this._options),console.assert(null!==this._runtimeGUID,\"No runtime GUID for Tracer\");var u=this._useClockState?i:0,l=this._platform.nowMicros(),f=new p.default(this._runtime,this._reportYoungestMicros,l,a,c,s,u);this.emit(\"prereport\",f);var _,d=this._platform.nowMicros();this._options.meta_event_reporting&&!this._first_report_has_run&&(this._first_report_has_run=!0,this.startSpan(R.LS_META_TRACER_CREATE,{tags:(_={},v(_,R.LS_META_EVENT_KEY,!0),v(_,R.LS_META_TRACER_GUID_KEY,this._runtimeGUID),_)}).finish()),this._transport.report(e,this._auth,f,(function(t,o){var i,a=n._platform.nowMicros(),s=(l-f.oldest_micros)/1e6;return t?(n._reportErrorStreak++,i=t.message?\"\".concat(t.message):\"\".concat(t),n._warn(\"Error in report: \".concat(i),{last_report_seconds_ago:s}),n._restoreRecords(f.getSpanRecords(),f.getInternalLogs(),f.getCounters()),n._counters[\"reports.errors.send\"]++,n._clearSpanRecordsIfMaxErrors(),n.emit(\"report_error\",t,{error:t,streak:n._reportErrorStreak,detached:e})):(n.verbosity()>=4&&n._debug(\"Report flushed for last \".concat(s,\" seconds\"),{spans_reported:f.getSpanRecords().length}),n._reportErrorStreak=0,n._reportYoungestMicros=l,o?(o.timing&&o.timing.receive_micros&&o.timing.transmit_micros?n._clockState.addSample(d,o.timing.receive_micros,o.timing.transmit_micros,a):o.receiveTimestamp&&o.transmitTimestamp?n._clockState.addSample(d,1e6*o.receiveTimestamp.seconds+o.receiveTimestamp.nanos/1e3,1e6*o.transmitTimestamp.seconds+o.transmitTimestamp.nanos/1e3,a):n._useClockState=!1,o.errors&&o.errors.length>0?n._warn(\"Errors in report\",o.errors):o.errorsList&&o.errorsList.length>0&&n._warn(\"Errors in report\",o.errorsList),o.commandsList&&o.commandsList.length>0&&o.commandsList[0].devMode&&!0!==n.options().disable_meta_event_reporting&&(n.options().meta_event_reporting=!0)):n._useClockState=!1,n.emit(\"report\",f,o)),r(t)}))}},{key:\"stats\",value:function(){return{counters:this._counters}}},{key:\"_debug\",value:function(t,e){this.verbosity()<4||this._options.logger(\"debug\",t,e)}},{key:\"_info\",value:function(t,e){this.verbosity()<3||this._options.logger(\"info\",t,e)}},{key:\"_warn\",value:function(t,e){this._counters[\"internal.warnings\"]++,this.verbosity()<3||this._options.logger(\"warn\",t,e)}},{key:\"_error\",value:function(t,e){this._counters[\"internal.errors\"]++;var r=this.log().level(R.LOG_ERROR).message(t).payload(e).record();this._pushInternalLog(r);var n=this.verbosity();if(0!==n){var o=Date.now();if(1===n){if(o0){var i=\"\".concat(this._skippedVisibleErrors,\" errors masked since last logged error. Increase 'verbosity' option to see all errors.\");this._options.logger(\"error\",i,e)}}this._options.logger(\"error\",t,e),this._lastVisibleErrorMillis=o,this._skippedVisibleErrors=0}}},{key:\"_printToConsole\",value:function(t,e,r){var n=\"log\",o=\"[LightStep:INFO] \".concat(e);\"debug\"===t?(n=\"log\",o=\"[LightStep:DEBUG] \".concat(e)):\"info\"===t?(n=\"log\",o=\"[LightStep:INFO] \".concat(e)):\"warn\"===t?(n=\"warn\",o=\"[LightStep:WARN] \".concat(e)):\"error\"===t&&(n=\"error\",o=\"[LightStep:ERROR] \".concat(e)),this._options.silent||(void 0!==r?console[n](o,r):console[n](o))}},{key:\"_pushInternalLog\",value:function(t){t&&(this._internalLogs.length>=20?(t.message=\"MAX_INTERNAL_LOGS limit hit. Last error: \".concat(t.message),this._internalLogs[this._internalLogs.length-1]=t):this._internalLogs.push(t))}}],d&&m(e.prototype,d),Object.defineProperty(e,\"prototype\",{writable:!1}),L}(o.Tracer);e.default=A,t.exports=e.default},344:(t,e,r)=>{\"use strict\";var n,o=(n=r(31))&&n.__esModule?n:{default:n};function i(t,e){for(var r=0;rthis._nowMicros()-36e8&&(this._samples=r.samples.slice(-8)),this.update()}var e,r;return e=t,(r=[{key:\"addSample\",value:function(t,e,r,n){var o=Number.MAX_VALUE,i=0;t>0&&e>0&&r>0&&n>0&&(o=n-t-(r-e),i=(e-t+(r-n))/2),8===this._samples.length&&this._samples.shift(),this._samples.push({delayMicros:o,offsetMicros:i}),this._currentOffsetAge++,this._localStoreSet({timestamp_micros:this._nowMicros(),samples:this._samples}),this.update()}},{key:\"update\",value:function(){var t=Number.MAX_VALUE,e=0;if((0,o.default)(this._samples,(function(r){r.delayMicros7||Math.abs(this._currentOffsetMicros-e)<3*r)&&(this._currentOffsetMicros=e,this._currentOffsetAge=0)}}},{key:\"offsetMicros\",value:function(){return Math.floor(this._currentOffsetMicros)}},{key:\"isReady\",value:function(){return this._samples.length>3}},{key:\"activeSampleCount\",value:function(){return this._samples.length}}])&&i(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();t.exports=a},278:(t,e,r)=>{\"use strict\";function n(t,e){for(var r=0;r{\"use strict\";var n=u(r(90)),o=u(r(683)),i=u(r(255)),a=u(r(976)),s=u(r(970)),c=r(295);function u(t){return t&&t.__esModule?t:{default:t}}var l={Tracer:n.default,LightStepPropagator:o.default,B3Propagator:i.default,DDPropagator:a.default,SpanContext:s.default};c.Platform.initLibrary(l),t.exports=l},295:(t,e,r)=>{\"use strict\";t.exports={Platform:r(733),ThriftTransport:r(374),thrift:r(720),crouton_thrift:r(638)}},921:(t,e,r)=>{\"use strict\";var n,o=(n=r(31))&&n.__esModule?n:{default:n};function i(t,e){for(var r=0;r{\"use strict\";var n,o=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=i(e);if(r&&r.has(t))return r.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var s=o?Object.getOwnPropertyDescriptor(t,a):null;s&&(s.get||s.set)?Object.defineProperty(n,a,s):n[a]=t[a]}return n.default=t,r&&r.set(t,n),n}(r(725));function i(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(i=function(t){return t?r:e})(t)}function a(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=new Array(e);r0?e:null}()),t._shouldAddHeadersToRequest(e,a.url)){var f={};e.inject(c.context(),o.FORMAT_HTTP_HEADERS,f),Object.keys(f).forEach((function(t){a.headers.get(t)||a.headers.set(t,f[t])}))}return c.log({event:\"sending\",method:a.method,url:a.url,openPayload:p}),c.addTags(p),n(a).then((function(t){return t.ok||c.addTags({error:!0}),c.log({method:a.method,headers:u(t),status:t.status,statusText:t.statusText,responseType:t.type,url:t.url}),e.removeActiveRootSpan(c),c.finish(),t})).catch((function(t){throw c.addTags({error:!0}),e.removeActiveRootSpan(c),c.log({event:\"error\",error:t}),c.finish(),t}))}}},{key:\"_shouldTrace\",value:function(t,e){if(!t||!e)return!1;var r=t.options();return!(r.disabled||this._internalExclusions.some((function(t){return t.test(e)}))||r.fetch_url_exclusion_patterns.some((function(t){return t.test(e)}))||!r.fetch_url_inclusion_patterns.some((function(t){return t.test(e)})))}},{key:\"_shouldAddHeadersToRequest\",value:function(t,e){if(!t||!e)return!1;var r=t.options();return!r.disabled&&!r.fetch_url_header_exclusion_patterns.some((function(t){return t.test(e)}))&&!!r.fetch_url_header_inclusion_patterns.some((function(t){return t.test(e)}))}}])&&a(e.prototype,r),Object.defineProperty(e,\"prototype\",{writable:!1}),t}();t.exports=new l},792:(t,e,r)=>{\"use strict\";var n=function(t,e){if(t&&t.__esModule)return t;if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)return{default:t};var r=o(e);if(r&&r.has(t))return r.get(t);var n={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(\"default\"!==a&&Object.prototype.hasOwnProperty.call(t,a)){var s=i?Object.getOwnPropertyDescriptor(t,a):null;s&&(s.get||s.set)?Object.defineProperty(n,a,s):n[a]=t[a]}return n.default=t,r&&r.set(t,n),n}(r(725));function o(t){if(\"function\"!=typeof WeakMap)return null;var e=new WeakMap,r=new WeakMap;return(o=function(t){return t?r:e})(t)}function i(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function a(t){for(var e=1;e0?e:null}function p(t){for(var e=t.getAllResponseHeaders().replace(/\\s+$/,\"\").split(/\\n/),r=0;r{\"use strict\";function n(t,e){for(var r=0;r{\"use strict\";var e=Object.prototype.hasOwnProperty,r=\"~\";function n(){}function o(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function i(t,e,n,i,a){if(\"function\"!=typeof n)throw new TypeError(\"The listener must be a function\");var s=new o(n,i||t,a),c=r?r+e:e;return t._events[c]?t._events[c].fn?t._events[c]=[t._events[c],s]:t._events[c].push(s):(t._events[c]=s,t._eventsCount++),t}function a(t,e){0==--t._eventsCount?t._events=new n:delete t._events[e]}function s(){this._events=new n,this._eventsCount=0}Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(r=!1)),s.prototype.eventNames=function(){var t,n,o=[];if(0===this._eventsCount)return o;for(n in t=this._events)e.call(t,n)&&o.push(r?n.slice(1):n);return Object.getOwnPropertySymbols?o.concat(Object.getOwnPropertySymbols(t)):o},s.prototype.listeners=function(t){var e=r?r+t:t,n=this._events[e];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,a=new Array(i);o{function e(t,e,r){for(var n=[],o=Math.max(t.length,e.length),i=0,a=0;a>=1);)i=e(i,i,n);return o}function n(t,n,o){var i=function(t,e){for(var r=t.split(\"\"),n=[],o=r.length-1;o>=0;o--){var i=parseInt(r[o],e);if(isNaN(i))return null;n.push(i)}return n}(t,n);if(null===i)return null;for(var a=[],s=[1],c=0;c=0;c--)u+=a[c].toString(o);return\"\"===u&&(u=\"0\"),u}t.exports={hexToDec:function(t){return\"0x\"===t.substring(0,2)&&(t=t.substring(2)),n(t=t.toLowerCase(),16,10)},decToHex:function(t,e){var r=e&&!1===e.prefix,o=n(t,10,16);return o?r?o:\"0x\"+o:null}}},188:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});e.default=function(t){this.buffer=t}},202:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.FORMAT_BINARY=\"binary\",e.FORMAT_TEXT_MAP=\"text_map\",e.FORMAT_HTTP_HEADERS=\"http_headers\",e.REFERENCE_CHILD_OF=\"child_of\",e.REFERENCE_FOLLOWS_FROM=\"follows_from\"},546:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.SPAN_KIND=\"span.kind\",e.SPAN_KIND_RPC_CLIENT=\"client\",e.SPAN_KIND_RPC_SERVER=\"server\",e.SPAN_KIND_MESSAGING_PRODUCER=\"producer\",e.SPAN_KIND_MESSAGING_CONSUMER=\"consumer\",e.ERROR=\"error\",e.COMPONENT=\"component\",e.SAMPLING_PRIORITY=\"sampling.priority\",e.PEER_SERVICE=\"peer.service\",e.PEER_HOSTNAME=\"peer.hostname\",e.PEER_ADDRESS=\"peer.address\",e.PEER_HOST_IPV4=\"peer.ipv4\",e.PEER_HOST_IPV6=\"peer.ipv6\",e.PEER_PORT=\"peer.port\",e.HTTP_URL=\"http.url\",e.HTTP_METHOD=\"http.method\",e.HTTP_STATUS_CODE=\"http.status_code\",e.MESSAGE_BUS_DESTINATION=\"message_bus.destination\",e.DB_INSTANCE=\"db.instance\",e.DB_STATEMENT=\"db.statement\",e.DB_TYPE=\"db.type\",e.DB_USER=\"db.user\"},929:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(202),o=r(963),i=r(81);e.childOf=function(t){return t instanceof i.default&&(t=t.context()),new o.default(n.REFERENCE_CHILD_OF,t)},e.followsFrom=function(t){return t instanceof i.default&&(t=t.context()),new o.default(n.REFERENCE_FOLLOWS_FROM,t)}},32:function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(266),a=new i.default,s=null,c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.startSpan=function(){var t=s||a;return t.startSpan.apply(t,arguments)},e.prototype.inject=function(){var t=s||a;return t.inject.apply(t,arguments)},e.prototype.extract=function(){var t=s||a;return t.extract.apply(t,arguments)},e}(i.default),u=new c;e.initGlobalTracer=function(t){s=t},e.globalTracer=function(){return u}},725:(t,e,r)=>{\"use strict\";function n(t){for(var r in t)e.hasOwnProperty(r)||(e[r]=t[r])}Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(188);e.BinaryCarrier=o.default;var i=r(546);e.Tags=i;var a=r(980),s=r(963);e.Reference=s.default;var c=r(81);e.Span=c.default;var u=r(402);e.SpanContext=u.default;var l=r(266);e.Tracer=l.Tracer;var p=r(292);e.MockTracer=p.MockTracer,n(r(32)),n(r(202)),n(r(929)),a.initialize()},292:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(2);e.MockContext=n.default;var o=r(857);e.MockSpan=o.default;var i=r(817);e.MockTracer=i.default},2:function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var i=function(t){function e(e){var r=t.call(this)||this;return r._span=e,r}return o(e,t),e.prototype.span=function(){return this._span},e}(r(402).SpanContext);e.MockContext=i,e.default=i},901:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t){var e=this;this.spans=t,this.spansByUUID={},this.spansByTag={},this.debugSpans=[],this.unfinishedSpans=[],t.forEach((function(t){0===t._finishMs&&e.unfinishedSpans.push(t),e.spansByUUID[t.uuid()]=t,e.debugSpans.push(t.debug());var r=t.tags();Object.keys(r).forEach((function(n){var o=r[n];e.spansByTag[n]=e.spansByTag[n]||{},e.spansByTag[n][o]=e.spansByTag[n][o]||[],e.spansByTag[n][o].push(t)}))}))}return t.prototype.firstSpanWithTagValue=function(t,e){var r=this.spansByTag[t];if(!r)return null;var n=r[e];return n?n[0]:null},t}();e.MockReport=r,e.default=r},857:function(t,e,r){\"use strict\";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])},n(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)});Object.defineProperty(e,\"__esModule\",{value:!0});var i=r(725),a=r(2),s=function(t){function e(e){var r=t.call(this)||this;return r._mockTracer=e,r._uuid=r._generateUUID(),r._startMs=Date.now(),r._finishMs=0,r._operationName=\"\",r._tags={},r._logs=[],r}return o(e,t),e.prototype._context=function(){return new a.default(this)},e.prototype._setOperationName=function(t){this._operationName=t},e.prototype._addTags=function(t){for(var e=0,r=Object.keys(t);e{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(81),o=r(402),i=r(266);e.tracer=null,e.spanContext=null,e.span=null,e.initialize=function(){e.tracer=new i.default,e.span=new n.default,e.spanContext=new o.default}},963:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(81),o=function(){function t(t,e){this._type=t,this._referencedContext=e instanceof n.default?e.context():e}return t.prototype.type=function(){return this._type},t.prototype.referencedContext=function(){return this._referencedContext},t}();e.default=o},81:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(980),o=function(){function t(){}return t.prototype.context=function(){return this._context()},t.prototype.tracer=function(){return this._tracer()},t.prototype.setOperationName=function(t){return this._setOperationName(t),this},t.prototype.setBaggageItem=function(t,e){return this._setBaggageItem(t,e),this},t.prototype.getBaggageItem=function(t){return this._getBaggageItem(t)},t.prototype.setTag=function(t,e){var r;return this._addTags(((r={})[t]=e,r)),this},t.prototype.addTags=function(t){return this._addTags(t),this},t.prototype.log=function(t,e){return this._log(t,e),this},t.prototype.logEvent=function(t,e){return this._log({event:t,payload:e})},t.prototype.finish=function(t){this._finish(t)},t.prototype._context=function(){return n.spanContext},t.prototype._tracer=function(){return n.tracer},t.prototype._setOperationName=function(t){},t.prototype._setBaggageItem=function(t,e){},t.prototype._getBaggageItem=function(t){},t.prototype._addTags=function(t){},t.prototype._log=function(t,e){},t.prototype._finish=function(t){},t}();e.Span=o,e.default=o},402:(t,e)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(){}return t.prototype.toTraceId=function(){return\"\"},t.prototype.toSpanId=function(){return\"\"},t}();e.SpanContext=r,e.default=r},266:(t,e,r)=>{\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(929),o=r(980),i=r(81),a=function(){function t(){}return t.prototype.startSpan=function(t,e){if(void 0===e&&(e={}),e.childOf){var r=n.childOf(e.childOf);e.references?e.references.push(r):e.references=[r],delete e.childOf}return this._startSpan(t,e)},t.prototype.inject=function(t,e,r){return t instanceof i.default&&(t=t.context()),this._inject(t,e,r)},t.prototype.extract=function(t,e){return this._extract(t,e)},t.prototype._startSpan=function(t,e){return o.span},t.prototype._inject=function(t,e,r){},t.prototype._extract=function(t,e){return o.spanContext},t}();e.Tracer=a,e.default=a},147:t=>{\"use strict\";t.exports=JSON.parse('{\"name\":\"lightstep-tracer\",\"version\":\"0.33.0-no-protobuf\",\"main\":\"index.js\",\"types\":\"index.d.ts\",\"browser\":\"browser.js\",\"engines\":{\"node\":\">=12.0.0\"},\"scripts\":{\"release\":\"./scripts/release.sh\",\"release:prepare\":\"./scripts/release-prepare.sh\",\"test\":\"rm -f test/results/*.json && node node_modules/mocha/bin/mocha -c test/unittest_node.js\",\"version\":\"make build && git add -A dist\"},\"license\":\"MIT\",\"repository\":{\"type\":\"git\",\"url\":\"http://github.com/lightstep/lightstep-tracer-javascript.git\"},\"dependencies\":{\"async\":\"^3.2.3\",\"eventemitter3\":\"4.0.7\",\"hex2dec\":\"1.1.2\",\"opentracing\":\"^0.14.7\",\"source-map-support\":\"0.5.21\",\"thrift\":\"^0.16.0\"},\"devDependencies\":{\"@babel/cli\":\"^7.17.10\",\"@babel/core\":\"^7.17.10\",\"@babel/plugin-proposal-object-rest-spread\":\"^7.17.3\",\"@babel/plugin-syntax-object-rest-spread\":\"^7.8.3\",\"@babel/plugin-transform-arrow-functions\":\"^7.16.7\",\"@babel/plugin-transform-block-scoped-functions\":\"^7.16.7\",\"@babel/plugin-transform-block-scoping\":\"^7.16.7\",\"@babel/plugin-transform-classes\":\"^7.16.7\",\"@babel/plugin-transform-computed-properties\":\"^7.16.7\",\"@babel/plugin-transform-destructuring\":\"^7.17.7\",\"@babel/plugin-transform-duplicate-keys\":\"^7.16.7\",\"@babel/plugin-transform-literals\":\"^7.16.7\",\"@babel/plugin-transform-modules-commonjs\":\"^7.17.9\",\"@babel/plugin-transform-object-super\":\"^7.16.7\",\"@babel/plugin-transform-parameters\":\"^7.16.7\",\"@babel/plugin-transform-spread\":\"^7.16.7\",\"@babel/plugin-transform-sticky-regex\":\"^7.16.7\",\"@babel/plugin-transform-template-literals\":\"^7.16.7\",\"@babel/plugin-transform-unicode-regex\":\"^7.16.7\",\"@babel/preset-env\":\"^7.17.10\",\"babel-loader\":\"^8.2.5\",\"babel-plugin-add-module-exports\":\"^1.0.4\",\"chai\":\"4.3.6\",\"clone\":\"2.1.2\",\"colors\":\"1.4.0\",\"core-js\":\"^3.22.4\",\"eslint\":\"^8.14.0\",\"eslint-config-airbnb\":\"^19.0.4\",\"eslint-plugin-import\":\"^2.26.0\",\"eslint-plugin-jsx-a11y\":\"^6.5.1\",\"eslint-plugin-react\":\"^7.29.4\",\"express\":\"^4.18.1\",\"fetch-mock\":\"^9.11.0\",\"mocha\":\"^10.0.0\",\"nyc\":\"^15.1.0\",\"package-json\":\"^7.0.0\",\"regenerator-runtime\":\"^0.13.9\",\"shelljs\":\"^0.8.5\",\"sinon\":\"^13.0.2\",\"sprintf-js\":\"1.1.2\",\"underscore\":\"1.13.3\",\"watch-trigger\":\"0.0.10\",\"webpack\":\"^5.72.0\",\"webpack-cli\":\"^4.9.2\"}}')}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,r),i.exports}return r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r(410)})()));","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Convenience class to use as a binary carrier.\n *\n * Any valid Object with a field named `buffer` may be used as a binary carrier;\n * this class is only one such type of object that can be used.\n */\nvar BinaryCarrier = /** @class */ (function () {\n function BinaryCarrier(buffer) {\n this.buffer = buffer;\n }\n return BinaryCarrier;\n}());\nexports.default = BinaryCarrier;\n//# sourceMappingURL=binary_carrier.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * The FORMAT_BINARY format represents SpanContexts in an opaque binary\n * carrier.\n *\n * Tracer.inject() will set the buffer field to an Array-like (Array,\n * ArrayBuffer, or TypedBuffer) object containing the injected binary data.\n * Any valid Object can be used as long as the buffer field of the object\n * can be set.\n *\n * Tracer.extract() will look for `carrier.buffer`, and that field is\n * expected to be an Array-like object (Array, ArrayBuffer, or\n * TypedBuffer).\n */\nexports.FORMAT_BINARY = 'binary';\n/**\n * The FORMAT_TEXT_MAP format represents SpanContexts using a\n * string->string map (backed by a Javascript Object) as a carrier.\n *\n * NOTE: Unlike FORMAT_HTTP_HEADERS, FORMAT_TEXT_MAP places no restrictions\n * on the characters used in either the keys or the values of the map\n * entries.\n *\n * The FORMAT_TEXT_MAP carrier map may contain unrelated data (e.g.,\n * arbitrary gRPC metadata); as such, the Tracer implementation should use\n * a prefix or other convention to distinguish Tracer-specific key:value\n * pairs.\n */\nexports.FORMAT_TEXT_MAP = 'text_map';\n/**\n * The FORMAT_HTTP_HEADERS format represents SpanContexts using a\n * character-restricted string->string map (backed by a Javascript Object)\n * as a carrier.\n *\n * Keys and values in the FORMAT_HTTP_HEADERS carrier must be suitable for\n * use as HTTP headers (without modification or further escaping). That is,\n * the keys have a greatly restricted character set, casing for the keys\n * may not be preserved by various intermediaries, and the values should be\n * URL-escaped.\n *\n * The FORMAT_HTTP_HEADERS carrier map may contain unrelated data (e.g.,\n * arbitrary HTTP headers); as such, the Tracer implementation should use a\n * prefix or other convention to distinguish Tracer-specific key:value\n * pairs.\n */\nexports.FORMAT_HTTP_HEADERS = 'http_headers';\n/**\n * A Span may be the \"child of\" a parent Span. In a “child of” reference,\n * the parent Span depends on the child Span in some capacity.\n *\n * See more about reference types at https://github.com/opentracing/specification\n */\nexports.REFERENCE_CHILD_OF = 'child_of';\n/**\n * Some parent Spans do not depend in any way on the result of their child\n * Spans. In these cases, we say merely that the child Span “follows from”\n * the parent Span in a causal sense.\n *\n * See more about reference types at https://github.com/opentracing/specification\n */\nexports.REFERENCE_FOLLOWS_FROM = 'follows_from';\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** SPAN_KIND hints at relationship between spans, e.g. client/server */\nexports.SPAN_KIND = 'span.kind';\n/** Marks a span representing the client-side of an RPC or other remote call */\nexports.SPAN_KIND_RPC_CLIENT = 'client';\n/** Marks a span representing the server-side of an RPC or other remote call */\nexports.SPAN_KIND_RPC_SERVER = 'server';\n/** Marks a span representing the producing-side within a messaging system or other remote call */\nexports.SPAN_KIND_MESSAGING_PRODUCER = 'producer';\n/** Marks a span representing the consuming-side within a messaging system or other remote call */\nexports.SPAN_KIND_MESSAGING_CONSUMER = 'consumer';\n/**\n * ERROR (boolean) true if and only if the application considers the operation\n * represented by the Span to have failed\n */\nexports.ERROR = 'error';\n/**\n * COMPONENT (string) ia s low-cardinality identifier of the module, library,\n * or package that is generating a span.\n */\nexports.COMPONENT = 'component';\n/**\n * SAMPLING_PRIORITY (number) determines the priority of sampling this Span.\n * If greater than 0, a hint to the Tracer to do its best to capture the trace.\n * If 0, a hint to the trace to not-capture the trace. If absent, the Tracer\n * should use its default sampling mechanism.\n */\nexports.SAMPLING_PRIORITY = 'sampling.priority';\n// ---------------------------------------------------------------------------\n// PEER_* tags can be emitted by either client-side of server-side to describe\n// the other side/service in a peer-to-peer communications, like an RPC call.\n// ---------------------------------------------------------------------------\n/**\n * PEER_SERVICE (string) Remote service name (for some unspecified\n * definition of \"service\"). E.g., \"elasticsearch\", \"a_custom_microservice\", \"memcache\"\n */\nexports.PEER_SERVICE = 'peer.service';\n/** PEER_HOSTNAME (string) Remote hostname. E.g., \"opentracing.io\", \"internal.dns.name\" */\nexports.PEER_HOSTNAME = 'peer.hostname';\n/**\n * PEER_ADDRESS (string) Remote \"address\", suitable for use in a\n * networking client library. This may be a \"ip:port\", a bare\n * \"hostname\", a FQDN, or even a JDBC substring like \"mysql://prod-db:3306\"\n */\nexports.PEER_ADDRESS = 'peer.address';\n/**\n * PEER_HOST_IPV4 (number) Remote IPv4 address as a .-separated tuple.\n * E.g., \"127.0.0.1\"\n */\nexports.PEER_HOST_IPV4 = 'peer.ipv4';\n// PEER_HOST_IPV6 (string) Remote IPv6 address as a string of\n// colon-separated 4-char hex tuples. E.g., \"2001:0db8:85a3:0000:0000:8a2e:0370:7334\"\nexports.PEER_HOST_IPV6 = 'peer.ipv6';\n// PEER_PORT (number) Remote port. E.g., 80\nexports.PEER_PORT = 'peer.port';\n// ---------------------------------------------------------------------------\n// HTTP tags\n// ---------------------------------------------------------------------------\n/**\n * HTTP_URL (string) URL of the request being handled in this segment of the\n * trace, in standard URI format. E.g., \"https://domain.net/path/to?resource=here\"\n */\nexports.HTTP_URL = 'http.url';\n/**\n * HTTP_METHOD (string) HTTP method of the request for the associated Span. E.g.,\n * \"GET\", \"POST\"\n */\nexports.HTTP_METHOD = 'http.method';\n/**\n * HTTP_STATUS_CODE (number) HTTP response status code for the associated Span.\n * E.g., 200, 503, 404\n */\nexports.HTTP_STATUS_CODE = 'http.status_code';\n// -------------------------------------------------------------------------\n// Messaging tags\n// -------------------------------------------------------------------------\n/**\n * MESSAGE_BUS_DESTINATION (string) An address at which messages can be exchanged.\n * E.g. A Kafka record has an associated \"topic name\" that can be extracted\n * by the instrumented producer or consumer and stored using this tag.\n */\nexports.MESSAGE_BUS_DESTINATION = 'message_bus.destination';\n// --------------------------------------------------------------------------\n// Database tags\n// --------------------------------------------------------------------------\n/**\n * DB_INSTANCE (string) Database instance name. E.g., In java, if the\n * jdbc.url=\"jdbc:mysql://127.0.0.1:3306/customers\", the instance name is \"customers\".\n */\nexports.DB_INSTANCE = 'db.instance';\n/**\n * DB_STATEMENT (string) A database statement for the given database type.\n * E.g., for db.type=\"SQL\", \"SELECT * FROM wuser_table\";\n * for db.type=\"redis\", \"SET mykey 'WuValue'\".\n */\nexports.DB_STATEMENT = 'db.statement';\n/**\n * DB_TYPE (string) Database type. For any SQL database, \"sql\". For others,\n * the lower-case database category, e.g. \"cassandra\", \"hbase\", or \"redis\".\n */\nexports.DB_TYPE = 'db.type';\n/**\n * DB_USER (string) Username for accessing database. E.g., \"readonly_user\"\n * or \"reporting_user\"\n */\nexports.DB_USER = 'db.user';\n//# sourceMappingURL=tags.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Constants = require(\"./constants\");\nvar reference_1 = require(\"./reference\");\nvar span_1 = require(\"./span\");\n/**\n * Return a new REFERENCE_CHILD_OF reference.\n *\n * @param {SpanContext} spanContext - the parent SpanContext instance to\n * reference.\n * @return a REFERENCE_CHILD_OF reference pointing to `spanContext`\n */\nfunction childOf(spanContext) {\n // Allow the user to pass a Span instead of a SpanContext\n if (spanContext instanceof span_1.default) {\n spanContext = spanContext.context();\n }\n return new reference_1.default(Constants.REFERENCE_CHILD_OF, spanContext);\n}\nexports.childOf = childOf;\n/**\n * Return a new REFERENCE_FOLLOWS_FROM reference.\n *\n * @param {SpanContext} spanContext - the parent SpanContext instance to\n * reference.\n * @return a REFERENCE_FOLLOWS_FROM reference pointing to `spanContext`\n */\nfunction followsFrom(spanContext) {\n // Allow the user to pass a Span instead of a SpanContext\n if (spanContext instanceof span_1.default) {\n spanContext = spanContext.context();\n }\n return new reference_1.default(Constants.REFERENCE_FOLLOWS_FROM, spanContext);\n}\nexports.followsFrom = followsFrom;\n//# sourceMappingURL=functions.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tracer_1 = require(\"./tracer\");\nvar noopTracer = new tracer_1.default();\nvar _globalTracer = null;\n// Allows direct importing/requiring of the global tracer:\n//\n// let globalTracer = require('opentracing/global');\n// OR\n// import globalTracer from 'opentracing/global';\n//\n// Acts a bridge to the global tracer that can be safely called before the\n// global tracer is initialized. The purpose of the delegation is to avoid the\n// sometimes nearly intractible initialization order problems that can arise in\n// applications with a complex set of dependencies, while also avoiding the\n// case where\nvar GlobalTracerDelegate = /** @class */ (function (_super) {\n __extends(GlobalTracerDelegate, _super);\n function GlobalTracerDelegate() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GlobalTracerDelegate.prototype.startSpan = function () {\n var tracer = _globalTracer || noopTracer;\n return tracer.startSpan.apply(tracer, arguments);\n };\n GlobalTracerDelegate.prototype.inject = function () {\n var tracer = _globalTracer || noopTracer;\n return tracer.inject.apply(tracer, arguments);\n };\n GlobalTracerDelegate.prototype.extract = function () {\n var tracer = _globalTracer || noopTracer;\n return tracer.extract.apply(tracer, arguments);\n };\n return GlobalTracerDelegate;\n}(tracer_1.default));\nvar globalTracerDelegate = new GlobalTracerDelegate();\n/**\n * Set the global Tracer.\n *\n * The behavior is undefined if this function is called more than once.\n *\n * @param {Tracer} tracer - the Tracer implementation\n */\nfunction initGlobalTracer(tracer) {\n _globalTracer = tracer;\n}\nexports.initGlobalTracer = initGlobalTracer;\n/**\n * Returns the global tracer.\n */\nfunction globalTracer() {\n // Return the delegate. Since the global tracer is largely a convenience\n // (the user can always create their own tracers), the delegate is used to\n // give the added convenience of not needing to worry about initialization\n // order.\n return globalTracerDelegate;\n}\nexports.globalTracer = globalTracer;\n//# sourceMappingURL=global_tracer.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar binary_carrier_1 = require(\"./binary_carrier\");\nexports.BinaryCarrier = binary_carrier_1.default;\nvar Tags = require(\"./ext/tags\");\nexports.Tags = Tags;\nvar Noop = require(\"./noop\");\nvar reference_1 = require(\"./reference\");\nexports.Reference = reference_1.default;\nvar span_1 = require(\"./span\");\nexports.Span = span_1.default;\nvar span_context_1 = require(\"./span_context\");\nexports.SpanContext = span_context_1.default;\nvar tracer_1 = require(\"./tracer\");\nexports.Tracer = tracer_1.Tracer;\nvar mock_tracer_1 = require(\"./mock_tracer\");\nexports.MockTracer = mock_tracer_1.MockTracer;\n__export(require(\"./global_tracer\"));\n__export(require(\"./constants\"));\n__export(require(\"./functions\"));\n// Initialize the noops last to avoid a dependecy cycle between the classes.\nNoop.initialize();\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar mock_context_1 = require(\"./mock_context\");\nexports.MockContext = mock_context_1.default;\nvar mock_span_1 = require(\"./mock_span\");\nexports.MockSpan = mock_span_1.default;\nvar mock_tracer_1 = require(\"./mock_tracer\");\nexports.MockTracer = mock_tracer_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar span_context_1 = require(\"../span_context\");\n/**\n * OpenTracing Context implementation designed for use in\n * unit tests.\n */\nvar MockContext = /** @class */ (function (_super) {\n __extends(MockContext, _super);\n function MockContext(span) {\n var _this = _super.call(this) || this;\n // Store a reference to the span itself since this is a mock tracer\n // intended to make debugging and unit testing easier.\n _this._span = span;\n return _this;\n }\n MockContext.prototype.span = function () {\n return this._span;\n };\n return MockContext;\n}(span_context_1.SpanContext));\nexports.MockContext = MockContext;\nexports.default = MockContext;\n//# sourceMappingURL=mock_context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Index a collection of reported MockSpans in a way that's easy to run unit\n * test assertions against.\n */\nvar MockReport = /** @class */ (function () {\n function MockReport(spans) {\n var _this = this;\n this.spans = spans;\n this.spansByUUID = {};\n this.spansByTag = {};\n this.debugSpans = [];\n this.unfinishedSpans = [];\n spans.forEach(function (span) {\n if (span._finishMs === 0) {\n _this.unfinishedSpans.push(span);\n }\n _this.spansByUUID[span.uuid()] = span;\n _this.debugSpans.push(span.debug());\n var tags = span.tags();\n Object.keys(tags).forEach(function (key) {\n var val = tags[key];\n _this.spansByTag[key] = _this.spansByTag[key] || {};\n _this.spansByTag[key][val] = _this.spansByTag[key][val] || [];\n _this.spansByTag[key][val].push(span);\n });\n });\n }\n MockReport.prototype.firstSpanWithTagValue = function (key, val) {\n var m = this.spansByTag[key];\n if (!m) {\n return null;\n }\n var n = m[val];\n if (!n) {\n return null;\n }\n return n[0];\n };\n return MockReport;\n}());\nexports.MockReport = MockReport;\nexports.default = MockReport;\n//# sourceMappingURL=mock_report.js.map","\"use strict\";\n/* eslint-disable import/no-extraneous-dependencies */\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar opentracing = require(\"../index\");\nvar mock_context_1 = require(\"./mock_context\");\n/**\n * OpenTracing Span implementation designed for use in unit tests.\n */\nvar MockSpan = /** @class */ (function (_super) {\n __extends(MockSpan, _super);\n //------------------------------------------------------------------------//\n // MockSpan-specific\n //------------------------------------------------------------------------//\n function MockSpan(tracer) {\n var _this = _super.call(this) || this;\n _this._mockTracer = tracer;\n _this._uuid = _this._generateUUID();\n _this._startMs = Date.now();\n _this._finishMs = 0;\n _this._operationName = '';\n _this._tags = {};\n _this._logs = [];\n return _this;\n }\n //------------------------------------------------------------------------//\n // OpenTracing implementation\n //------------------------------------------------------------------------//\n MockSpan.prototype._context = function () {\n return new mock_context_1.default(this);\n };\n MockSpan.prototype._setOperationName = function (name) {\n this._operationName = name;\n };\n MockSpan.prototype._addTags = function (set) {\n var keys = Object.keys(set);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n this._tags[key] = set[key];\n }\n };\n MockSpan.prototype._log = function (fields, timestamp) {\n this._logs.push({\n fields: fields,\n timestamp: timestamp\n });\n };\n MockSpan.prototype._finish = function (finishTime) {\n this._finishMs = finishTime || Date.now();\n };\n MockSpan.prototype.uuid = function () {\n return this._uuid;\n };\n MockSpan.prototype.operationName = function () {\n return this._operationName;\n };\n MockSpan.prototype.durationMs = function () {\n return this._finishMs - this._startMs;\n };\n MockSpan.prototype.tags = function () {\n return this._tags;\n };\n MockSpan.prototype.tracer = function () {\n return this._mockTracer;\n };\n MockSpan.prototype._generateUUID = function () {\n var p0 = (\"00000000\" + Math.abs((Math.random() * 0xFFFFFFFF) | 0).toString(16)).substr(-8);\n var p1 = (\"00000000\" + Math.abs((Math.random() * 0xFFFFFFFF) | 0).toString(16)).substr(-8);\n return \"\" + p0 + p1;\n };\n MockSpan.prototype.addReference = function (ref) {\n };\n /**\n * Returns a simplified object better for console.log()'ing.\n */\n MockSpan.prototype.debug = function () {\n var obj = {\n uuid: this._uuid,\n operation: this._operationName,\n millis: [this._finishMs - this._startMs, this._startMs, this._finishMs]\n };\n if (Object.keys(this._tags).length) {\n obj.tags = this._tags;\n }\n return obj;\n };\n return MockSpan;\n}(opentracing.Span));\nexports.MockSpan = MockSpan;\nexports.default = MockSpan;\n//# sourceMappingURL=mock_span.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// TODO: Move mock-tracer to its own NPM package once it is complete and tested.\nvar opentracing = require(\"../index\");\nvar mock_report_1 = require(\"./mock_report\");\nvar mock_span_1 = require(\"./mock_span\");\n/**\n * OpenTracing Tracer implementation designed for use in unit tests.\n */\nvar MockTracer = /** @class */ (function (_super) {\n __extends(MockTracer, _super);\n //------------------------------------------------------------------------//\n // MockTracer-specific\n //------------------------------------------------------------------------//\n function MockTracer() {\n var _this = _super.call(this) || this;\n _this._spans = [];\n return _this;\n }\n //------------------------------------------------------------------------//\n // OpenTracing implementation\n //------------------------------------------------------------------------//\n MockTracer.prototype._startSpan = function (name, fields) {\n // _allocSpan is given it's own method so that derived classes can\n // allocate any type of object they want, but not have to duplicate\n // the other common logic in startSpan().\n var span = this._allocSpan();\n span.setOperationName(name);\n this._spans.push(span);\n if (fields.references) {\n for (var _i = 0, _a = fields.references; _i < _a.length; _i++) {\n var ref = _a[_i];\n span.addReference(ref);\n }\n }\n // Capture the stack at the time the span started\n span._startStack = new Error().stack;\n return span;\n };\n MockTracer.prototype._inject = function (span, format, carrier) {\n throw new Error('NOT YET IMPLEMENTED');\n };\n MockTracer.prototype._extract = function (format, carrier) {\n throw new Error('NOT YET IMPLEMENTED');\n };\n MockTracer.prototype._allocSpan = function () {\n return new mock_span_1.default(this);\n };\n /**\n * Discard any buffered data.\n */\n MockTracer.prototype.clear = function () {\n this._spans = [];\n };\n /**\n * Return the buffered data in a format convenient for making unit test\n * assertions.\n */\n MockTracer.prototype.report = function () {\n return new mock_report_1.default(this._spans);\n };\n return MockTracer;\n}(opentracing.Tracer));\nexports.MockTracer = MockTracer;\nexports.default = MockTracer;\n//# sourceMappingURL=mock_tracer.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar span_1 = require(\"./span\");\nvar span_context_1 = require(\"./span_context\");\nvar tracer_1 = require(\"./tracer\");\nexports.tracer = null;\nexports.spanContext = null;\nexports.span = null;\n// Deferred initialization to avoid a dependency cycle where Tracer depends on\n// Span which depends on the noop tracer.\nfunction initialize() {\n exports.tracer = new tracer_1.default();\n exports.span = new span_1.default();\n exports.spanContext = new span_context_1.default();\n}\nexports.initialize = initialize;\n//# sourceMappingURL=noop.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar span_1 = require(\"./span\");\n/**\n * Reference pairs a reference type constant (e.g., REFERENCE_CHILD_OF or\n * REFERENCE_FOLLOWS_FROM) with the SpanContext it points to.\n *\n * See the exported childOf() and followsFrom() functions at the package level.\n */\nvar Reference = /** @class */ (function () {\n /**\n * Initialize a new Reference instance.\n *\n * @param {string} type - the Reference type constant (e.g.,\n * REFERENCE_CHILD_OF or REFERENCE_FOLLOWS_FROM).\n * @param {SpanContext} referencedContext - the SpanContext being referred\n * to. As a convenience, a Span instance may be passed in instead\n * (in which case its .context() is used here).\n */\n function Reference(type, referencedContext) {\n this._type = type;\n this._referencedContext = (referencedContext instanceof span_1.default ?\n referencedContext.context() :\n referencedContext);\n }\n /**\n * @return {string} The Reference type (e.g., REFERENCE_CHILD_OF or\n * REFERENCE_FOLLOWS_FROM).\n */\n Reference.prototype.type = function () {\n return this._type;\n };\n /**\n * @return {SpanContext} The SpanContext being referred to (e.g., the\n * parent in a REFERENCE_CHILD_OF Reference).\n */\n Reference.prototype.referencedContext = function () {\n return this._referencedContext;\n };\n return Reference;\n}());\nexports.default = Reference;\n//# sourceMappingURL=reference.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar noop = require(\"./noop\");\n/**\n * Span represents a logical unit of work as part of a broader Trace. Examples\n * of span might include remote procedure calls or a in-process function calls\n * to sub-components. A Trace has a single, top-level \"root\" Span that in turn\n * may have zero or more child Spans, which in turn may have children.\n */\nvar Span = /** @class */ (function () {\n function Span() {\n }\n // ---------------------------------------------------------------------- //\n // OpenTracing API methods\n // ---------------------------------------------------------------------- //\n /**\n * Returns the SpanContext object associated with this Span.\n *\n * @return {SpanContext}\n */\n Span.prototype.context = function () {\n return this._context();\n };\n /**\n * Returns the Tracer object used to create this Span.\n *\n * @return {Tracer}\n */\n Span.prototype.tracer = function () {\n return this._tracer();\n };\n /**\n * Sets the string name for the logical operation this span represents.\n *\n * @param {string} name\n */\n Span.prototype.setOperationName = function (name) {\n this._setOperationName(name);\n return this;\n };\n /**\n * Sets a key:value pair on this Span that also propagates to future\n * children of the associated Span.\n *\n * setBaggageItem() enables powerful functionality given a full-stack\n * opentracing integration (e.g., arbitrary application data from a web\n * client can make it, transparently, all the way into the depths of a\n * storage system), and with it some powerful costs: use this feature with\n * care.\n *\n * IMPORTANT NOTE #1: setBaggageItem() will only propagate baggage items to\n * *future* causal descendants of the associated Span.\n *\n * IMPORTANT NOTE #2: Use this thoughtfully and with care. Every key and\n * value is copied into every local *and remote* child of the associated\n * Span, and that can add up to a lot of network and cpu overhead.\n *\n * @param {string} key\n * @param {string} value\n */\n Span.prototype.setBaggageItem = function (key, value) {\n this._setBaggageItem(key, value);\n return this;\n };\n /**\n * Returns the value for a baggage item given its key.\n *\n * @param {string} key\n * The key for the given trace attribute.\n * @return {string}\n * String value for the given key, or undefined if the key does not\n * correspond to a set trace attribute.\n */\n Span.prototype.getBaggageItem = function (key) {\n return this._getBaggageItem(key);\n };\n /**\n * Adds a single tag to the span. See `addTags()` for details.\n *\n * @param {string} key\n * @param {any} value\n */\n Span.prototype.setTag = function (key, value) {\n var _a;\n // NOTE: the call is normalized to a call to _addTags()\n this._addTags((_a = {}, _a[key] = value, _a));\n return this;\n };\n /**\n * Adds the given key value pairs to the set of span tags.\n *\n * Multiple calls to addTags() results in the tags being the superset of\n * all calls.\n *\n * The behavior of setting the same key multiple times on the same span\n * is undefined.\n *\n * The supported type of the values is implementation-dependent.\n * Implementations are expected to safely handle all types of values but\n * may choose to ignore unrecognized / unhandle-able values (e.g. objects\n * with cyclic references, function objects).\n *\n * @return {[type]} [description]\n */\n Span.prototype.addTags = function (keyValueMap) {\n this._addTags(keyValueMap);\n return this;\n };\n /**\n * Add a log record to this Span, optionally at a user-provided timestamp.\n *\n * For example:\n *\n * span.log({\n * size: rpc.size(), // numeric value\n * URI: rpc.URI(), // string value\n * payload: rpc.payload(), // Object value\n * \"keys can be arbitrary strings\": rpc.foo(),\n * });\n *\n * span.log({\n * \"error.description\": someError.description(),\n * }, someError.timestampMillis());\n *\n * @param {object} keyValuePairs\n * An object mapping string keys to arbitrary value types. All\n * Tracer implementations should support bool, string, and numeric\n * value types, and some may also support Object values.\n * @param {number} timestamp\n * An optional parameter specifying the timestamp in milliseconds\n * since the Unix epoch. Fractional values are allowed so that\n * timestamps with sub-millisecond accuracy can be represented. If\n * not specified, the implementation is expected to use its notion\n * of the current time of the call.\n */\n Span.prototype.log = function (keyValuePairs, timestamp) {\n this._log(keyValuePairs, timestamp);\n return this;\n };\n /**\n * DEPRECATED\n */\n Span.prototype.logEvent = function (eventName, payload) {\n return this._log({ event: eventName, payload: payload });\n };\n /**\n * Sets the end timestamp and finalizes Span state.\n *\n * With the exception of calls to Span.context() (which are always allowed),\n * finish() must be the last call made to any span instance, and to do\n * otherwise leads to undefined behavior.\n *\n * @param {number} finishTime\n * Optional finish time in milliseconds as a Unix timestamp. Decimal\n * values are supported for timestamps with sub-millisecond accuracy.\n * If not specified, the current time (as defined by the\n * implementation) will be used.\n */\n Span.prototype.finish = function (finishTime) {\n this._finish(finishTime);\n // Do not return `this`. The Span generally should not be used after it\n // is finished so chaining is not desired in this context.\n };\n // ---------------------------------------------------------------------- //\n // Derived classes can choose to implement the below\n // ---------------------------------------------------------------------- //\n // By default returns a no-op SpanContext.\n Span.prototype._context = function () {\n return noop.spanContext;\n };\n // By default returns a no-op tracer.\n //\n // The base class could store the tracer that created it, but it does not\n // in order to ensure the no-op span implementation has zero members,\n // which allows V8 to aggressively optimize calls to such objects.\n Span.prototype._tracer = function () {\n return noop.tracer;\n };\n // By default does nothing\n Span.prototype._setOperationName = function (name) {\n };\n // By default does nothing\n Span.prototype._setBaggageItem = function (key, value) {\n };\n // By default does nothing\n Span.prototype._getBaggageItem = function (key) {\n return undefined;\n };\n // By default does nothing\n //\n // NOTE: both setTag() and addTags() map to this function. keyValuePairs\n // will always be an associative array.\n Span.prototype._addTags = function (keyValuePairs) {\n };\n // By default does nothing\n Span.prototype._log = function (keyValuePairs, timestamp) {\n };\n // By default does nothing\n //\n // finishTime is expected to be either a number or undefined.\n Span.prototype._finish = function (finishTime) {\n };\n return Span;\n}());\nexports.Span = Span;\nexports.default = Span;\n//# sourceMappingURL=span.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * SpanContext represents Span state that must propagate to descendant Spans\n * and across process boundaries.\n *\n * SpanContext is logically divided into two pieces: the user-level \"Baggage\"\n * (see setBaggageItem and getBaggageItem) that propagates across Span\n * boundaries and any Tracer-implementation-specific fields that are needed to\n * identify or otherwise contextualize the associated Span instance (e.g., a\n * tuple).\n */\nvar SpanContext = /** @class */ (function () {\n function SpanContext() {\n }\n // The SpanContext is entirely implementation dependent\n /**\n * Returns a string representation of the implementation internal trace ID.\n *\n * @returns {string}\n */\n SpanContext.prototype.toTraceId = function () {\n return '';\n };\n /**\n * Returns a string representation of the implementation internal span ID.\n *\n * @returns {string}\n */\n SpanContext.prototype.toSpanId = function () {\n return '';\n };\n return SpanContext;\n}());\nexports.SpanContext = SpanContext;\nexports.default = SpanContext;\n//# sourceMappingURL=span_context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Functions = require(\"./functions\");\nvar Noop = require(\"./noop\");\nvar span_1 = require(\"./span\");\n/**\n * Tracer is the entry-point between the instrumentation API and the tracing\n * implementation.\n *\n * The default object acts as a no-op implementation.\n *\n * Note to implementators: derived classes can choose to directly implement the\n * methods in the \"OpenTracing API methods\" section, or optionally the subset of\n * underscore-prefixed methods to pick up the argument checking and handling\n * automatically from the base class.\n */\nvar Tracer = /** @class */ (function () {\n function Tracer() {\n }\n // ---------------------------------------------------------------------- //\n // OpenTracing API methods\n // ---------------------------------------------------------------------- //\n /**\n * Starts and returns a new Span representing a logical unit of work.\n *\n * For example:\n *\n * // Start a new (parentless) root Span:\n * var parent = Tracer.startSpan('DoWork');\n *\n * // Start a new (child) Span:\n * var child = Tracer.startSpan('load-from-db', {\n * childOf: parent.context(),\n * });\n *\n * // Start a new async (FollowsFrom) Span:\n * var child = Tracer.startSpan('async-cache-write', {\n * references: [\n * opentracing.followsFrom(parent.context())\n * ],\n * });\n *\n * @param {string} name - the name of the operation (REQUIRED).\n * @param {SpanOptions} [options] - options for the newly created span.\n * @return {Span} - a new Span object.\n */\n Tracer.prototype.startSpan = function (name, options) {\n if (options === void 0) { options = {}; }\n // Convert options.childOf to fields.references as needed.\n if (options.childOf) {\n // Convert from a Span or a SpanContext into a Reference.\n var childOf = Functions.childOf(options.childOf);\n if (options.references) {\n options.references.push(childOf);\n }\n else {\n options.references = [childOf];\n }\n delete (options.childOf);\n }\n return this._startSpan(name, options);\n };\n /**\n * Injects the given SpanContext instance for cross-process propagation\n * within `carrier`. The expected type of `carrier` depends on the value of\n * `format.\n *\n * OpenTracing defines a common set of `format` values (see\n * FORMAT_TEXT_MAP, FORMAT_HTTP_HEADERS, and FORMAT_BINARY), and each has\n * an expected carrier type.\n *\n * Consider this pseudocode example:\n *\n * var clientSpan = ...;\n * ...\n * // Inject clientSpan into a text carrier.\n * var headersCarrier = {};\n * Tracer.inject(clientSpan.context(), Tracer.FORMAT_HTTP_HEADERS, headersCarrier);\n * // Incorporate the textCarrier into the outbound HTTP request header\n * // map.\n * Object.assign(outboundHTTPReq.headers, headersCarrier);\n * // ... send the httpReq\n *\n * @param {SpanContext} spanContext - the SpanContext to inject into the\n * carrier object. As a convenience, a Span instance may be passed\n * in instead (in which case its .context() is used for the\n * inject()).\n * @param {string} format - the format of the carrier.\n * @param {any} carrier - see the documentation for the chosen `format`\n * for a description of the carrier object.\n */\n Tracer.prototype.inject = function (spanContext, format, carrier) {\n // Allow the user to pass a Span instead of a SpanContext\n if (spanContext instanceof span_1.default) {\n spanContext = spanContext.context();\n }\n return this._inject(spanContext, format, carrier);\n };\n /**\n * Returns a SpanContext instance extracted from `carrier` in the given\n * `format`.\n *\n * OpenTracing defines a common set of `format` values (see\n * FORMAT_TEXT_MAP, FORMAT_HTTP_HEADERS, and FORMAT_BINARY), and each has\n * an expected carrier type.\n *\n * Consider this pseudocode example:\n *\n * // Use the inbound HTTP request's headers as a text map carrier.\n * var headersCarrier = inboundHTTPReq.headers;\n * var wireCtx = Tracer.extract(Tracer.FORMAT_HTTP_HEADERS, headersCarrier);\n * var serverSpan = Tracer.startSpan('...', { childOf : wireCtx });\n *\n * @param {string} format - the format of the carrier.\n * @param {any} carrier - the type of the carrier object is determined by\n * the format.\n * @return {SpanContext}\n * The extracted SpanContext, or null if no such SpanContext could\n * be found in `carrier`\n */\n Tracer.prototype.extract = function (format, carrier) {\n return this._extract(format, carrier);\n };\n // ---------------------------------------------------------------------- //\n // Derived classes can choose to implement the below\n // ---------------------------------------------------------------------- //\n // NOTE: the input to this method is *always* an associative array. The\n // public-facing startSpan() method normalizes the arguments so that\n // all N implementations do not need to worry about variations in the call\n // signature.\n //\n // The default behavior returns a no-op span.\n Tracer.prototype._startSpan = function (name, fields) {\n return Noop.span;\n };\n // The default behavior is a no-op.\n Tracer.prototype._inject = function (spanContext, format, carrier) {\n };\n // The default behavior is to return a no-op SpanContext.\n Tracer.prototype._extract = function (format, carrier) {\n return Noop.spanContext;\n };\n return Tracer;\n}());\nexports.Tracer = Tracer;\nexports.default = Tracer;\n//# sourceMappingURL=tracer.js.map","// 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].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\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__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { SHA256 as cryptoJsSHA256, enc as cryptoJsEnc } from \"crypto-js\";\r\nimport { IObject, Nullable, Rect, TUnionToIntersection, Undefined, UserActivationStatus, BrowserPermissionName } from \"./util.types\";\r\n\r\n// This must be captured at script load time. Callbacks will not have this data set.\r\nconst CURRENT_SCRIPT: Nullable = document.currentScript as Nullable;\r\n\r\n/**\r\n * Collection of general utilities.\r\n */\r\nexport namespace Utils {\r\n\r\n\r\n /**\r\n * Returns true if the argument not null or undefined\r\n *\r\n * This is to avoid cases like when `if (v)` fails due to v being zero\r\n *\r\n * @param v\r\n * value being checked\r\n *\r\n * @returns true if v is not null or undefined\r\n */\r\n export function isDefined(v: any): boolean {\r\n return v !== null && v !== undefined;\r\n }\r\n\r\n /**\r\n * Normalizes a language identifier so that it is properly separated by ```separator```.\r\n * e.g. enUS -> en_US or en-US -> en_US.\r\n *\r\n * @param langCode\r\n * The language code to normalize.\r\n *\r\n * @param separator\r\n * The character to use as a separator.\r\n *\r\n */\r\n export function normalizeLanguageCode(langCode: string, separator: string = \"_\"): string {\r\n let idx: number = langCode.indexOf(\"-\");\r\n\r\n if (idx === -1) {\r\n idx = langCode.indexOf(\"_\");\r\n }\r\n\r\n // the input lang does not contain a '-' or '_' so we will try\r\n // a simple length check, if that fails then not much we can do\r\n if (idx === -1) {\r\n\r\n // language codes should always start with a two-letter country/region code, which can\r\n // then be followed by at least a two-letter language/dialect or sub-region code (e.g. zh-Hans or az-Latn)\r\n if (langCode.length > 3) {\r\n return langCode.substr(0, 2) + separator + langCode.substr(2);\r\n }\r\n\r\n // just return the original since we wouldn't know what to do\r\n // with it, e.g. 'en', 'ENU', ...\r\n return langCode;\r\n }\r\n\r\n const lang: string = langCode.substr(0, idx);\r\n const country: string = langCode.substr(idx + 1, langCode.length);\r\n\r\n return lang.toLowerCase() + separator + country.toUpperCase();\r\n }\r\n\r\n\r\n /**\r\n * Represents the result of a polling operation.\r\n */\r\n export interface PollResult {\r\n done: boolean;\r\n result?: T;\r\n }\r\n\r\n\r\n /**\r\n * Polls a function for a specified interval until it completes or has timed out.\r\n *\r\n * @param pollFunc\r\n * The function to poll.\r\n *\r\n * @param intervalMs\r\n * The interval (in milliseconds) to poll the function.\r\n *\r\n * @param timeoutMs\r\n * The amount of time (in milliseconds) without completing until the polling is then stopped.\r\n *\r\n * @returns\r\n * The value of type T.\r\n *\r\n * ## Usage Example\r\n * [[include:utils.poll.md]]\r\n *\r\n */\r\n export function poll(pollFunc: () => Promise>, intervalMs: number = 1000, timeoutMs: number = 5000): Promise {\r\n const endTs: number = Date.now() + timeoutMs;\r\n const doPoll = (resolve: any, reject: any): void => {\r\n Promise.resolve(pollFunc())\r\n .then((pollResult: PollResult) => {\r\n if (pollResult.done) {\r\n resolve(pollResult.result);\r\n }\r\n else if (Date.now() >= endTs) {\r\n reject(new Error(\"timeout_expired\"));\r\n }\r\n else {\r\n window.setTimeout(doPoll, intervalMs, resolve, reject);\r\n }\r\n })\r\n .catch((err) => {\r\n reject(err);\r\n });\r\n };\r\n\r\n return new Promise(doPoll);\r\n }\r\n\r\n /**\r\n * Perform a setTimeout to mimic sleep in an async function or promise.\r\n *\r\n * @param ms\r\n * The number of milliseconds to sleep for.\r\n *\r\n * @returns\r\n * A resolved Promise when `ms` has elapsed.\r\n */\r\n export function sleep(ms: number): Promise {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n /**\r\n * Returns a new function which will postpone the execution until after `delay` milliseconds\r\n * have elapsed since the last time it was invoked.\r\n *\r\n * @param func\r\n * The function to execute.\r\n *\r\n * @param delay\r\n * The amount of time (in milliseconds) to wait until executing the function.\r\n *\r\n * @returns\r\n * A new debounced function.\r\n */\r\n export function debounce any>(func: T, delay: number): (...args: Parameters) => void {\r\n let tid: ReturnType | undefined;\r\n\r\n return (...args: Parameters) => {\r\n if (tid) {\r\n clearTimeout(tid);\r\n }\r\n\r\n tid = setTimeout(() => {\r\n func(...args);\r\n }, delay);\r\n };\r\n }\r\n\r\n\r\n /**\r\n * Returns the origin plus full path that is hosting the SDK script, including the name of the script.\r\n *\r\n * @returns\r\n * The origin + pathname of the SDK script, including the basename\r\n */\r\n export function getScriptPath(scriptSrc: string = CURRENT_SCRIPT!.src): URL {\r\n if (!scriptSrc) {\r\n throw new Error(`Could not determine the current script. \"document.currentScript\" is ${CURRENT_SCRIPT}`);\r\n }\r\n\r\n return new URL(scriptSrc);\r\n }\r\n\r\n\r\n /**\r\n * Returns the basename of the SDK script.\r\n *\r\n * @returns\r\n * The basename of the SDK script as a string\r\n */\r\n export function getScriptName(scriptSrc: string = CURRENT_SCRIPT!.src): string {\r\n if (!scriptSrc) {\r\n throw new Error(`Could not determine the current script. \"document.currentScript\" is ${CURRENT_SCRIPT}`);\r\n }\r\n\r\n return scriptSrc.substring(scriptSrc.lastIndexOf(\"/\") + 1);\r\n }\r\n\r\n\r\n /**\r\n * Returns the origin (protocol + domain + port) that is hosting the SDK script.\r\n *\r\n * For example, if hosted at https://foo.bar:8001/baz/sdk.js, then return https://foo.bar:8001\r\n *\r\n * @returns\r\n * The origin + pathname of the SDK script, without the basename\r\n */\r\n export function getScriptOrigin(scriptSrc: string = CURRENT_SCRIPT!.src): string {\r\n if (!scriptSrc) {\r\n throw new Error(`Could not determine the current script. \"document.currentScript\" is ${CURRENT_SCRIPT}`);\r\n }\r\n\r\n const url = new URL(scriptSrc);\r\n return url.origin;\r\n }\r\n\r\n\r\n /**\r\n * Returns the origin plus full path that is hosting the SDK script.\r\n *\r\n * For example, if hosted at https://foo.bar/baz/component/component.js, then return https://foo.bar/baz\r\n *\r\n * @returns\r\n * The origin + pathname of the SDK script, without the basename\r\n */\r\n export function getScriptOriginRootPath(scriptSrc: string = CURRENT_SCRIPT!.src): string {\r\n if (!scriptSrc) {\r\n throw new Error(`Could not determine the current script. \"document.currentScript\" is ${CURRENT_SCRIPT}`);\r\n }\r\n\r\n const path = getScriptOriginPath(scriptSrc);\r\n const scriptName = getScriptName(scriptSrc);\r\n if (scriptName === \"gfn-client-sdk.js\") {\r\n return path;\r\n } else {\r\n return path.substring(0, path.lastIndexOf(\"/\"));\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Returns the origin plus full path that is hosting the SDK script.\r\n *\r\n * For example, if hosted at https://foo.bar/baz/component/component.js, then return https://foo.bar/baz/component\r\n *\r\n * @returns\r\n * The origin + pathname of the SDK script, without the basename\r\n */\r\n export function getScriptOriginPath(scriptSrc: string = CURRENT_SCRIPT!.src): string {\r\n if (!scriptSrc) {\r\n throw new Error(`Could not determine the current script. \"document.currentScript\" is ${CURRENT_SCRIPT}`);\r\n }\r\n\r\n return scriptSrc.substring(0, scriptSrc.lastIndexOf(\"/\"));\r\n }\r\n\r\n\r\n /**\r\n * Device utilities.\r\n */\r\n export namespace device {\r\n /**\r\n * Gets the size of the window's outer rectangle.\r\n *\r\n * @returns\r\n * A {@link Rect} that contains the windows outer dimensions.\r\n */\r\n export function getWindowRect(): Rect {\r\n return {\r\n x: window.screenX,\r\n y: window.screenY,\r\n width: window.outerWidth,\r\n height: window.outerHeight\r\n };\r\n }\r\n\r\n /**\r\n * Gets the details about the user's current activation.\r\n *\r\n * @returns\r\n * A {@link UserActivationStatus} that contains information on\r\n * whether the user has activated the document.\r\n */\r\n export function getUserActivationStatus(): UserActivationStatus {\r\n if (\"userActivation\" in navigator) {\r\n return {\r\n hasUserActivationAPI: true,\r\n hasBeenActive: (navigator).userActivation.hasBeenActive,\r\n isActive: (navigator).userActivation.isActive\r\n }\r\n }\r\n\r\n return {\r\n hasUserActivationAPI: false,\r\n hasBeenActive: false,\r\n isActive: false\r\n }\r\n }\r\n\r\n /**\r\n * Gets status of browser permission.\r\n *\r\n * @param name\r\n * A {@link BrowserPermissionName} for which permission status is required\r\n *\r\n * @returns\r\n * a boolean indicating whether permission has been granted or not.\r\n */\r\n export async function getBrowserPermissionStatus(name: BrowserPermissionName): Promise {\r\n let isGranted: boolean = false;\r\n\r\n await navigator.permissions.query({ name: name as PermissionName }).then((result) => {\r\n isGranted = (result.state === \"granted\" || result.state === \"prompt\");\r\n }).catch((error) => {\r\n throw new Error(`Failed to get ${name} status. ${error}`);\r\n });\r\n return isGranted;\r\n }\r\n }\r\n\r\n /**\r\n * Crypto utilities.\r\n */\r\n export namespace crypt {\r\n /**\r\n * Represents an encoding to use for the\r\n * output of a hashing function.\r\n */\r\n export enum Encoding {\r\n /**\r\n * The string is encoded as Base 64.\r\n */\r\n Base64,\r\n\r\n /**\r\n * The string is encoded as Base 64 url.\r\n */\r\n Base64Url,\r\n\r\n /**\r\n * The string is encoded as Base 16 hex.\r\n */\r\n Hex,\r\n }\r\n\r\n\r\n /**\r\n * Creates a SHA-256 checksum from a string buffer.\r\n *\r\n * @param buffer\r\n * The input string buffer to hash.\r\n *\r\n * @param enc\r\n * The output encoding; optional. The default is {@link crypt.Encoding.Hex}.\r\n *\r\n * @returns\r\n * SHA-256 checksum, encoded as specified with the `enc` parameter.\r\n */\r\n export async function sha256(buffer: string, enc: Encoding = Encoding.Hex): Promise {\r\n // Web Crypto API is only available in secure context\r\n // unless on localhost or loopback IP address\r\n if (\"crypto\" in window && crypto.subtle) {\r\n // encode as UTF-8\r\n const msgBuffer: Uint8Array = new TextEncoder().encode(buffer);\r\n\r\n // Hash the message\r\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", msgBuffer);\r\n\r\n // convert ArrayBuffer to Array\r\n const hashArray = Array.from(new Uint8Array(hashBuffer));\r\n\r\n switch (enc) {\r\n case Encoding.Base64:\r\n return base64.encode(String.fromCharCode.apply(null, hashArray));\r\n case Encoding.Base64Url:\r\n return base64.url_encode(String.fromCharCode.apply(null, hashArray));\r\n case Encoding.Hex:\r\n default:\r\n return hashArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\r\n }\r\n }\r\n\r\n // native crypto lib not available, use Crypto-JS instead\r\n switch (enc) {\r\n case Encoding.Base64:\r\n return cryptoJsSHA256(buffer).toString(cryptoJsEnc.Base64);\r\n case Encoding.Base64Url:\r\n return cryptoJsSHA256(buffer).toString(cryptoJsEnc.Base64url);\r\n case Encoding.Hex:\r\n default:\r\n return cryptoJsSHA256(buffer).toString(cryptoJsEnc.Hex);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a random set of encoded values.\r\n *\r\n * @param size\r\n * The number of values to return in the decoded string.\r\n *\r\n * @param enc\r\n * The output encoding; optional. The default is {@link crypt.Encoding.Hex}.\r\n *\r\n * @returns\r\n * A random set of values, encoded as specified with the `enc` parameter.\r\n */\r\n export function random(size: number = 16, enc: Encoding = Encoding.Hex): string {\r\n if (\"crypto\" in window && \"getRandomValues\" in crypto) {\r\n const rand = Array.from(crypto.getRandomValues(new Uint8Array(size)));\r\n\r\n switch (enc) {\r\n case Encoding.Base64:\r\n return base64.encode(String.fromCharCode.apply(null, rand));\r\n case Encoding.Base64Url:\r\n return base64.url_encode(String.fromCharCode.apply(null, rand));\r\n case Encoding.Hex:\r\n default:\r\n return rand.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\r\n }\r\n }\r\n\r\n // native crypto lib not available, use Crypto-JS instead\r\n const rand = CryptoJS.lib.WordArray.random(size);\r\n\r\n switch (enc) {\r\n case Encoding.Base64:\r\n return rand.toString(cryptoJsEnc.Base64);\r\n case Encoding.Base64Url:\r\n return rand.toString(cryptoJsEnc.Base64url);\r\n case Encoding.Hex:\r\n default:\r\n return rand.toString(cryptoJsEnc.Hex);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Unique identifier (UUID/GUID) utilities.\r\n */\r\n export namespace uuid {\r\n /**\r\n * Creates a new globally unique identifier based on\r\n * {@link https://tools.ietf.org/html/rfc4122#section-4.2.2 | section 4.2.2 Generation Details of RFC 4122}\r\n *\r\n * @returns\r\n * A string that contains a unique identifier.\r\n */\r\n export function create(): string {\r\n let d: number = Date.now();\r\n // This is based on UUID generation logic\r\n const uuid: string = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c: string) {\r\n /* tslint:disable:no-bitwise */\r\n const r: number = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\r\n /* tslint:enable:no-bitwise */\r\n });\r\n\r\n return uuid;\r\n }\r\n }\r\n\r\n /**\r\n * Url utilities.\r\n */\r\n export namespace url {\r\n\r\n /**\r\n * Creates an new {@link https://developer.mozilla.org/en-US/docs/Web/API/URL | URL} from the\r\n * specified baseUrl and paths. Useful for when multiple paths need to be properly concatenated\r\n * to form a valid url.\r\n *\r\n * @param baseUrl\r\n * The root url to append all paths to.\r\n *\r\n * @param paths\r\n * On or more paths to append to baseUrl.\r\n */\r\n export function create(baseUrl: string, ...paths: string[]): URL {\r\n let urlPath: string = \"\";\r\n\r\n for (const p of paths) {\r\n if (p.length === 0) {\r\n continue;\r\n }\r\n\r\n if (urlPath.length > 0) {\r\n urlPath += \"/\";\r\n }\r\n\r\n urlPath += p;\r\n }\r\n\r\n urlPath = normalizeUrlPath(urlPath);\r\n\r\n let url: URL = new URL(baseUrl);\r\n let pathname: string = url.pathname;\r\n\r\n if (pathname.endsWith(\"/\")) {\r\n pathname = pathname.substr(0, pathname.length - 1);\r\n }\r\n\r\n if (urlPath.length > 0) {\r\n pathname += \"/\" + urlPath;\r\n }\r\n\r\n url.pathname = pathname;\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Normalizes a url path so that all separators are the same (e.g. either all `/` or all `\\`).\r\n *\r\n * @param urlPath\r\n * The url path to normalize.\r\n *\r\n * @returns\r\n * If normalization occurred, the normalized url; otherwise, the original url.\r\n */\r\n export function normalizeUrlPath(urlPath: string): string {\r\n let result: string = urlPath;\r\n\r\n // switch separators '\\' -> '/'\r\n if (result.indexOf(\"\\\\\") !== -1) {\r\n result = result.replace(/[\\\\]+/g, \"/\");\r\n }\r\n\r\n // remove prefix/suffix and dups\r\n if (result.indexOf(\"/\") !== -1) {\r\n const paths: string[] = result.split(\"/\");\r\n result = \"\";\r\n\r\n for (const p of paths) {\r\n if (p.length > 0) {\r\n\r\n if (result.length > 0) {\r\n result += \"/\";\r\n }\r\n\r\n result += p;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * DOM utilities.\r\n */\r\n export namespace dom {\r\n /**\r\n * Determines which an element can go fullscreen under the current browser.\r\n *\r\n * @param element\r\n * Element that wants to go fullscreen.\r\n *\r\n * @returns\r\n * Boolean indicating whether or not the element can go fullscreen.\r\n */\r\n export function supportsRequestFullscreen(element: HTMLElement): boolean {\r\n return (\r\n (document.fullscreenEnabled && element.requestFullscreen) ||\r\n ((document as any).webkitFullscreenEnabled && (element as any).webkitRequestFullscreen)\r\n );\r\n }\r\n\r\n /**\r\n * Requests an element to be fullscreen\r\n *\r\n * @param element\r\n * Element that will be made fullscreen, if possible.\r\n */\r\n export function requestFullscreen(element: HTMLElement): Promise {\r\n if (!supportsRequestFullscreen(element)) {\r\n throw new Error(\"Fullscreen not supported\");\r\n }\r\n if (element.requestFullscreen) {\r\n return element.requestFullscreen();\r\n } else if ((element as any).webkitRequestFullscreen) {\r\n return (element as any).webkitRequestFullscreen();\r\n } else {\r\n throw new Error(\"No available method to enter fullscreen\");\r\n }\r\n }\r\n\r\n function oncontextmenu(event: MouseEvent): void {\r\n event.preventDefault();\r\n }\r\n\r\n export function disableContextMenu() {\r\n document.addEventListener(\"contextmenu\", oncontextmenu);\r\n }\r\n\r\n export function restoreContextMenu() {\r\n document.removeEventListener(\"contextmenu\", oncontextmenu);\r\n }\r\n\r\n function onkeydown(event: KeyboardEvent): void {\r\n if ((event.code === \"KeyI\" && event.ctrlKey && event.shiftKey)\r\n || (event.code === \"KeyJ\" && event.ctrlKey && event.shiftKey)\r\n || (event.code === \"KeyU\" && event.ctrlKey)\r\n || (event.code === \"F12\")\r\n || (event.code === \"KeyC\" && event.shiftKey && event.metaKey)\r\n || (event.code === \"KeyI\" && event.altKey && event.metaKey)\r\n || (event.code === \"KeyJ\" && event.altKey && event.metaKey)\r\n || (event.code === \"KeyU\" && event.altKey && event.metaKey)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n export function disableDevTools() {\r\n window.addEventListener(\"keydown\", onkeydown);\r\n }\r\n\r\n export function restoreDevTools() {\r\n window.removeEventListener(\"keydown\", onkeydown);\r\n }\r\n\r\n /**\r\n * Takes an path to a stylesheet and adds it to the webpage\r\n *\r\n * @param cssFilePath\r\n * Stylesheet URL\r\n * @param id\r\n * Optional id to the stylesheet link element to help avoid duplication\r\n */\r\n export function applyStylesheet(cssFilePath: string, id?: string) {\r\n if (id && document.getElementById(id)) {\r\n return;\r\n }\r\n let css = document.createElement(\"link\");\r\n css.type = \"text/css\";\r\n css.rel = \"stylesheet\";\r\n css.href = cssFilePath;\r\n if (id) {\r\n css.id = id;\r\n }\r\n document.head.appendChild(css);\r\n }\r\n }\r\n\r\n /**\r\n * String utilities.\r\n */\r\n export namespace string {\r\n\r\n /**\r\n * Calculates the size of the string, in bytes, as utf8.\r\n *\r\n * @param me\r\n * The string to use for calculating the byte length.\r\n *\r\n * @returns\r\n * The size of the string, in bytes.\r\n */\r\n export function size(me: string): number {\r\n if (!me) {\r\n return 0;\r\n }\r\n\r\n // https://stackoverflow.com/questions/5515869/string-length-in-bytes-in-javascript\r\n\r\n if (typeof TextEncoder !== \"undefined\") {\r\n return (new TextEncoder().encode(me)).byteLength;\r\n }\r\n\r\n // the initial size will be either 1 or 2 per character, e.g. js strings\r\n // are UTF-16, so a single 4 byte char will be encoded as 2 16-bit chars\r\n // and thus the `length` of that single 4 byte char string will be 2.\r\n let sz: number = me.length;\r\n\r\n for (let i: number = me.length - 1; i >= 0; i--) {\r\n const code: number = me.charCodeAt(i);\r\n\r\n if (code >= 0x0080 && code < 0x0800) {\r\n sz++;\r\n } else if (code >= 0x0800 && code <= 0xFFFF) {\r\n sz += 2;\r\n }\r\n\r\n // trailing surrogate\r\n if (code >= 0xDC00 && code <= 0XDFFF) {\r\n i--;\r\n }\r\n }\r\n\r\n return sz;\r\n }\r\n\r\n /**\r\n * Tests whether a string is equal to another string.\r\n *\r\n * @param me\r\n * The first string to compare with.\r\n *\r\n * @param val\r\n * The second string to compare with.\r\n *\r\n * @param caseSensitive\r\n * True to perform case-sensitive comparison; otherwise, false to perform case-insensitive comparison.\r\n *\r\n * @returns\r\n * True if the test string is equal to the specified value.\r\n */\r\n export function equals(me: string, val: string, caseSensitive: boolean = false): boolean {\r\n if (!me || caseSensitive) {\r\n return (me === val);\r\n }\r\n\r\n return (me.toLocaleLowerCase() === val.toLocaleLowerCase());\r\n }\r\n\r\n /**\r\n * Tests whether a string contains with another string.\r\n *\r\n * @param me\r\n * The string to test.\r\n *\r\n * @param val\r\n * The string to check within the test string.\r\n *\r\n * @param caseSensitive\r\n * True to perform case-sensitive comparison; otherwise, false to perform case-insensitive comparison.\r\n *\r\n * @returns\r\n * True if the test string contains the specified value.\r\n */\r\n export function contains(me: string, val: string, caseSensitive: boolean = false): boolean {\r\n if (!me) {\r\n return false;\r\n }\r\n\r\n if (caseSensitive) {\r\n return me.includes(val);\r\n }\r\n\r\n return me.toLocaleLowerCase().includes(val.toLocaleLowerCase());\r\n }\r\n\r\n /**\r\n * Tests whether a string starts with another string.\r\n *\r\n * @param me\r\n * The string to test.\r\n *\r\n * @param val\r\n * The string to compare against the start of the test string.\r\n *\r\n * @param caseSensitive\r\n * True to perform case-sensitive comparison; otherwise, false to perform case-insensitive comparison.\r\n *\r\n * @returns\r\n * True if the test string starts with specified value.\r\n */\r\n export function startsWith(me: string, val: string, caseSensitive: boolean = false): boolean {\r\n if (!me) {\r\n return false;\r\n }\r\n\r\n if (caseSensitive) {\r\n return me.startsWith(val);\r\n }\r\n\r\n return me.toLocaleLowerCase().startsWith(val.toLocaleLowerCase());\r\n }\r\n\r\n /**\r\n * Tests whether a string ends with another string.\r\n *\r\n * @param me\r\n * The string to test.\r\n *\r\n * @param val\r\n * The string to compare against the end of the test string.\r\n *\r\n * @param caseSensitive\r\n * True to perform case-sensitive comparison; otherwise, false to perform case-insensitive comparison.\r\n *\r\n * @returns\r\n * True if the test string ends with specified value.\r\n */\r\n export function endsWith(me: string, val: string, caseSensitive: boolean = false): boolean {\r\n if (!me) {\r\n return false;\r\n }\r\n\r\n if (caseSensitive) {\r\n return me.endsWith(val);\r\n }\r\n\r\n return me.toLocaleLowerCase().endsWith(val.toLocaleLowerCase());\r\n }\r\n\r\n /**\r\n * Creates a new string from an array of utf8 characters.\r\n *\r\n * @param buffer\r\n * An array of utf8 characters.\r\n *\r\n * @returns\r\n * A new string.\r\n */\r\n export function fromArrayBuffer(buffer: ArrayBuffer): string {\r\n if (typeof TextDecoder !== \"undefined\") {\r\n return new TextDecoder().decode(buffer);\r\n }\r\n\r\n const charBuffer: Uint8Array = new Uint8Array(buffer);\r\n const arr: number[] = Array.from(charBuffer) as number[];\r\n const str: string = String.fromCharCode.apply(null, arr);\r\n\r\n return str;\r\n }\r\n\r\n /**\r\n * Creates a new UTF-8 ArrayBuffer from a string.\r\n *\r\n * @param text\r\n * A string\r\n *\r\n * @returns\r\n * An array of utf8 characters.\r\n */\r\n export function toArrayBuffer(text: string): ArrayBuffer {\r\n let uint8 = new TextEncoder().encode(text);\r\n let arrayBuffer = new ArrayBuffer(uint8.byteLength);\r\n let byteView = new DataView(arrayBuffer);\r\n for (let i = 0; i < uint8.byteLength; i++) {\r\n byteView.setUint8(i, uint8[i]);\r\n }\r\n return arrayBuffer;\r\n }\r\n\r\n /**\r\n * Converts an array of any data to a string. Can be used for logging\r\n * arbitrary data to a file.\r\n *\r\n * @param args\r\n * An array of arbitrary data\r\n *\r\n * @returns\r\n * Stringified data\r\n */\r\n export function stringify(args: any[]) {\r\n let logText = \"\";\r\n const tabChar = \"\\t\";\r\n for (const log of args) {\r\n try {\r\n logText += typeof log === \"string\" ? log : JSON.stringify(log, null, tabChar);\r\n logText += \" \";\r\n } catch (e) { }\r\n }\r\n\r\n return logText;\r\n }\r\n\r\n /**\r\n * Converts a decimal number into a hexidecimal string representation.\r\n *\r\n * @param me\r\n * The number to convert.\r\n *\r\n * @param padding\r\n * The number of leading zeros to add to the hexidecimal string.\r\n *\r\n * @returns\r\n * A new string.\r\n */\r\n export function hex(me: number, padding: number = 0, unsigned: boolean = true): string {\r\n // treat the number as unsigned, e.g. if we want the output for -1041121119\r\n // to be 0xC1F1C0A1 instead of 0x-3E0E3F5F, we must convert\r\n if (unsigned) {\r\n me >>>= 0;\r\n }\r\n return `0x${me.toString(16).toUpperCase().padStart(padding, \"0\")}`;\r\n }\r\n\r\n /**\r\n * Safely removes leading and trailing whitespace from a string. No error is thrown when the specified\r\n * string is null or undefined.\r\n *\r\n * @param me\r\n * The string to trim.\r\n *\r\n * @returns\r\n * The original string with leading and trailing whitespace characters removed or, the original string\r\n * as-is if it is null or undefined.\r\n */\r\n export function trim(me: string): string {\r\n if (!me) {\r\n return me;\r\n }\r\n\r\n return me.trim();\r\n }\r\n }\r\n\r\n /**\r\n * Math utilities.\r\n */\r\n export namespace math {\r\n /**\r\n * Tests whether two decimal numbers are close enough to be considered equal\r\n *\r\n * @param v1\r\n * First value\r\n *\r\n * @param v2\r\n * Second value\r\n *\r\n * @param precision\r\n * Optional precision value\r\n *\r\n * @returns\r\n * True if they are within the given precision, false otherwise\r\n */\r\n export function floatEquals(v1: number, v2: number, precision: number = 0.001): boolean {\r\n return (Math.abs(v1 - v2) <= precision)\r\n };\r\n\r\n /**\r\n * Returns the modulo of two numbers, always giving a positive result. For example, mod(-1, 12) === 11\r\n *\r\n * @param v1\r\n * Dividend\r\n *\r\n * @param v2\r\n * Divisor\r\n *\r\n * @returns\r\n * The modulus of the two arguments.\r\n */\r\n export function mod(v1: number, v2: number): number {\r\n return ((v1 % v2) + v2) % v2;\r\n };\r\n }\r\n\r\n /**\r\n * Date utilities.\r\n */\r\n export namespace date {\r\n export enum DayOfWeek {\r\n Monday = \"Mon\",\r\n Tuesday = \"Tue\",\r\n Wednesday = \"Wed\",\r\n Thursday = \"Thu\",\r\n Friday = \"Fri\",\r\n Saturday = \"Sat\",\r\n Sunday = \"Sun\"\r\n }\r\n\r\n /** @private **/\r\n const DAYS: string[] = [\r\n DayOfWeek.Sunday,\r\n DayOfWeek.Monday,\r\n DayOfWeek.Tuesday,\r\n DayOfWeek.Wednesday,\r\n DayOfWeek.Thursday,\r\n DayOfWeek.Friday,\r\n DayOfWeek.Saturday\r\n ]\r\n\r\n /**\r\n * Takes a day of the week, and returns the date of the most\r\n * recent occurance of that day, non-inclusive of today. The result\r\n * is between 1 and 7 days ago.\r\n *\r\n * @param day\r\n * Day of the week to look for. {@link DayOfWeek}\r\n *\r\n * @param date\r\n * Optional date to start from, defaults to now\r\n *\r\n * @returns\r\n * Date object representing the most recent occurance of this day.\r\n */\r\n export function getLastDay(day: DayOfWeek | string, date = new Date()) {\r\n if (!DAYS.includes(day)) {\r\n throw new Error(\"Invalid day provided. Must be one of \" + DAYS);\r\n }\r\n\r\n const lastDate: number = date.getDate() - ((date.getDay() + DAYS.length - DAYS.indexOf(day)) % 7 || 7);\r\n return new Date(date.getFullYear(), date.getMonth(), lastDate);\r\n }\r\n\r\n /**\r\n * Takes a day of the week, and returns the date of the next occurence of\r\n * that day, inclusive of today.\r\n *\r\n * @param day\r\n * Day of the week to look for. {@link DayOfWeek}\r\n *\r\n * @param date\r\n * Optional date to start from, defaults to now\r\n *\r\n * @returns\r\n * Date object representing the next occurence of day.\r\n */\r\n export function getNextDay(day: DayOfWeek | string, date = new Date()) {\r\n if (!DAYS.includes(day)) {\r\n throw new Error(\"Invalid day provided. Must be one of \" + DAYS);\r\n }\r\n\r\n const nextDate: number = date.getDate() + (DAYS.indexOf(day) - date.getDay());\r\n return new Date(date.getFullYear(), date.getMonth(), nextDate);\r\n }\r\n\r\n /**\r\n * Converts a date into a UTC date.\r\n *\r\n * @param date\r\n * The date to convert.\r\n *\r\n * @returns\r\n * A UTC date.\r\n */\r\n export function toUTC(date: Date): Date {\r\n return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());\r\n }\r\n\r\n /**\r\n * Adds two dates\r\n *\r\n * @param firstDateMs\r\n * First date in number of milliseconds since 0 (i.e. Thu, 01 Jan 1970 00:00:00 GMT)\r\n *\r\n * @param secondDateMs\r\n * Second date in number of milliseconds since 0 (i.e. Thu, 01 Jan 1970 00:00:00 GMT)\r\n *\r\n * @returns\r\n * Sum of the two dates as a Date object\r\n */\r\n export function add(firstDateMs: number, secondDateMs: number): Date {\r\n return new Date(firstDateMs + secondDateMs);\r\n }\r\n }\r\n\r\n /**\r\n * Base64 utilities.\r\n */\r\n export namespace base64 {\r\n\r\n /**\r\n * Decodes a base64 encoded string.\r\n *\r\n * @param str\r\n * The string to decode.\r\n *\r\n * @returns\r\n * The decoded string.\r\n */\r\n export function decode(str: string): string {\r\n return atob(str);\r\n }\r\n\r\n\r\n /**\r\n * Encodes a string into a base64 string.\r\n *\r\n * @param str\r\n * The string to encode.\r\n *\r\n * @returns\r\n * The encoded string.\r\n */\r\n export function encode(str: string): string {\r\n return btoa(str);\r\n }\r\n\r\n /**\r\n * Decodes a url base64 encoded string back into it's original form.\r\n *\r\n * @param str\r\n * The string to be encoded.\r\n *\r\n * @returns\r\n * The decoded string.\r\n *\r\n */\r\n export function url_decode(str: string): string {\r\n let padding: number = (4 - str.length % 4) % 4;\r\n\r\n while (padding-- > 0) {\r\n str += \"=\";\r\n }\r\n\r\n str = str.replace(/\\-/g, \"+\");\r\n str = str.replace(/\\_/g, \"/\");\r\n\r\n return decode(str);\r\n }\r\n\r\n /**\r\n * Encodes a string to a base64 encoded string capable of being transmitting\r\n * in a url (e.g. as a query parameter)./\r\n *\r\n * All padding characters ```=``` are removed, the ```+``` character is replaced\r\n * with a ```-``` character and the ```/``` character is replaced with the ```_```\r\n * character.\r\n *\r\n * @param str\r\n * The string to be encoded.\r\n *\r\n * @returns\r\n * The encoded string.\r\n */\r\n export function url_encode(str: string): string {\r\n let result: string = encode(str);\r\n result = result.replace(/\\=/g, \"\");\r\n result = result.replace(/\\+/g, \"-\");\r\n result = result.replace(/\\//g, \"_\");\r\n return result;\r\n }\r\n }\r\n\r\n export namespace array {\r\n /**\r\n * Finds an array element matching the predicate.\r\n *\r\n * @param arr\r\n * The array to look in\r\n *\r\n * @param predicate\r\n * The predicate function used for matching, or an instance to match directly.\r\n *\r\n * @returns\r\n * The first matching element if any, else undefined\r\n */\r\n export function find(arr: Array, predicate: (T | ((elem: T) => boolean))): Undefined {\r\n if (!Array.isArray(arr)) {\r\n return undefined;\r\n }\r\n if (typeof predicate === \"function\") {\r\n for (const elem of arr) {\r\n if ((predicate as ((elem: T) => boolean))(elem)) {\r\n return elem;\r\n }\r\n }\r\n } else {\r\n for (const elem of arr) {\r\n if (elem === predicate) {\r\n return elem;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n }\r\n\r\n export namespace object {\r\n\r\n /**\r\n * Check if a given field exists on the object.\r\n *\r\n * @param obj\r\n * The object to look in.\r\n *\r\n * @param field\r\n * The field to look for.\r\n *\r\n * @returns\r\n * True, if the field exists in the object; otherwise, false.\r\n */\r\n export function exists(obj: any, field: string): boolean {\r\n return (obj && field && field in obj);\r\n }\r\n\r\n /**\r\n * Makes a deep copy of the specified object.\r\n *\r\n * @param obj\r\n * The object to be cloned.\r\n *\r\n * @returns\r\n * A new object that is a deep copy of the original.\r\n */\r\n export function clone(obj: any): any {\r\n if (obj === null || typeof obj !== \"object\") {\r\n return obj;\r\n }\r\n\r\n if (obj instanceof Array) {\r\n const arrCopy = [];\r\n for (const el of obj) {\r\n arrCopy.push(clone(el));\r\n }\r\n\r\n return arrCopy;\r\n }\r\n\r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime());\r\n }\r\n\r\n if (obj instanceof Object) {\r\n const objCopy: Record = {};\r\n for (const p in obj) {\r\n if (obj.hasOwnProperty(p)) {\r\n objCopy[p] = clone(obj[p]);\r\n }\r\n }\r\n return objCopy;\r\n }\r\n\r\n throw new Error(\"The object cannot be cloned. Unsupported type found.\");\r\n }\r\n\r\n /**\r\n * Takes an object and dereferences a path from the given dot notation. For example:\r\n *\r\n * const obj = {a: 1, b: 2, c: {x: \"foo\", y: \"bar\"}}\r\n * dereference(obj, \"a\"); // 1\r\n * dereference(obj, \"c.x\"); // \"foo\"\r\n *\r\n * @param obj\r\n * The object to look up values from\r\n * @param path\r\n * The path to the desired property given in dot notation\r\n *\r\n * @returns\r\n * The value found at the given path. Returns undefined if the lookup fails\r\n */\r\n export function dereference(obj: any, path: string): any {\r\n return path.split(\".\").reduce((o, i) => (o || {})[i], obj);\r\n }\r\n\r\n /**\r\n * Checks to see if a value is an object\r\n *\r\n * @param value\r\n * The value to be checked\r\n *\r\n * @returns\r\n * True if the value is an object\r\n */\r\n export function isObject(value: any) {\r\n return (typeof value === \"object\" && value !== null);\r\n }\r\n\r\n /**\r\n * Deep merge multiple objects.\r\n *\r\n * @param objects\r\n * One or more objects to deep merge\r\n */\r\n export const deepmerge = (\r\n ...objects: T\r\n ): TUnionToIntersection =>\r\n objects.reduce((res, cur) => {\r\n Object.keys(cur).forEach((k) => {\r\n if (Array.isArray(res[k]) && Array.isArray(cur[k])) {\r\n res[k] = Array.from(new Set(res[k].concat(cur[k])));\r\n } else if (Utils.object.isObject(res[k]) && Utils.object.isObject(cur[k])) {\r\n res[k] = deepmerge(res[k], cur[k]);\r\n } else {\r\n res[k] = cur[k];\r\n }\r\n });\r\n\r\n return res;\r\n }, {}) as any;\r\n\r\n /**\r\n * Similar to Array.map()\r\n */\r\n export function map(obj: any, fn: any) {\r\n return Object.assign({}, ...Object.entries(obj).map(([k, v]) => ({[k]: fn(v)})));\r\n }\r\n\r\n /**\r\n * Masks the value of one or more specified fields.\r\n *\r\n * @param data\r\n * The data object that contains one of the keys to whose value should be masked.\r\n *\r\n * @param props\r\n * One or more property keys whose value should be masked\r\n *\r\n * @return\r\n * A new object with the values for the specified keys replaced with a mask.\r\n */\r\n export function maskPropertyValue(data: any, props: string[]): any {\r\n const mask = \"***\";\r\n const newDataObj = { ... data };\r\n\r\n for (const key in newDataObj) {\r\n if (props.includes(key)) {\r\n newDataObj[key] = mask;\r\n continue;\r\n }\r\n\r\n if (typeof newDataObj[key] === \"object\" && newDataObj[key] !== null) {\r\n newDataObj[key] = maskPropertyValue(newDataObj[key], props);\r\n }\r\n }\r\n\r\n return newDataObj;\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2021-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * The following are GFN Client SDK errors in our Unified Error Code format (https://confluence.nvidia.com/display/GNCE/New+Schema+Format).\r\n *\r\n * +----------+----------+---------+------------+\r\n * | 31 -- 28 | 27 -- 24 | 23 - 16 | 15 ----- 0 |\r\n * +----------+----------+---------+------------+\r\n * | SEVERITY | REP SVC | ORIGIN | ERROR CODE |\r\n * +----------+----------+---------+------------+\r\n *\r\n * SEVERITY\r\n * ----------------------------------------------\r\n * WARNING: 0000 (0x0)\r\n * ERROR: 1000 (0x8)\r\n * USER VISIBLE: 0100 (0x4)\r\n * USER INITIATED: 0010 (0x2)\r\n * RESERVED: 0001 (0x1)\r\n *\r\n *\r\n * For GFN Client SDK errors, use the following bits:\r\n * REP SVC: 0\r\n * ORIGIN: FA\r\n * ERROR CODE: Byte 3 is the API where the error occurred, otherwise\r\n * the remaining bits are open for defining new errors\r\n *\r\n *\r\n * API ERROR CATEGORY\r\n * ----------------------------------------------\r\n * 0x0 - generic / core / common / logging\r\n * 0x1 - catalog api\r\n * 0x2 - configuration api\r\n * 0x3 - device api\r\n * 0x4 - platform api\r\n * 0x5 - entitlement api\r\n * 0x6 - idm api\r\n * 0x7 - server api\r\n * 0x8 - storage api\r\n * 0x9 - streamer api\r\n * 0xA - network test api\r\n * 0xB - rest api\r\n * 0xC - streamer ui api\r\n * 0xD - overrides tool api\r\n *\r\n * Example:\r\n * 0xC0FA8123\r\n * -> User Visible Error\r\n * -> GFN Client SDK\r\n * -> Streamer API\r\n * -> Error: 123\r\n *\r\n *\r\n * @internal\r\n */\r\n\r\nenum ErrorOrigin {\r\n ClientSDK = 0xFA\r\n}\r\n\r\nenum ErrorBits {\r\n Origin = (ErrorOrigin.ClientSDK << 16), // GFN Client SDK\r\n Warning = (0x00 << 24) | Origin,\r\n Error = (0x80 << 24) | Origin,\r\n UserVisibleWarning = (0x40 << 24) | Origin,\r\n UserVisibleError = (0xC0 << 24) | Origin,\r\n}\r\n\r\nenum CategoryId {\r\n Generic = 0x0,\r\n Catalog = 0x1,\r\n Configuration = 0x2,\r\n Device = 0x3,\r\n Platform = 0x4,\r\n Entitlement = 0x5,\r\n Auth = 0x6,\r\n Server = 0x7,\r\n Storage = 0x8,\r\n Streamer = 0x9,\r\n NetworkTest = 0xA,\r\n Rest = 0xB,\r\n StreamerUI = 0xC,\r\n OverridesTool = 0xD,\r\n Telemetry = 0xE,\r\n}\r\n\r\nenum CategoryBits {\r\n Generic = CategoryId.Generic << 12,\r\n Catalog = CategoryId.Catalog << 12,\r\n Configuration = CategoryId.Configuration << 12,\r\n Device = CategoryId.Device << 12,\r\n Platform = CategoryId.Platform << 12,\r\n Entitlement = CategoryId.Entitlement << 12,\r\n Auth = CategoryId.Auth << 12,\r\n Server = CategoryId.Server << 12,\r\n Storage = CategoryId.Storage << 12,\r\n Streamer = CategoryId.Streamer << 12,\r\n NetworkTest = CategoryId.NetworkTest << 12,\r\n Rest = CategoryId.Rest << 12,\r\n StreamerUI = CategoryId.StreamerUI << 12,\r\n OverridesTool = CategoryId.OverridesTool << 12,\r\n Telemetry = CategoryId.Telemetry << 12,\r\n}\r\n\r\n// NOTE: if it makes sense to do so, be sure to add a message to\r\n// the message table below the enum.\r\n\r\n/**\r\n * Represents a well-defined error code that can occur within the SDK.\r\n */\r\nexport enum APIErrorCode {\r\n /**\r\n * No error; the result was a success.\r\n */\r\n Success = 0,\r\n\r\n\r\n // ===============================================================\r\n // GENERIC / COMMON ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n GenericError = ErrorBits.Error | CategoryBits.Generic,\r\n\r\n /**\r\n * The error is not known or an API call failed with an unexpected error.\r\n */\r\n Unknown = GenericError | 1,\r\n\r\n /**\r\n * The operation has been cancelled.\r\n */\r\n Cancelled = GenericError | 2,\r\n\r\n /**\r\n * There was a network error.\r\n */\r\n Network = GenericError | 3,\r\n\r\n /**\r\n * There was an error while executing an http request.\r\n */\r\n Http = GenericError | 4,\r\n\r\n /**\r\n * A required parameter is missing.\r\n */\r\n MissingParameter = GenericError | 5,\r\n\r\n /**\r\n * A required parameter is invalid.\r\n */\r\n InvalidParameter = GenericError | 6,\r\n\r\n /**\r\n * The state is not valid for the current operation.\r\n */\r\n InvalidState = GenericError | 7,\r\n\r\n /**\r\n * The operation or feature is not supported.\r\n */\r\n NotSupported = GenericError | 8,\r\n\r\n /**\r\n * The operation or feature has not yet been implemented.\r\n */\r\n NotImplemented = GenericError | 9,\r\n\r\n // use specific error codes for vpcId, having a missing or invalid vpcId\r\n // is not all that uncommon and being able to know this by an error\r\n // code will speed up partner issues.\r\n\r\n /**\r\n * The VpcID is missing. The VpcID must be provided to the API being called or set via {@link Settings.vpcId | GFN.settings.vpcId}\r\n */\r\n MissingVpcId = GenericError | 10,\r\n\r\n /**\r\n * The VpcId provided is not valid.\r\n */\r\n InvalidVpcId = GenericError | 11,\r\n\r\n /**\r\n * The translation data failed to load.\r\n */\r\n CannotLoadTranslationData = GenericError | 12,\r\n\r\n /**\r\n * The version provided is not valid.\r\n */\r\n InvalidVersion = GenericError | 13,\r\n\r\n\r\n // ===============================================================\r\n // CATALOG ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n CatalogError = ErrorBits.Error | CategoryBits.Catalog,\r\n\r\n /**\r\n * No layout list was found.\r\n */\r\n MissingLayoutList = CatalogError | 1,\r\n\r\n\r\n // ===============================================================\r\n // CONFIGURATION ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n ConfigurationError = ErrorBits.Error | CategoryBits.Configuration,\r\n\r\n /**\r\n * The Starfleet configuration is not available.\r\n */\r\n StarfleetConfigurationUnavailable = ConfigurationError | 1,\r\n\r\n /**\r\n * The internal configuration cannot be overridden.\r\n */\r\n AttempedInternalConfigurationOverride = ConfigurationError | 2,\r\n\r\n\r\n // ===============================================================\r\n // DEVICE ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n DeviceError = ErrorBits.Error | CategoryBits.Device,\r\n\r\n /**\r\n * The device is not supported.\r\n */\r\n DeviceNotSupported = DeviceError | 1,\r\n\r\n /**\r\n * There was an error while invoking the callback.\r\n */\r\n InvokeCallbackFailed = DeviceError | 2,\r\n\r\n /**\r\n * The native device info is not valid.\r\n */\r\n InvalidDeviceInfo = DeviceError | 3,\r\n\r\n /**\r\n * The native device information could not be generated.\r\n */\r\n CannotCreateDeviceInfo = DeviceError | 4,\r\n\r\n /**\r\n * The feature is not supported.\r\n */\r\n FeatureNotSupported = DeviceError | 5,\r\n\r\n\r\n // ===============================================================\r\n // PLATFORM ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n PlatformError = ErrorBits.Error | CategoryBits.Platform,\r\n\r\n /**\r\n * The runtime host is not supported for the platform.\r\n */\r\n RuntimeHostNotSupported = PlatformError | 1,\r\n\r\n /**\r\n * The GFN Client SDK initialization failed.\r\n */\r\n SDKInitializationFailed = PlatformError | 2,\r\n\r\n /**\r\n * The GFN Client SDK has not yet been initialized. The {@link API.initialize | GFN.initialize} call must first be made before using the SDK.\r\n */\r\n SDKIsNotInitialized = PlatformError | 3,\r\n\r\n /**\r\n * The {@link Settings} must be provided.\r\n */\r\n MissingSettings = PlatformError | 4,\r\n\r\n /**\r\n * The runtime version is too old for the client. For example, using a 1.x runtime with a 2.x client is not supported.\r\n */\r\n RuntimVersionOld = PlatformError | 5,\r\n\r\n /**\r\n * The runtime version is too new for the client. For example, using a 2.x runtime with a 1.x client is not supported.\r\n */\r\n RuntimVersionNew = PlatformError | 6,\r\n\r\n\r\n // ===============================================================\r\n // ENTITLEMENT ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n EntitlementError = ErrorBits.Error | CategoryBits.Entitlement,\r\n\r\n /**\r\n * The user subscription is not valid.\r\n */\r\n InvalidSubscription = EntitlementError | 1,\r\n\r\n /**\r\n * The application was not found.\r\n */\r\n AppNotFound = EntitlementError | 2,\r\n\r\n\r\n // ===============================================================\r\n // AUTH ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n AuthError = ErrorBits.Error | CategoryBits.Auth,\r\n\r\n /**\r\n * The access token could not be found.\r\n */\r\n MissingToken = AuthError | 1,\r\n\r\n /**\r\n * Unable to refresh access token when no user has been authorized.\r\n */\r\n RefreshTokenWithNoUser = AuthError | 2,\r\n\r\n /**\r\n * Unable to refresh access token when no user has been authorized.\r\n */\r\n RefreshTokenWithNoClientToken = AuthError | 3,\r\n\r\n /**\r\n * The device authorization was cancelled.\r\n */\r\n DeviceAuthorizationCancelled = AuthError | 4,\r\n\r\n /**\r\n * The device authorization failed.\r\n */\r\n DeviceAuthorizationFailed = AuthError | 5,\r\n\r\n /**\r\n * Unable to create a login window.\r\n */\r\n CannotCreateLoginWindow = AuthError | 6,\r\n\r\n /**\r\n * The main application window has been closed.\r\n */\r\n MainWindowClosed = AuthError | 7,\r\n\r\n /**\r\n * The token is not valid.\r\n */\r\n InvalidToken = AuthError | 8,\r\n\r\n /**\r\n * The login was cancelled.\r\n */\r\n LoginCancelled = AuthError | 9,\r\n\r\n /**\r\n * The login failed.\r\n */\r\n LoginFailed = AuthError | 10,\r\n\r\n /**\r\n * The result from the authorization flow could not be found.\r\n */\r\n MissingAuthorizationResult = AuthError | 11,\r\n\r\n /**\r\n * The serialized user is malformed.\r\n */\r\n SerializedUserMalformed = AuthError | 12,\r\n\r\n /**\r\n * The user was not found in storage.\r\n */\r\n UserNotFoundInStorage = AuthError | 13,\r\n\r\n /**\r\n * The user endpoint could not be found.\r\n */\r\n UserEndpointNotFound = AuthError | 14,\r\n\r\n /**\r\n * The authorization state is not valid.\r\n */\r\n InvalidAuthState = AuthError | 15,\r\n\r\n /**\r\n * The user is not logged in.\r\n */\r\n UserNotLoggedIn = AuthError | 16,\r\n\r\n /**\r\n * The user is not authorized.\r\n */\r\n UserNotAuthorized = AuthError | 17,\r\n\r\n /**\r\n * The user account is not linked\r\n */\r\n UserAccountNotLinked = AuthError | 18,\r\n\r\n // ===============================================================\r\n // SERVER ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n ServerError = ErrorBits.Error | CategoryBits.Server,\r\n\r\n /**\r\n * The server information is not valid.\r\n */\r\n InvalidServerInfo = ServerError | 1,\r\n // don't include in error description table, this is only to add a code\r\n // when a response that returns a request status entity does not include\r\n // a unified error code - which should be an unlikely case.\r\n\r\n /**\r\n * The unified error code was missing from the response.\r\n */\r\n MissingUnifiedErrorCode = ServerError | 2,\r\n\r\n\r\n // ===============================================================\r\n // STORAGE ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n StorageError = ErrorBits.Error | CategoryBits.Storage,\r\n\r\n /**\r\n * There is not storage API available to use.\r\n */\r\n StorageUnavailable = StorageError | 1,\r\n\r\n\r\n // ===============================================================\r\n // STREAMER ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n StreamerError = ErrorBits.Error | CategoryBits.Streamer,\r\n\r\n /**\r\n * The intro player could be initialized.\r\n */\r\n CannotInitializeIntroPlayer = StreamerError | 1,\r\n\r\n /**\r\n * The intro animation could not be loaded.\r\n */\r\n CannotLoadIntroAnimation = StreamerError | 2,\r\n\r\n /**\r\n * The streaming session has not yet been setup.\r\n */\r\n NoStreamingSession = StreamerError | 3,\r\n\r\n /**\r\n * The streamer failed to setup a session.\r\n */\r\n StreamingSessionSetupFailed = StreamerError | 4,\r\n\r\n /**\r\n * An error occurred while trying to access the streamer DOM.\r\n */\r\n StreamerDOMError = StreamerError | 5,\r\n\r\n /**\r\n * Too many messages in a short period of time\r\n */\r\n MessageThrottled = StreamerError | 6,\r\n\r\n /**\r\n * The operation timed out while waiting for the streamer to stop.\r\n */\r\n WaitForStopTimeout = StreamerError | 7,\r\n\r\n\r\n // ===============================================================\r\n // NETWORK TEST ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n NetworkTestError = ErrorBits.Error | CategoryBits.NetworkTest,\r\n\r\n /**\r\n * The network test could not be run.\r\n */\r\n CannotRunNetworkTest = NetworkTestError | 1,\r\n\r\n\r\n // ===============================================================\r\n // REST ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n RestError = ErrorBits.Error | CategoryBits.Rest,\r\n\r\n /**\r\n * Could not request remote config.\r\n */\r\n RestErrorGetRemoteConfigError = RestError | 1,\r\n\r\n // ===============================================================\r\n // UI ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n UIError = ErrorBits.Error | CategoryBits.StreamerUI,\r\n\r\n /**\r\n * Could not find the data needed to create the UI.\r\n */\r\n UINoDataError = UIError | 1,\r\n\r\n\r\n // ===============================================================\r\n // OVERRIDE TOOL ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n OverridesError = ErrorBits.Error | CategoryBits.OverridesTool,\r\n\r\n /**\r\n * No parent override found.\r\n */\r\n OverridesNoParent = OverridesError | 1,\r\n\r\n /**\r\n * An error occured while acessing the DOM.\r\n */\r\n OverridesDOMError = OverridesError | 2,\r\n\r\n /**\r\n * There was a mismatch between the overrides data and the overrides schema.\r\n */\r\n OverridesSchemaError = OverridesError | 3,\r\n\r\n\r\n // ===============================================================\r\n // TELEMETRY ERRORS\r\n // ===============================================================\r\n /** @internal **/\r\n TelemetryError = ErrorBits.Error | CategoryBits.Telemetry,\r\n\r\n /**\r\n * There was an error with the feedback.\r\n */\r\n TelemetryFeedbackFailed = TelemetryError | 1,\r\n\r\n /**\r\n * The feedback request is invalid.\r\n */\r\n TelemetryFeedbackBadRequest = TelemetryError | 2,\r\n\r\n /**\r\n * The feedback JSON is too large.\r\n */\r\n TelemetryFeedbackJSONTooBig = TelemetryError | 3,\r\n\r\n /**\r\n * The feedback data is invalid.\r\n */\r\n TelemetryFeedbackInvalid = TelemetryError | 4,\r\n\r\n /**\r\n * The feedback identifier has already been used.\r\n */\r\n TelemetryFeedbackIdInUse = TelemetryError | 5,\r\n\r\n /**\r\n * The feedback identifier is invalid.\r\n */\r\n TelemetryFeedbackIdInvalid = TelemetryError | 6,\r\n\r\n /**\r\n * The feedback attachment was rejected.\r\n */\r\n TelemetryFeedbackAttachmentRejected = TelemetryError | 7,\r\n\r\n /**\r\n * The client id provided is unknown.\r\n */\r\n TelemetryFeedbackUnknownClientId = TelemetryError | 8,\r\n\r\n /**\r\n * The feedback upload detected an out-of-order frame.\r\n */\r\n TelemetryFeedbackNonSequentialFrame = TelemetryError | 9,\r\n\r\n /**\r\n * The feedback contains incorrect content.\r\n */\r\n TelemetryFeedbackWrongContent = TelemetryError | 10,\r\n\r\n /**\r\n * There was an error with the feedback server.\r\n */\r\n TelemetryFeedbackServerError = TelemetryError | 11,\r\n}\r\n\r\n/** @internal **/\r\nexport const APIErrorCodeMessageTable: Map = new Map([\r\n [APIErrorCode.Cancelled, \"The operation has been cancelled.\"],\r\n [APIErrorCode.Network, \"Network error.\"],\r\n [APIErrorCode.Http, \"HTTP error.\"],\r\n [APIErrorCode.MissingParameter, \"Parameter is missing.\"],\r\n [APIErrorCode.InvalidParameter, \"Parameter is invalid.\"],\r\n [APIErrorCode.NotSupported, \"Not supported.\"],\r\n [APIErrorCode.NotImplemented, \"Not implemented.\"],\r\n [APIErrorCode.MissingVpcId, \"The 'vpcId' is missing.\"],\r\n [APIErrorCode.InvalidVpcId, \"The 'vpcId' is invalid.\"],\r\n [APIErrorCode.CannotLoadTranslationData, \"Unable to load translation data.\"],\r\n [APIErrorCode.MissingLayoutList, \"Layout list not found.\"],\r\n [APIErrorCode.StarfleetConfigurationUnavailable, \"Authorization configuration is unavailable.\"],\r\n [APIErrorCode.AttempedInternalConfigurationOverride, \"Attempted override of internal configuration\"],\r\n [APIErrorCode.DeviceNotSupported, \"This device is not supported.\"],\r\n [APIErrorCode.InvokeCallbackFailed, \"The browser callback failed.\"],\r\n [APIErrorCode.InvalidDeviceInfo, \"The device information is invalid.\"],\r\n [APIErrorCode.CannotCreateDeviceInfo, \"Unable to get device information from the system.\"],\r\n [APIErrorCode.FeatureNotSupported, \"Feature is not supported for this device or platform.\"],\r\n [APIErrorCode.RuntimeHostNotSupported, \"The runtime host is not supported.\"],\r\n [APIErrorCode.SDKInitializationFailed, \"Failed to initialize the GFN Client SDK.\"],\r\n [APIErrorCode.SDKIsNotInitialized, \"The GFN Client SDK must first be initialized.\"],\r\n [APIErrorCode.MissingSettings, \"Must provide settings to initialize the GFN Client SDK.\"],\r\n [APIErrorCode.InvalidSubscription, \"The users subscription is invalid.\"],\r\n [APIErrorCode.AppNotFound, \"The application could not be found.\"],\r\n [APIErrorCode.MissingToken, \"The token is missing.\"],\r\n [APIErrorCode.RefreshTokenWithNoUser, \"Unable to refresh access token when no user has been authorized.\"],\r\n [APIErrorCode.RefreshTokenWithNoClientToken, \"Unable to refresh access token without a client token.\"],\r\n [APIErrorCode.DeviceAuthorizationCancelled, \"The device authorization was cancelled.\"],\r\n [APIErrorCode.DeviceAuthorizationFailed, \"The device authorization failed.\"],\r\n [APIErrorCode.MainWindowClosed, \"The main window has been closed.\"],\r\n [APIErrorCode.CannotCreateLoginWindow, \"Unable to create a login window.\"],\r\n [APIErrorCode.InvalidToken, \"The token is invalid.\"],\r\n [APIErrorCode.LoginCancelled, \"The login was cancelled.\"],\r\n [APIErrorCode.LoginFailed, \"The login failed.\"],\r\n [APIErrorCode.MissingAuthorizationResult, \"Cannot find an authorization result.\"],\r\n [APIErrorCode.SerializedUserMalformed, \"The serialized user is malformed.\"],\r\n [APIErrorCode.UserNotFoundInStorage, \"No user was found in storage.\"],\r\n [APIErrorCode.UserEndpointNotFound, \"Unable to find an endpoint for this user.\"],\r\n [APIErrorCode.UserNotAuthorized, \"User has not been authorized.\"],\r\n [APIErrorCode.UserNotLoggedIn, \"User is not logged in.\"],\r\n [APIErrorCode.InvalidServerInfo, \"The server information is invalid.\"],\r\n [APIErrorCode.StorageUnavailable, \"Storage is not available.\"],\r\n [APIErrorCode.CannotInitializeIntroPlayer, \"Unable to initialize the intro animation player.\"],\r\n [APIErrorCode.CannotLoadIntroAnimation, \"Unable to load the intro animation.\"],\r\n [APIErrorCode.NoStreamingSession, \"Session has not been setup.\"],\r\n [APIErrorCode.StreamingSessionSetupFailed, \"Unable to create streaming session.\"],\r\n [APIErrorCode.StreamerDOMError, \"Error manipulating DOM for streaming.\"],\r\n [APIErrorCode.CannotRunNetworkTest, \"Unable to run a network test.\"],\r\n [APIErrorCode.UserAccountNotLinked, \"User Account is not Linked\"],\r\n]);","/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIErrorCode, APIErrorCodeMessageTable } from \"./api-error.types\";\r\nimport { Undefined } from \"./core/util.types\";\r\nimport { Utils } from \"./core/utils\";\r\n\r\n/**\r\n * A type that represents an error code.\r\n */\r\nexport type ErrorCode = APIErrorCode | number;\r\n\r\n/**\r\n * Represents the base error that can be thrown by the GFN Client SDK.\r\n */\r\nexport class APIError extends Error {\r\n private readonly mCode: ErrorCode;\r\n private readonly mMessage?: string;\r\n\r\n /**\r\n * The error code that describes a specific error.\r\n */\r\n public get code(): ErrorCode {\r\n return this.mCode;\r\n }\r\n\r\n /**\r\n * The error message.\r\n */\r\n public get message(): string {\r\n return this.mMessage || \"\";\r\n }\r\n\r\n /** @internal **/\r\n constructor(code: ErrorCode, message?: Undefined) {\r\n super();\r\n\r\n this.name = this.constructor.name;\r\n this.mCode = code;\r\n this.mMessage = message || APIErrorCodeMessageTable.get(code);\r\n }\r\n\r\n /**\r\n * Get a detailed string representation of this error. The\r\n * returned string will include all or some of the message,\r\n * code and stack trace of this error.\r\n *\r\n * @returns\r\n * A detailed error string.\r\n */\r\n public toString(): string {\r\n let msg: string = this.message;\r\n\r\n if (msg) {\r\n msg += \" \";\r\n }\r\n\r\n msg += `(${Utils.string.hex(this.code, 8)})`;\r\n\r\n if (this.stack) {\r\n msg += `\\n stack-> ${this.stack}`;\r\n }\r\n\r\n return `${this.name}: ${msg}`;\r\n }\r\n}","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { PlatformID } from \"../platform/platform.types\";\r\n\r\n\r\n/** @internal **/\r\nexport enum GrantType {\r\n DeviceCode = \"urn:ietf:params:oauth:grant-type:device_code\",\r\n ClientToken = \"urn:ietf:params:oauth:grant-type:client_token\",\r\n RefreshToken = \"refresh_token\",\r\n AuthorizationCode = \"authorization_code\"\r\n}\r\n\r\n\r\n/** @internal **/\r\nexport enum AuthFlowKind {\r\n Code,\r\n Implicit,\r\n Hybrid\r\n}\r\n\r\n\r\n/**\r\n * The response mode of the login flow.\r\n */\r\nexport enum AuthResponseMode {\r\n /**\r\n * The response is returned in the querystring.\r\n */\r\n Query = \"query\",\r\n\r\n /**\r\n * The response is returned in the fragment.\r\n */\r\n Fragment = \"fragment\"\r\n}\r\n\r\n\r\n/**\r\n * Indicates the requested scope.\r\n */\r\nexport enum AuthScope {\r\n /**\r\n * The identity token will include a consent claim which is\r\n * a JSON object that represents the effective consent granted\r\n * by the user in the content of the client and identity provider.\r\n */\r\n Consent = \"consent\",\r\n\r\n /**\r\n * The identity token will include the preferred email and whether\r\n * or not that email has been verified.\r\n */\r\n Email = \"email\",\r\n\r\n /**\r\n * The identity token will include user profile information.\r\n */\r\n Profile = \"profile\",\r\n\r\n /**\r\n * The identity token will include the date of birth provided by the user.\r\n */\r\n Birthdate = \"birthdate\",\r\n\r\n /**\r\n * The identity token will include the preferred phone number and whether\r\n * or not that phone number has been verified.\r\n */\r\n Phone = \"phone\",\r\n\r\n /**\r\n * The identity token will include the preferred address.\r\n */\r\n Address = \"address\",\r\n\r\n /** @internal **/\r\n AuthZ = \"authz\",\r\n\r\n /** @internal **/\r\n TkClient = \"tk_client\"\r\n}\r\n\r\n\r\n/**\r\n * The prompt value that indicates whether the server should prompt the user\r\n * for reauthentication and consent.\r\n */\r\nexport enum AuthPrompt {\r\n /**\r\n * The server will not display any authentication or consent user interface.\r\n */\r\n None = \"none\",\r\n\r\n /**\r\n * Requests the server to prompt the user for reauthentication.\r\n */\r\n Login = \"login\",\r\n\r\n /**\r\n * Requests the server to prompt the user for consent.\r\n */\r\n Consent = \"consent\",\r\n\r\n /**\r\n * Requests the server to prompt the user to select a user account.\r\n */\r\n SelectAccount = \"select_account\"\r\n}\r\n\r\n\r\n/**\r\n * An authorization error identifier.\r\n */\r\nexport enum AuthErrorId {\r\n /**\r\n * The resource owner or authorization server denied the request.\r\n */\r\n AccessDenied = \"access_denied\",\r\n\r\n /**\r\n * The user account has been locked (banned).\r\n */\r\n AccountLocked = \"account_locked\",\r\n\r\n /**\r\n * The user does not meet the age requirements for the country\r\n * from which the user is connecting from.\r\n */\r\n AgeRestriction = \"age_restricted\",\r\n\r\n /**\r\n * The client is not authorized to make this request. The clientId\r\n * is invalid or has not been given access.\r\n */\r\n ClientNotAuthorized = \"unauthorized_client\",\r\n\r\n /**\r\n * The request is either missing a required parameter, has an invalid\r\n * parameter value, duplicate parameters or is otherwise malformed.\r\n */\r\n InvalidRequest = \"invalid_request\",\r\n\r\n /**\r\n * The ```requestUri``` returns an error or contains invalid data.\r\n */\r\n InvalidRequestUri = \"invalid_request_uri\",\r\n\r\n /**\r\n * The ```request``` parameter contains an invalid request object.\r\n */\r\n InvalidRequestObject = \"invalid_request_object\",\r\n\r\n /**\r\n * The requested scope is either invalid or malformed.\r\n */\r\n InvalidScope = \"invalid_scope\",\r\n\r\n /**\r\n * The provided authorization grant (e.g. authorization code, resource owner credentials)\r\n * or refresh token is invalid, expired, revoked, does not match the redirection URI\r\n * used in the authorization request, or was issued to another client.\r\n */\r\n InvalidGrant = \"invalid_grant\",\r\n\r\n /**\r\n * The authorization grant type is not supported by the authorization server.\r\n */\r\n GrantTypeNotSupported = \"unsupported_grant_type\",\r\n\r\n /**\r\n * The server does not support the requested ```responseType```.\r\n */\r\n ResponseTypeNotSupported = \"unsupported_response_type\",\r\n\r\n /**\r\n * The server does not support the use of the ```request``` parameter.\r\n */\r\n RequestNotSupported = \"request_not_supported\",\r\n\r\n /**\r\n * The server does not support the use of the ```requestUri``` parameter.\r\n */\r\n RequestUriNotSupported = \"request_uri_not_supported\",\r\n\r\n /**\r\n * The server does not support the use of the ```registration``` parameter.\r\n */\r\n RegistrationNotSupported = \"registration_not_supported\",\r\n\r\n /**\r\n * An unexpected error occurred on the server.\r\n */\r\n ServerError = \"server_error\",\r\n\r\n /**\r\n * The server is unable to handle the request at this time or is\r\n * undergoing maintenance.\r\n */\r\n ServerUnavailable = \"temporarily_unavailable\",\r\n\r\n /**\r\n * The server requires some form of user interaction. This may occur\r\n * when the ```prompt=none``` but the request cannot be completed without\r\n * displaying a user interface for the user to interact with.\r\n */\r\n InteractionRequired = \"interaction_required\",\r\n\r\n /**\r\n * The server requires user authentication. This error may occur when\r\n * ```prompt=none``` but the authentication cannot be completed without\r\n * displaying a user interface for the user to authenticate with.\r\n */\r\n LoginRequired = \"login_required\",\r\n\r\n /**\r\n * The user must select a session. The user may be authenticated at the\r\n * authorization server with different associated accounts, but the user\r\n * did not select a session. This error may occur when ```prompt=none```\r\n * but the authentication cannot be completed with displaying a user\r\n * interface to prompt for a session to use.\r\n */\r\n AccountSelectionRequired = \"account_selection_required\",\r\n\r\n /**\r\n * The server requires consent from the user. This error may occur when\r\n * ```prompt=none``` but the authentication cannot be completed without\r\n * displaying a user interface for the user consent.\r\n */\r\n ConsentRequired = \"consent_required\",\r\n\r\n /**\r\n * The ```deviceCode``` has expired, and the device authorization session\r\n * has concluded. A new device authorization request can be made but should\r\n * wait for user interaction before restarting to avoid unnecessary polling.\r\n */\r\n TokenExpired = \"expired_token\",\r\n\r\n /**\r\n * The authorization request is still pending.\r\n */\r\n AuthorizationPending = \"authorization_pending\",\r\n\r\n /**\r\n * The authorization request is still pending and the client should continue\r\n * to wait but the polling interval must be increased by 5 seconds for this\r\n * and all subsequent requests.\r\n */\r\n SlowDown = \"slow_down\"\r\n}\r\n\r\n\r\nexport enum AuthAgent {\r\n /**\r\n * Browser: Authentication will take place in a new browser tab\r\n *\r\n * Native: Authentication will take place using the built-in\r\n * browser in a new tab\r\n */\r\n Browser = \"browser\",\r\n\r\n /**\r\n * Browser: Authentication will take place in a new browser window\r\n *\r\n * Native: Authentication will take place using the built-in\r\n * browser in a new tab.\r\n */\r\n BrowserPopup = \"browser_popup\",\r\n\r\n /**\r\n * Browser: Not supported - an error will be thrown.\r\n *\r\n * Native: Performs automatic token based authentication in a hidden\r\n * webview.\r\n */\r\n WebView = \"webview\",\r\n}\r\n\r\n\r\n/**\r\n * Represents the parameters used to create an authorization url\r\n * needed for performing a user login.\r\n */\r\nexport interface AuthParameters {\r\n\r\n /**\r\n * Identifies the flow (authorization code vs implicit vs hybrid) and\r\n * determines what will be returned to the client.\r\n */\r\n responseType: \"code\" | \"code id_token\" | \"code token\" | \"code id_token token\" | \"id_token\" | \"id_token token\";\r\n\r\n /**\r\n * The redirect uri that has been registered with your client.\r\n */\r\n redirectUri?: string;\r\n\r\n /**\r\n * Zero or more scopes. The values will identify the information that should\r\n * be included in the identity token.\r\n */\r\n scopes: AuthScope[];\r\n\r\n /**\r\n * Used to change the default response mode of the flow.\r\n */\r\n responseMode?: AuthResponseMode,\r\n\r\n /** @internal **/\r\n state?: string;\r\n\r\n /**\r\n * If provided, copied into the identity token. This is always required when\r\n * using an implicit or hybrid authorization flow.\r\n */\r\n nonce?: string;\r\n\r\n /**\r\n * Used to determine how a previously authenticated user is to be re-authenticated.\r\n */\r\n prompt?: AuthPrompt[];\r\n\r\n /**\r\n * Maximum amount of time (in seconds) allowed since the user was last authenticated.\r\n */\r\n maxAge?: number;\r\n\r\n /**\r\n * List of {@link https://tools.ietf.org/html/rfc5646 | RFC 5646} language tags,\r\n * sorted in order of preference.\r\n */\r\n uiLocales?: string[];\r\n\r\n /**\r\n * An identity token that was previously obtained. This is used as a hint about\r\n * the users current or past authenticated session and contains the idpId which\r\n * will be used for the selection of the target identity provider.\r\n */\r\n idTokenHint?: string;\r\n\r\n /**\r\n * A hint about the username that a user might want to use.\r\n */\r\n loginHint?: string;\r\n\r\n /**\r\n * Use to explicitly select the target Identity Provider, the IdP information in\r\n * {@link idTokenHint} takes prcedence over this value; if both are provided.\r\n */\r\n idpId?: string;\r\n}\r\n\r\n\r\n\r\n/** @internal **/\r\nexport interface AuthResult {\r\n code: string;\r\n tokenType: string;\r\n accessToken: string;\r\n idToken: string;\r\n expiresIn: number;\r\n state?: string;\r\n}\r\n\r\n\r\n/**\r\n * A token and the date/time when that token will expire.\r\n */\r\nexport interface AuthToken {\r\n /**\r\n * The value of the token.\r\n */\r\n value: string;\r\n\r\n /**\r\n * The date and time when the token will expire.\r\n */\r\n expiresOn: Date;\r\n}\r\n\r\n\r\n/**\r\n * Represents the user's set of tokens.\r\n */\r\nexport interface AuthInfo {\r\n /**\r\n * The access token issued by the authorization server.\r\n */\r\n accessToken?: AuthToken;\r\n\r\n /**\r\n * The client token that can be used to retrieve a new identity\r\n * and access token, if needed.\r\n */\r\n clientToken?: AuthToken;\r\n\r\n /**\r\n * The identity token of the user, this is a ({@link https://tools.ietf.org/html/rfc7519 | JWT}) that\r\n * conforms to {@link https://openid.net/specs/openid-connect-core-1_0.html#IDToken | section 2 of OpenID Connect Core 1.0}.\r\n */\r\n idToken: AuthToken;\r\n}\r\n\r\n\r\n/** @internal **/\r\nexport interface AuthState {\r\n agent: AuthAgent;\r\n platform: PlatformID;\r\n clientId?: string;\r\n state?: string;\r\n origin?: string;\r\n}\r\n\r\n\r\n/**\r\n * The parameters used to create the device authorization request.\r\n */\r\nexport interface DeviceAuthParameters {\r\n /**\r\n * Zero or more scopes. The values will identify the information that should\r\n * be included in the identity token.\r\n */\r\n scopes?: AuthScope[];\r\n\r\n /** @internal **/\r\n state?: string;\r\n\r\n /**\r\n * If provided, copied into the identity token.\r\n */\r\n nonce?: string;\r\n\r\n /**\r\n * Used to determine how a previously authenticated user is to be re-authenticated.\r\n */\r\n prompt?: AuthPrompt[];\r\n\r\n /**\r\n * Maximum amount of time (in seconds) allowed since the user was last authenticated.\r\n */\r\n maxAge?: number;\r\n\r\n /**\r\n * An identity token that was previously obtained. This is used as a hint about\r\n * the user's current or past authenticated session and contains the idpId which\r\n * will be used for the selection of the target identity provider.\r\n */\r\n idTokenHint?: string;\r\n\r\n /**\r\n * A hint about the username that a user might want to use.\r\n */\r\n loginHint?: string;\r\n\r\n /**\r\n * Use to explicitly select the target Identity Provider, the IdP information in\r\n * {@link idTokenHint} takes precedence over this value; if both are provided.\r\n */\r\n idpId?: string;\r\n\r\n /**\r\n * Friendly device name that can be used to confirm the device identity during\r\n * the off-device part of the flow.\r\n */\r\n displayName?: string;\r\n}\r\n\r\n\r\n/**\r\n * The device authorization information.\r\n */\r\nexport interface DeviceAuthResult {\r\n /**\r\n * The user verification code. This must be displayed to the user.\r\n */\r\n userCode: string;\r\n\r\n /**\r\n * The device verification code. Used to identity the device that\r\n * is pending authorization.\r\n */\r\n deviceCode: string;\r\n\r\n /**\r\n * The verification url on the authorization server. This can be displayed\r\n * to the user.\r\n */\r\n verificationUrl: string;\r\n\r\n /**\r\n * The complete verification url that includes the ```userCode``` or other\r\n * information.\r\n */\r\n verificationCompleteUrl: string;\r\n\r\n /**\r\n * The lifetime (in seconds) of this device authorization. The user must\r\n * complete authorization in this amount of time.\r\n */\r\n expiresIn: number;\r\n\r\n /**\r\n * The minimum amount of time (in seconds) that the client should poll.\r\n */\r\n interval: number;\r\n}\r\n\r\n\r\n/**\r\n * An error result returned from a login.\r\n */\r\nexport interface AuthErrorResult {\r\n /**\r\n * The error identifier.\r\n */\r\n error: AuthErrorId | string;\r\n\r\n /**\r\n * Additional information about the error.\r\n */\r\n errorDescription?: string;\r\n\r\n /**\r\n * The state parameter, if provided in the original request.\r\n */\r\n state?: string\r\n}\r\n\r\n\r\n/**\r\n * The error that occurs during a login attempt.\r\n */\r\nexport class LoginError extends APIError {\r\n /**\r\n * The error identifier.\r\n */\r\n public readonly id: string;\r\n\r\n /**\r\n * The value of the state parameter, if provided in the original request.\r\n */\r\n public readonly state?: string;\r\n\r\n /** @internal **/\r\n constructor(code: number, id: string, description?: string, state?: string) {\r\n super(code, description);\r\n\r\n this.id = id;\r\n this.state = state;\r\n }\r\n\r\n public toString(): string {\r\n let msg: string = super.toString();\r\n\r\n return (this.id ? `${msg}\\n\\terrorId=${this.id}` : msg);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * The error that is thrown when trying to access a missing token.\r\n */\r\nexport class MissingTokenError extends APIError {\r\n /** @internal **/\r\n constructor(message: string = \"The token is empty.\") {\r\n super(APIErrorCode.MissingToken, message);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a token used for implicit login to set an\r\n * HTTP cookie that can be read back on the server.\r\n */\r\nexport interface PartnerToken {\r\n /**\r\n * The name to give to the HTTP cookie.\r\n */\r\n name?: string;\r\n\r\n /**\r\n * The value of the token to provide in the HTTP cookie.\r\n */\r\n value: string;\r\n\r\n /**\r\n * The domain that will read the HTTP cookie.\r\n */\r\n domain: string;\r\n}\r\n\r\n/** @internal */\r\nexport interface JWTPartnerOptions {\r\n authorizationId: string;\r\n cmsId: string;\r\n externalId: string;\r\n partnerId: string;\r\n userId: string;\r\n}\r\n\r\n/** @internal */\r\nexport interface JWTPartnerPayload {\r\n [k: string]: any;\r\n token_type: string;\r\n sub: string;\r\n exp: number;\r\n options: JWTPartnerOptions;\r\n}\r\n\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { Nullable } from \"./util.types\";\r\n\r\n/**\r\n * The HTTP methods that can be sent with an{@link IHttpClient}\r\n */\r\nexport enum HttpMethod {\r\n HEAD = \"HEAD\",\r\n GET = \"GET\",\r\n POST = \"POST\",\r\n PUT = \"PUT\",\r\n PATCH = \"PATCH\",\r\n DELETE = \"DELETE\",\r\n OPTIONS = \"OPTIONS\"\r\n}\r\n\r\n/**\r\n * The common HTTP status codes that are likely to be\r\n * returned in an HTTP response.\r\n */\r\nexport enum HttpStatusCode {\r\n OK = 200,\r\n MultipleChoices = 300,\r\n MovedPermanently = 301,\r\n Found = 302,\r\n SeeOther = 303,\r\n NotModified = 304,\r\n UseProxy = 305,\r\n SwitchProxy = 306,\r\n TemporaryRedirect = 307,\r\n PermanentRedirect = 308,\r\n BadRequest = 400,\r\n Unauthorized = 401,\r\n PaymentRequired = 402,\r\n Forbidden = 403,\r\n NotFound = 404,\r\n MethodNotAllowed = 405,\r\n NotAcceptable = 406,\r\n ProxyAuthenticationRequired = 407,\r\n RequestTimeout = 408,\r\n Conflict = 409,\r\n Gone = 410,\r\n PayloadTooLarge = 413,\r\n UpgradeRequired = 426,\r\n TooManyRequests = 429,\r\n InternalServerError = 500,\r\n NotImplemented = 501,\r\n BadGateway = 502,\r\n ServiceUnavailable = 503,\r\n GatewayTimeout = 504\r\n}\r\n\r\n/**\r\n * The format of the raw HTTP response.\r\n */\r\nexport enum HttpResponseFormat {\r\n ArrayBuffer = \"arraybuffer\",\r\n Blob = \"blob\",\r\n Document = \"document\",\r\n Json = \"json\",\r\n Text = \"text\"\r\n}\r\n\r\n\r\n/**\r\n * Represents a method to calculate how much time should\r\n * pass before resending a previous HTTP request that failed.\r\n */\r\nexport enum HttpBackoffStrategy {\r\n /**\r\n * Not applicable.\r\n */\r\n None = \"none\",\r\n /**\r\n * Retries occur at a constant rate\r\n */\r\n Fixed = \"fixed\",\r\n\r\n /**\r\n * Retries occur at a constant incrementing rate (e.g. Math.min(retryCeiling, retry) * interval)\r\n */\r\n Incremental = \"incremental\",\r\n\r\n /**\r\n * Retries occur at a exponential rate (e.g. interval * Math.pow(2, Math.min(retryCeiling, retry)))\r\n */\r\n Exponential = \"exponential\",\r\n}\r\n\r\n\r\n/**\r\n * Represents an approach to determine whether a failed\r\n * HTTP request should be retried or not.\r\n */\r\nexport enum HttpRetryMode {\r\n /**\r\n * Do not retry the request if it fails; for any reason. This takes precedence over\r\n * any other value.\r\n */\r\n Never = (1 << 0),\r\n\r\n /**\r\n * Always retry the request until the server responds successfully, the request\r\n * is cancelled, the request times out (unless HttpRetryMode.Timeout is set) or\r\n * the IHttpOptions.maxRetries value is reached.\r\n */\r\n Always = (1 << 1),\r\n\r\n /**\r\n * Retry the request if the status code of the response is in one of the\r\n * configured IHttpOptions.retryStatusCodes.\r\n */\r\n StatusCode = (1 << 2),\r\n\r\n /**\r\n * Retry the request using the Retry-After header; if one exists.\r\n */\r\n RetryAfterHeader = (1 << 3),\r\n\r\n /**\r\n * Retry if the request timed out.\r\n */\r\n Timeout = (1 << 4)\r\n}\r\n\r\n/** @internal **/\r\nexport const DEFAULT_RETRYABLE_STATUS_CODES: HttpStatusCode[] = [HttpStatusCode.BadGateway, HttpStatusCode.ServiceUnavailable, HttpStatusCode.GatewayTimeout];\r\n/** @internal **/\r\nexport const DEFAULT_BACKOFF_RETRY_CEILING: number = 10;\r\n/** @internal **/\r\nexport const DEFAULT_FIXED_BACKOFF_INTERVAL: number = 2000; // seconds\r\n/** @internal **/\r\nexport const DEFAULT_INCREMENTAL_BACKOFF_INTERVAL: number = 2000; // seconds\r\n/** @internal **/\r\nexport const DEFAULT_EXPONENTIAL_BACKOFF_MULTIPLIER: number = 1.5;\r\n/** @internal **/\r\nexport const DEFAULT_EXPONENTIAL_BACKOFF_INITIAL_DELAY: number = 1000; // 1 second\r\n/** @internal **/\r\nexport const DEFAULT_EXPONENTIAL_BACKOFF_JITTER: number = 0.25; // 25% jitter\r\n/** @internal **/\r\nexport const DEFAULT_REQUEST_TIMEOUT_MS: number = 120000; // 2 minutes\r\n/** @internal **/\r\nexport const DEFAULT_RESPONSE_FORMAT: HttpResponseFormat = HttpResponseFormat.Json;\r\n/** @internal **/\r\nexport const DEFAULT_RETRY_LIMIT: number = 5;\r\n/** @internal **/\r\nexport const DEFAULT_RETRY_MODE: number = HttpRetryMode.RetryAfterHeader | HttpRetryMode.StatusCode;\r\n\r\n/** Represents a type that can be provided as the body of an HTTP request. */\r\nexport type HttpRequestData = string | Blob | BufferSource | FormData | URLSearchParams;\r\n\r\n/**\r\n * The configuration to use when applying a backoff strategy.\r\n *\r\n * @see {@link HttpBackoffStrategy}\r\n *\r\n */\r\nexport interface IHttpBackoffConfiguration {\r\n /**\r\n * The backoff strategy to use.\r\n */\r\n strategy: HttpBackoffStrategy;\r\n\r\n /**\r\n * The amount of time that should elapse between retries.\r\n */\r\n interval?: number;\r\n\r\n /**\r\n * The maximum number of retries to use for the purpose of\r\n * calculating the backoff time.\r\n *\r\n * This does not affect the total number of retries.\r\n */\r\n retryCeiling?: number;\r\n}\r\n\r\n\r\n/**\r\n * The configuration to use when applying an exponential backoff strategy.\r\n *\r\n * @see {@link HttpBackoffStrategy.Exponential}\r\n */\r\nexport interface IHttpExponentialBackoffConfiguration extends Omit {\r\n /**\r\n * Will always have a value of {@link HttpBackoffStrategy.Exponential}.\r\n */\r\n strategy: HttpBackoffStrategy.Exponential;\r\n\r\n /**\r\n * The minimum delay to start with. The actual delay can be smaller\r\n * if there is jitter.\r\n */\r\n initialDelay?: number;\r\n\r\n /**\r\n * The multiplier used to determine the delay until the next retry attempt.\r\n *\r\n * delay = Math.pow(multiplier, retryAttempt)\r\n *\r\n */\r\n multiplier?: number;\r\n\r\n /**\r\n * To ensure the backoff is not deterministic, this jitter is applied to the\r\n * delay as a unit of percentage from 0-1 (0 - 100).\r\n *\r\n * @example\r\n * 0.1 = 10% jitter\r\n * 0.25 = 25% jitter\r\n * 0.5 = 50% jitter\r\n *\r\n * and so on...\r\n */\r\n jitter?: number;\r\n}\r\n\r\n/**\r\n * Table of HTTP headers as key/value pairs.\r\n */\r\nexport interface IHttpHeaders {\r\n [key: string]: any;\r\n}\r\n\r\n\r\n/**\r\n * The response object returned from an HTTP request.\r\n */\r\nexport interface IHttpResponse {\r\n /**\r\n * The url of the response, if there was a redirect then this\r\n * would be the last url of the redirects. Otherwise, if the\r\n * response has an empty url then the url of the request is\r\n * returned instead.\r\n */\r\n url: string;\r\n\r\n /**\r\n * Response header names are always lowercase\r\n */\r\n headers: IHttpHeaders;\r\n\r\n /**\r\n * True when the request was successful; otherwise false.\r\n *\r\n * Successful requests or any request with a status that\r\n * is greater than or equal to 100 and less than 400.\r\n */\r\n ok: boolean;\r\n\r\n /**\r\n * True if there is a response body available to read; otherwise false.\r\n */\r\n hasBody: boolean;\r\n\r\n /**\r\n * The status code of the HTTP response.\r\n */\r\n status: number;\r\n\r\n /**\r\n * The status text of the HTTP response; if one was sent.\r\n */\r\n statusText: string;\r\n\r\n /**\r\n * Contains the raw response object. The type of this value\r\n * will depend on the {@link IHttpSettings.responseFormat} setting.\r\n */\r\n raw: any;\r\n\r\n\r\n /**\r\n * Returns the response as string of text.\r\n */\r\n text(): Promise;\r\n\r\n /**\r\n * Returns the response as a JSON object.\r\n *\r\n * @throws\r\n * @see {@link HttpError} when {@link IHttpSettings.responseFormat} is\r\n * set to \"document\".\r\n */\r\n json(): Promise;\r\n\r\n /**\r\n * Returns a typed object from JSON.\r\n *\r\n * @param rootNodeName\r\n * The name of an objects property to use as for the root.\r\n */\r\n object(rootNodeName?: string): Promise;\r\n}\r\n\r\n/**\r\n * Statistics regarding retries\r\n */\r\nexport interface IHttpRetry {\r\n /**\r\n * How long of a wait was performed before the retry.\r\n */\r\n backoffWaitMs: number;\r\n}\r\n\r\n/**\r\n * Statistics regarding an IHttpResponse\r\n */\r\nexport interface IHttpResponseStats {\r\n /**\r\n * The number of retries attempted.\r\n */\r\n retryCount: number;\r\n\r\n /**\r\n * The time it took to receive a response to the last request, not including the retry backoff time.\r\n */\r\n durationInMs: number;\r\n\r\n /**\r\n * The total time it took to receive a response to the request, including retries.\r\n */\r\n totalDurationInMs: number;\r\n\r\n /**\r\n * Type of backoff strategy employed for retries\r\n */\r\n backoffStrategy?: HttpBackoffStrategy,\r\n\r\n /**\r\n * The configuration used when applying a backoff strategy.\r\n */\r\n backoffConfiguration?: IHttpBackoffConfiguration,\r\n\r\n /**\r\n * Information about each retry\r\n */\r\n backoffInfo: IHttpRetry[],\r\n}\r\n\r\n/**\r\n * The available settings for an {@link IHttpClient}\r\n */\r\nexport interface IHttpSettings {\r\n userAgent?: string;\r\n headers?: IHttpHeaders;\r\n responseFormat?: HttpResponseFormat;\r\n timeout?: number;\r\n retryMode?: number;\r\n retryStatusCodes?: HttpStatusCode[];\r\n maxRetries?: number;\r\n backoffConfiguration?: IHttpBackoffConfiguration;\r\n}\r\n\r\n/**\r\n * The details of an HTTP request.\r\n */\r\nexport interface IHttpRequest {\r\n method: HttpMethod;\r\n url: string;\r\n headers: IHttpHeaders;\r\n body?: Nullable;\r\n}\r\n\r\n/**\r\n * Represents an HTTP client.\r\n *\r\n * The underlying HTTP api varys by platform.\r\n */\r\nexport interface IHttpClient {\r\n settings: IHttpSettings;\r\n\r\n cancel(): void;\r\n delete(url: string, extraHeaders?: IHttpHeaders): Promise;\r\n get(url: string, extraHeaders?: IHttpHeaders): Promise;\r\n head(url: string, extraHeaders?: IHttpHeaders): Promise;\r\n options(url: string, extraHeaders?: IHttpHeaders): Promise;\r\n patch(url: string, data: Nullable, extraHeaders?: IHttpHeaders): Promise;\r\n patchObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise;\r\n post(url: string, data: Nullable, extraHeaders?: IHttpHeaders): Promise;\r\n postObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise;\r\n put(url: string, data: Nullable, extraHeaders?: IHttpHeaders): Promise;\r\n putObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise;\r\n request(method: HttpMethod, url: string, data: Nullable, headers: IHttpHeaders): Promise;\r\n}\r\n\r\n/**\r\n * Represents an object that wants to listen to all HTTP results.\r\n */\r\nexport interface IHttpResponseListener {\r\n onHttpResult(request: IHttpRequest, response: Nullable, serviceInfo: ServiceInfo, stats: IHttpResponseStats, errorCode: number): void;\r\n}\r\n\r\n/**\r\n * Represents an event object for HTTP results.\r\n */\r\n export interface HttpEvents {\r\n httpResult: (request: IHttpRequest, response: Nullable, serviceInfo: ServiceInfo, stats: IHttpResponseStats, errorCode: number) => void;\r\n}\r\n\r\n/**\r\n * The reason for an HTTP error.\r\n */\r\nexport enum HttpErrorReason {\r\n /**\r\n * The error is not known.\r\n */\r\n Unknown = 1,\r\n\r\n /**\r\n * The error is generic and cannot be represented by any one specific category.\r\n */\r\n Generic = 2,\r\n\r\n /**\r\n * An HTTP client cancelled any pending or active requests.\r\n */\r\n Cancelled = 3,\r\n\r\n /**\r\n * The error that will occur if the state of an HTTP client is\r\n * not valid for the current operation.\r\n */\r\n InvalidState = 4,\r\n\r\n /**\r\n * The maximum amount of retries have been performed.\r\n *\r\n * {@link IHttpSettings.maxRetries}\r\n */\r\n MaxRetriesExceeded = 5,\r\n\r\n /**\r\n * The HTTP request timed out.\r\n *\r\n * {@link IHttpSettings.timeout}\r\n */\r\n Timeout = 6,\r\n\r\n /**\r\n * The client has made too many HTTP requests in a given time period. Wait and try again.\r\n */\r\n TooManyRequests = 7,\r\n}\r\n\r\n/**\r\n * Represent an HTTP error thrown by an HTTP client.\r\n */\r\nexport class HttpError extends APIError {\r\n private readonly mReason: HttpErrorReason;\r\n private readonly mUrl: string;\r\n\r\n /**\r\n * Returns the reason for this error\r\n *\r\n * @see HttpErrorReason\r\n */\r\n public get reason(): HttpErrorReason {\r\n return this.mReason;\r\n }\r\n\r\n /**\r\n * Returns a textual description of the error reason.\r\n */\r\n public get reasonDescription(): string {\r\n switch (this.mReason) {\r\n case HttpErrorReason.Cancelled:\r\n return \"The operation was cancelled.\";\r\n case HttpErrorReason.InvalidState:\r\n return \"The current state is invalid.\";\r\n case HttpErrorReason.MaxRetriesExceeded:\r\n return \"The maximum number of retries have been reached.\";\r\n case HttpErrorReason.Timeout:\r\n return \"The request timed out.\";\r\n case HttpErrorReason.TooManyRequests:\r\n return \"Too many http requests have been made too quickly.\";\r\n case HttpErrorReason.Unknown:\r\n return \"An unknown network error occurred.\";\r\n case HttpErrorReason.Generic:\r\n default:\r\n return \"\";\r\n }\r\n }\r\n\r\n /**\r\n * The error message.\r\n */\r\n public get message(): string {\r\n return super.message || this.reasonDescription;\r\n }\r\n\r\n /**\r\n * Returns the url of the original request from where this error occurred.\r\n */\r\n public get url(): string {\r\n return this.mUrl;\r\n }\r\n\r\n\r\n /**\r\n * @constructor\r\n *\r\n * @param url The url of the request\r\n * @param reason The reason for this error\r\n * @param message An optional error message\r\n */\r\n constructor(code: number, url: string, reason: HttpErrorReason = HttpErrorReason.Unknown, message?: string) {\r\n super(code, message);\r\n\r\n this.mReason = reason;\r\n this.mUrl = url;\r\n }\r\n\r\n /**\r\n * Returns a formatted string with the error details.\r\n */\r\n public toString(): string {\r\n let msg: string = super.toString();\r\n\r\n // add the reason, only if a message has been given..\r\n // otherwise the message itself will be the reason.\r\n if (super.message) {\r\n const reasonDesc: string = this.reasonDescription;\r\n\r\n if (reasonDesc) {\r\n if (msg) {\r\n msg += \" \";\r\n }\r\n\r\n msg += reasonDesc;\r\n }\r\n }\r\n\r\n return (this.url ? `${msg}\\n\\turl=${this.url}` : msg);\r\n }\r\n}\r\n\r\n/**\r\n * Occurs when an HTTP request has timed out.\r\n */\r\nexport class HttpTimeoutError extends HttpError {\r\n\r\n /** @internal **/\r\n constructor(code: number, url: string, message?: string) {\r\n super(code, url, HttpErrorReason.Timeout, message);\r\n }\r\n}\r\n\r\n/**\r\n * Occurs when an HTTP client cancels a request.\r\n */\r\nexport class HttpCancelledError extends HttpError {\r\n\r\n /** @internal **/\r\n constructor(code: number, url: string, message?: string) {\r\n super(code, url, HttpErrorReason.Cancelled, message);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport enum HttpRateLimiterType {\r\n /**\r\n * Sliding Window rate limiter\r\n */\r\n SlidingWindow = \"slidingWindow\"\r\n}\r\n\r\n/** @internal */\r\nexport interface IHttpRateLimiter {\r\n type: HttpRateLimiterType;\r\n allowRequest(): boolean;\r\n}\r\n\r\n/** @internal */\r\nexport interface IHttpRateLimiterConfiguration {\r\n type: HttpRateLimiterType | string;\r\n}\r\n\r\n/** @internal */\r\nexport interface ISlidingWindowHttpRateLimiterConfiguration extends IHttpRateLimiterConfiguration {\r\n type: HttpRateLimiterType.SlidingWindow;\r\n intervalSeconds: number;\r\n requestLimit: number;\r\n}\r\n\r\n/** @internal */\r\nexport interface ServiceInfo {\r\n name: string;\r\n useCase: string;\r\n subUseCase?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface HttpServerConfiguration {\r\n serverUrl: string;\r\n version?: string;\r\n timeout: number;\r\n backoff: IHttpBackoffConfiguration;\r\n}\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpError, HttpErrorReason, IHttpBackoffConfiguration } from \"../core/http-client.types\";\r\nimport { Utils } from \"../core/utils\";\r\n\r\n/**\r\n * Represents the authorization grant that can be used to obtain an access token.\r\n * @internal\r\n */\r\nexport enum StarfleetTokenGrantType {\r\n\r\n /**\r\n * Request a set of tokens using a device code from the device authorization flow.\r\n */\r\n DeviceCode = \"urn:ietf:params:oauth:grant-type:device_code\",\r\n\r\n /**\r\n * Request a set of tokens using a client token.\r\n */\r\n ClientToken = \"urn:ietf:params:oauth:grant-type:client_token\",\r\n\r\n /**\r\n * Request a set of tokens using a code and code verifier from\r\n * the authorization code flow.\r\n */\r\n AuthorizationCode = \"authorization_code\",\r\n\r\n // unsupported grant types\r\n\r\n /** @internal **/\r\n RefreshToken = \"refresh_token\"\r\n}\r\n\r\n/** @internal **/\r\nexport class StarfleetError extends HttpError {\r\n private readonly mId: string;\r\n\r\n public get id(): string {\r\n return this.mId;\r\n }\r\n\r\n constructor(code: number, url: string, id: string, message?: string) {\r\n super(code, url, HttpErrorReason.Generic, message);\r\n\r\n this.mId = id;\r\n }\r\n\r\n public toString(): string {\r\n let msg: string = super.toString();\r\n\r\n if (this.mId && Utils.string.contains(msg, \"url=\")) {\r\n return `${msg}, errorId=${this.mId}`;\r\n }\r\n\r\n return msg;\r\n }\r\n}\r\n\r\n/** @internal **/\r\nexport interface StarfleetAuthorizeResult {\r\n token_type?: string;\r\n expires_in?: number;\r\n code?: string;\r\n access_token?: string;\r\n id_token?: string;\r\n state?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface StarfleetConfigurationMetadata {\r\n issuer: string;\r\n authorization_endpoint: string;\r\n token_endpoint: string;\r\n userinfo_endpoint: string;\r\n jwks_uri: string;\r\n scopes_supported: string[];\r\n response_types_supported: string[];\r\n response_modes_supported: string[];\r\n subject_types_supported: string[];\r\n id_token_signing_alg_values_supported: string[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface StarfleetUserConsent {\r\n opt_in?: boolean;\r\n trackTechnicalData: boolean;\r\n trackBehavioralData: boolean;\r\n}\r\n\r\n/** @internal **/\r\nexport interface StarfleetUserIdentity {\r\n sub: string;\r\n idp_id: string;\r\n idp_name: string;\r\n external_id: string;\r\n preferred_username: string;\r\n consent?: StarfleetUserConsent;\r\n updated_at: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface StarfleetProviderConfiguration {\r\n authorizationUrl: string;\r\n clientTokenUrl: string;\r\n deviceAuthorizationUrl: string;\r\n tokenUrl: string;\r\n userInfoUrl: string;\r\n}\r\n","/* Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Cancelable } from \"./util.types\";\r\n\r\nexport interface EventMap {\r\n [event: string]: any;\r\n}\r\n\r\nexport interface LooseEventMap extends EventMap {\r\n [event: string]: (...args: any) => void;\r\n}\r\n\r\n\r\n/**\r\n * Lightweight Events\r\n *\r\n * @example\r\n * interface MouseEvents {\r\n * mousedown: (e: MouseEvent) => void;\r\n * mouseup: (e: MouseEvent) => void;\r\n * mousemove: (e: MouseEvent) => void;\r\n * // ...\r\n * }\r\n *\r\n * class UIElement extends EventEmitter {\r\n * constructor() {\r\n * super();\r\n * }\r\n * }\r\n *\r\n * // ---\r\n * const button: UIElement = new UIElement();\r\n *\r\n * button.on(\"mousedown\", (e: MouseEvent) => {\r\n * console.log(\"Mouse Down: \", e);\r\n * });\r\n *\r\n * button.emit(\"mousedown\");\r\n *\r\n *\r\n * @example\r\n * class UIElement {\r\n * public readonly events: EventEmitter = new EventEmitter();\r\n * }\r\n *\r\n * // ---\r\n * button.events.on(\"mousedown\", ...);\r\n */\r\nexport class EventEmitter {\r\n private mHandlers: Partial<{ [TEvent in keyof TEventMap]: TEventMap[TEvent][] }> = {};\r\n\r\n /**\r\n * Attach an event handler to the specified event.\r\n *\r\n * @param event The name of the event to listen for.\r\n * @param handler The callback handler to execute when the event is emitted.\r\n *\r\n * @returns An Cancelable object that removes the event handler\r\n */\r\n public on(event: TKey, handler: TEventMap[TKey]): Cancelable {\r\n this.mHandlers[event] = this.mHandlers[event] || [];\r\n // this will never be null, we create a new array ^\r\n this.mHandlers[event]!.push(handler);\r\n\r\n return {\r\n cancel: () => (this.mHandlers[event] = this.mHandlers[event]!.filter((value: TEventMap[TKey]) => value !== handler))\r\n };\r\n }\r\n\r\n /**\r\n * Deletes an event handler on the specified event.\r\n *\r\n * @param event The name of the event\r\n * @param handler The callback handler that is associated with the event\r\n */\r\n public off(event: TKey, handler: TEventMap[TKey]): void {\r\n if (this.mHandlers[event]) {\r\n this.mHandlers[event] = this.mHandlers[event]!.filter((value: TEventMap[TKey]) => value !== handler);\r\n }\r\n }\r\n\r\n /**\r\n * Emits the specified event to all registered event handlers, each handler is called in the order\r\n * in which they are added; one after the other.\r\n *\r\n * @param event The name of the event to emit.\r\n * @param args Zero or more arguments\r\n */\r\n public emit(event: TKey, ...args: Parameters): void {\r\n const handlers: any = this.mHandlers[event];\r\n\r\n if (handlers) {\r\n for(const handler of handlers) {\r\n handler(...args);\r\n }\r\n }\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { AuthInfo } from \"./auth.types\";\r\n\r\n/** @internal **/\r\nexport const NO_USER_CONSENTS: IUserConsents = {\r\n trackBehavioralData: false,\r\n trackTechnicalData: false\r\n}\r\n\r\n/** @internal **/\r\nexport const DEFAULT_USER_CONSENTS: IUserConsents = {\r\n trackBehavioralData: false,\r\n trackTechnicalData: false\r\n};\r\n\r\n/**\r\n * Represents the provided consent.\r\n */\r\nexport interface IUserConsents {\r\n /**\r\n * True to indicate the user has consented to allowing\r\n * the usage of technical data; otherwise, false.\r\n */\r\n trackTechnicalData: boolean;\r\n\r\n /**\r\n * True to indicate the user has consented to allowing\r\n * the usage of behavioural data; otherwise, false.\r\n */\r\n trackBehavioralData: boolean;\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Only used by User to know when the internal consents object fields change.\r\n */\r\nexport interface UserConsentsEvents {\r\n updated: (consents: IUserConsents) => void;\r\n}\r\n\r\n/**\r\n * @interval\r\n *\r\n * Provides a class object used to notify the parent when consents get updated\r\n */\r\nexport class UserConsents extends EventEmitter implements IUserConsents {\r\n private readonly mConsents: IUserConsents;\r\n constructor(consents: IUserConsents) {\r\n super();\r\n this.mConsents = consents;\r\n }\r\n\r\n public get trackTechnicalData(): boolean {\r\n return this.mConsents.trackTechnicalData;\r\n }\r\n\r\n public set trackTechnicalData(value: boolean) {\r\n this.mConsents.trackTechnicalData = value;\r\n this.emit(\"updated\", this.mConsents);\r\n }\r\n\r\n public get trackBehavioralData(): boolean {\r\n return this.mConsents.trackBehavioralData;\r\n }\r\n\r\n public set trackBehavioralData(value: boolean) {\r\n this.mConsents.trackBehavioralData = value;\r\n this.emit(\"updated\", this.mConsents);\r\n }\r\n}\r\n\r\n/**\r\n * The users information when serialized.\r\n * See {@link User.serialize}.\r\n */\r\nexport interface UserInfo {\r\n id: string;\r\n name: string;\r\n idpId: string;\r\n idpName: string;\r\n externalId: string;\r\n consents: IUserConsents;\r\n}\r\n\r\n/**\r\n * The users session information when serialized.\r\n * See {@link User.serialize}.\r\n */\r\nexport interface UserSessionInfo {\r\n user: UserInfo;\r\n authentication?: AuthInfo;\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Used by users of User that need to know when its data changes\r\n */\r\n export interface UserEvents {\r\n consentsUpdated: (consents: IUserConsents) => void;\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport GFN from \"..\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { ServiceEndpointEntity, ServiceInfoResponseEntity } from \"../server/server.entities\";\r\nimport { ServiceProviderEndpoint } from \"../server/server.types\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { StarfleetUserIdentity } from \"../starfleet/starfleet.types\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { AuthInfo } from \"./auth.types\";\r\nimport { UserConsents, IUserConsents, UserSessionInfo, UserEvents, DEFAULT_USER_CONSENTS } from \"./user.types\"\r\n\r\n/**\r\n * Represents a basic user, which could be an authenticated user or a guestmode user.\r\n */\r\nexport abstract class User extends EventEmitter {\r\n protected readonly mConfiguration: Configuration;\r\n protected readonly mSettings: Settings;\r\n protected readonly mRestClient: RestClient;\r\n protected mId: string = \"\";\r\n protected mExternalId: string = \"\";\r\n protected mDisplayName: string = \"\";\r\n protected mIdpId: string = \"\";\r\n protected mIdpName: string = \"\";\r\n protected mConsents: UserConsents;\r\n protected mServiceEndpoint: Nullable = null;\r\n\r\n /**\r\n * Gets the identifier of the user.\r\n */\r\n public get id(): string {\r\n return this.mId;\r\n }\r\n\r\n /**\r\n * Gets the external identifier of the user.\r\n */\r\n public get externalId(): string {\r\n return this.mExternalId;\r\n }\r\n\r\n /**\r\n * Gets the display name of the user.\r\n */\r\n public get displayName(): string {\r\n return this.mDisplayName;\r\n }\r\n\r\n /**\r\n * Gets the identity provider id the user logged in with.\r\n */\r\n public get idpId(): string {\r\n return this.mIdpId;\r\n }\r\n\r\n /**\r\n * Gets the identity provider name the user logged in with.\r\n */\r\n public get idpName(): string {\r\n return this.mIdpName;\r\n }\r\n\r\n /**\r\n * Gets the effective consent values of the user.\r\n */\r\n public get consents(): IUserConsents {\r\n return this.mConsents;\r\n }\r\n\r\n /**\r\n * Gets a value that indicates whether the user is logged in.\r\n */\r\n public abstract get isLoggedIn(): boolean;\r\n\r\n /**\r\n * Gets a value that indicates whether the user is a guest user.\r\n */\r\n public abstract get isGuest(): boolean;\r\n\r\n /**\r\n * Gets the ID token for the user\r\n */\r\n public abstract get idToken(): string;\r\n\r\n /**\r\n * Gets a value that indicates whether the user is from an affiliate, e.g. not an\r\n * NVIDIA user.\r\n */\r\n public get isAffiliate(): boolean {\r\n if (!this.mServiceEndpoint) {\r\n return !Utils.string.startsWith(this.mIdpName, \"nvidia\");\r\n }\r\n\r\n const defaultIdpId: string = this.mServiceEndpoint.defaultEndpoint.idpId as string;\r\n return !Utils.string.equals(defaultIdpId, this.idpId, true);\r\n }\r\n\r\n /**\r\n * Gets the service url configured for this users login provider.\r\n */\r\n public get streamingServiceUrl(): string {\r\n // use the service url for the users IdP and fallback to the\r\n // default IdP if one specific to the user was not found\r\n if (this.mServiceEndpoint) {\r\n return (this.mServiceEndpoint.endpoint ?? this.mServiceEndpoint.defaultEndpoint).streamingServiceUrl as string;\r\n }\r\n\r\n // otherwise, use the grid server url that is pre-configured\r\n // for the environment\r\n return this.mConfiguration.grid.serverUrl;\r\n }\r\n\r\n /**\r\n * @deprecated\r\n *\r\n * Use {@link GFN.consent.acceptEula} instead\r\n */\r\n public get hasAcceptedEULA(): boolean {\r\n return (window as any).GFN.consent.acceptEula;\r\n }\r\n\r\n /** @internal **/\r\n constructor(config: Configuration, settings: Settings, restClient: RestClient) {\r\n super();\r\n this.mConfiguration = config;\r\n this.mSettings = settings;\r\n this.mRestClient = restClient;\r\n this.mConsents = new UserConsents(DEFAULT_USER_CONSENTS);\r\n this.mConsents.on(\"updated\", this.onConsentsUpdated.bind(this));\r\n }\r\n\r\n /** @internal **/\r\n public updateServiceProvider(serviceInfo: ServiceInfoResponseEntity): void {\r\n this.mServiceEndpoint = User.FindServiceEndpoint(serviceInfo, this.mIdpId);\r\n }\r\n\r\n /**\r\n * Removes user from storage.\r\n *\r\n * @param key\r\n * The key that contains the saved user.\r\n *\r\n * @param storage\r\n * The {@link IStorage} where the user was saved. Optional, if omitted,\r\n * the storage provided by {@link Settings.storageFactory} will be used.\r\n */\r\n public async deleteFromStorage(key: string, storage?: IStorage): Promise {\r\n storage = storage ?? this.mSettings.storageFactory.create();\r\n return storage.remove(key);\r\n }\r\n\r\n private static FindServiceEndpoint(serviceInfo: ServiceInfoResponseEntity, idpId: string): ServiceProviderEndpoint {\r\n if (serviceInfo.gfnServiceInfo && serviceInfo.gfnServiceInfo.gfnServiceEndpoints) {\r\n const defaultProvider: string = serviceInfo.gfnServiceInfo.defaultProvider as string;\r\n let endpoint: Nullable = null;\r\n let defaultEndpoint: Nullable = null;\r\n\r\n for (const ep of serviceInfo.gfnServiceInfo.gfnServiceEndpoints) {\r\n\r\n // find the endpoint which matches the idp\r\n if (!endpoint && Utils.string.equals(idpId, ep.idpId!, true)) {\r\n endpoint = ep;\r\n }\r\n\r\n // find the endpoint which matches the default login provider\r\n if (!defaultEndpoint && Utils.string.equals(ep.loginProvider!, defaultProvider)) {\r\n defaultEndpoint = ep;\r\n }\r\n\r\n if (defaultEndpoint !== null && endpoint !== null) {\r\n break;\r\n }\r\n }\r\n\r\n if (defaultEndpoint !== null || endpoint !== null) {\r\n return {\r\n defaultEndpoint: defaultEndpoint,\r\n endpoint: endpoint\r\n }\r\n }\r\n }\r\n\r\n throw new APIError(APIErrorCode.UserEndpointNotFound);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n *\r\n * Use {@link GFN.consent.acceptEula} instead\r\n */\r\n public acceptEula(accepted: boolean): void {\r\n (window as any).GFN.consent.acceptEula = true;\r\n }\r\n\r\n\r\n public onConsentsUpdated(consents: IUserConsents) {\r\n this.emit(\"consentsUpdated\", consents);\r\n }\r\n}\r\n","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { StarfleetUserIdentity } from \"../starfleet/starfleet.types\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { AuthInfo } from \"./auth.types\";\r\nimport { User } from \"./user\";\r\nimport { UserConsents, UserSessionInfo } from \"./user.types\"\r\n\r\n/**\r\n * Represents a logged in user.\r\n */\r\nexport class AuthorizedUser extends User {\r\n protected mAuthInfo: Nullable = null;\r\n\r\n /**\r\n * Gets the authorization information.\r\n */\r\n public get authInfo(): Nullable {\r\n return this.mAuthInfo;\r\n }\r\n\r\n public get isLoggedIn(): boolean {\r\n return (this.mAuthInfo !== null && this.mAuthInfo.idToken.value !== \"\");\r\n }\r\n\r\n public get isGuest(): boolean {\r\n return false;\r\n }\r\n\r\n public get idToken(): string {\r\n return this.mAuthInfo?.idToken.value || \"\";\r\n }\r\n\r\n /** @internal **/\r\n constructor(config: Configuration, settings: Settings, restClient: RestClient) {\r\n super(config, settings, restClient);\r\n }\r\n\r\n /**\r\n * Updates the user authorization information. Unless the client is performing their\r\n * own authorization requests, this should never need to be called.\r\n *\r\n * @param authInfo The new authorization information.\r\n */\r\n public setAuthInfo(authInfo: AuthInfo): void {\r\n this.mAuthInfo = authInfo;\r\n\r\n if (this.mAuthInfo.idToken.value.length > 0) {\r\n const tokenParts: string[] = this.mAuthInfo.idToken.value.split(\".\");\r\n\r\n if (tokenParts.length <= 1) {\r\n throw new APIError(APIErrorCode.InvalidToken, \"The idToken is invalid.\");\r\n }\r\n\r\n const payload: StarfleetUserIdentity = JSON.parse(Utils.base64.url_decode(tokenParts[1]));\r\n\r\n this.mId = payload.sub;\r\n this.mExternalId = payload.external_id;\r\n this.mDisplayName = payload.preferred_username;\r\n this.mIdpId = payload.idp_id;\r\n this.mIdpName = payload.idp_name;\r\n\r\n if (payload.consent) {\r\n this.mConsents.trackTechnicalData = payload.consent.trackTechnicalData;\r\n this.mConsents.trackBehavioralData = payload.consent.trackBehavioralData;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Serializes the this user instance into a JSON string. The instance is\r\n * represented as an {@link UserSessionInfo}.\r\n *\r\n * @returns\r\n * A JSON string that contains the user information.\r\n */\r\n public serialize(): string {\r\n const sessionInfo: UserSessionInfo = {\r\n user: {\r\n id: this.mId,\r\n name: this.mDisplayName,\r\n externalId: this.mExternalId,\r\n idpId: this.mIdpId,\r\n idpName: this.mIdpName,\r\n consents: {\r\n trackBehavioralData: this.mConsents.trackBehavioralData,\r\n trackTechnicalData: this.mConsents.trackTechnicalData\r\n }\r\n }\r\n };\r\n\r\n if (this.mAuthInfo !== null) {\r\n sessionInfo.authentication = {\r\n idToken: {\r\n value: this.mAuthInfo.idToken.value,\r\n expiresOn: this.mAuthInfo.idToken.expiresOn\r\n }\r\n };\r\n\r\n if (this.mAuthInfo.clientToken) {\r\n sessionInfo.authentication.clientToken = {\r\n value: this.mAuthInfo.clientToken.value,\r\n expiresOn: this.mAuthInfo.clientToken.expiresOn\r\n };\r\n }\r\n\r\n if (this.mAuthInfo.accessToken) {\r\n sessionInfo.authentication.accessToken = {\r\n value: this.mAuthInfo.accessToken.value,\r\n expiresOn: this.mAuthInfo.accessToken.expiresOn\r\n };\r\n }\r\n }\r\n\r\n return JSON.stringify(sessionInfo);\r\n }\r\n\r\n /**\r\n * Deserializes a previously serialized user object.\r\n *\r\n * @param data A JSON string that represents an {@link UserSessionInfo} object.\r\n */\r\n public deserialize(data: string): void {\r\n if (!data) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'data' parameter cannot be empty.\");\r\n }\r\n\r\n let sessionInfo: UserSessionInfo;\r\n try {\r\n sessionInfo = JSON.parse(data) as UserSessionInfo;\r\n } catch (e) {\r\n throw new APIError(APIErrorCode.SerializedUserMalformed, `Unable to parse serialized User: ${e}`)\r\n }\r\n\r\n this.mId = sessionInfo.user.id;\r\n this.mDisplayName = sessionInfo.user.name;\r\n this.mExternalId = sessionInfo.user.externalId;\r\n this.mIdpId = sessionInfo.user.idpId;\r\n this.mIdpName = sessionInfo.user.idpName;\r\n this.mConsents = new UserConsents({\r\n trackBehavioralData: sessionInfo.user.consents.trackBehavioralData,\r\n trackTechnicalData: sessionInfo.user.consents.trackTechnicalData\r\n });\r\n this.mConsents.on(\"updated\", this.onConsentsUpdated.bind(this));\r\n\r\n this.mAuthInfo = null;\r\n\r\n if (sessionInfo.authentication) {\r\n this.mAuthInfo = {\r\n idToken: {\r\n value: sessionInfo.authentication.idToken.value,\r\n expiresOn: new Date(sessionInfo.authentication.idToken.expiresOn)\r\n }\r\n };\r\n\r\n if (sessionInfo.authentication.clientToken) {\r\n this.mAuthInfo.clientToken = {\r\n value: sessionInfo.authentication.clientToken.value,\r\n expiresOn: new Date(sessionInfo.authentication.clientToken.expiresOn)\r\n };\r\n }\r\n\r\n if (sessionInfo.authentication.accessToken) {\r\n this.mAuthInfo.accessToken = {\r\n value: sessionInfo.authentication.accessToken.value,\r\n expiresOn: new Date(sessionInfo.authentication.accessToken.expiresOn)\r\n };\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * Reads a user from storage and deserializes into this instance.\r\n *\r\n * @param key\r\n * The key that contains the saved user.\r\n *\r\n * @param storage\r\n * The {@link IStorage} where the user was saved. Optional, if omitted,\r\n * the storage provided by {@link Settings.storageFactory} will be used.\r\n */\r\n public async readFromStorage(key: string, storage?: IStorage): Promise {\r\n storage = storage ?? this.mSettings.storageFactory.create();\r\n\r\n const serializedUser: any = await storage.get(key);\r\n\r\n if (!serializedUser) {\r\n throw new APIError(APIErrorCode.UserNotFoundInStorage, `No user found for the specified key '${key}'.`);\r\n }\r\n\r\n // deserialize will throw if it cannot parse the entire user semantically\r\n this.deserialize(serializedUser);\r\n }\r\n\r\n /**\r\n * Writes a serialized version of this instance into storage.\r\n *\r\n * @param key\r\n * The key that will be used to locate this user.\r\n *\r\n * @param storage\r\n * The {@link IStorage} where the user is to be saved. Optional, if omitted,\r\n * the storage provided by {@link Settings.storageFactory} will be used.\r\n */\r\n public async writeToStorage(key: string, storage?: IStorage): Promise {\r\n storage = storage ?? this.mSettings.storageFactory.create();\r\n return storage.set(key, this.serialize());\r\n }\r\n\r\n /**\r\n * Request NVIDIA backend to send the logged-in user an email which allows them to view telemetry that has been collected from their account\r\n *\r\n * @param userEmail\r\n * The email address to send the data link to\r\n * @param locale\r\n * The language to use for the email\r\n */\r\n public async requestUserTelemetry(userEmail: string, locale: string): Promise {\r\n return this.mRestClient.requestUserTelemetry(userEmail, locale, this.authInfo?.idToken || null)\r\n }\r\n\r\n /** Request NVIDIA backend to send the logged-in user an email which allows them to delete telemetry that has been collected from their account **/\r\n public async deleteUserTelemetry(userEmail: string, locale: string) {\r\n return this.mRestClient.deleteUserTelemetry(userEmail, locale, this.authInfo?.idToken || null)\r\n }\r\n}\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Represents an identifier of a host platform.\r\n */\r\nexport enum PlatformID {\r\n Browser = \"browser\",\r\n Mac = \"mac\",\r\n Windows = \"windows\",\r\n Linux = \"linux\",\r\n AppleTV = \"apple-tv\",\r\n AppleMobile = \"apple-mobile\",\r\n Android = \"android\",\r\n SamsungTV = \"samsung-tv\",\r\n Chromebook = \"chromebook\",\r\n ChromeCast = \"chromecast\",\r\n AmazonFire = \"amazon-fire\",\r\n Shield = \"shield\",\r\n LGTV = \"lg-tv\",\r\n Xbox = \"xbox\",\r\n Huawei = \"huawei\",\r\n MiBox = \"mibox\",\r\n TVision = \"tvision\",\r\n KbroA0 = \"kbroa0\",\r\n JioStb = \"jio-stb\",\r\n LGUPlus = \"lgu-plus\",\r\n Steam = \"steam\",\r\n ConnectedCar = \"connected-car\"\r\n}\r\n\r\n/**\r\n * Represents a platform classification.\r\n */\r\nexport enum PlatformClass {\r\n Web,\r\n Mobile,\r\n Desktop,\r\n TV,\r\n Console\r\n}","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nexport enum LoggingLevel {\r\n None = -1,\r\n Error = 1,\r\n Warning,\r\n Info,\r\n Verbose,\r\n Event\r\n}\r\n\r\nexport const LOGGING_LEVEL_MAP: Map = new Map([\r\n [\"none\", LoggingLevel.None],\r\n [\"error\", LoggingLevel.Error],\r\n [\"warning\", LoggingLevel.Warning],\r\n [\"info\", LoggingLevel.Info],\r\n [\"verbose\", LoggingLevel.Verbose],\r\n [\"event\", LoggingLevel.Event],\r\n]);\r\n\r\nexport interface LoggingConfiguration {\r\n level: string\r\n}\r\n\r\nexport interface ILogger {\r\n error(...args: any[]): void;\r\n warn(...args: any[]): void;\r\n info(...args: any[]): void;\r\n verbose(...args: any[]): void;\r\n event(...args: any[]): void;\r\n raw(level: LoggingLevel, ...args: any[]): void;\r\n}\r\n\r\nexport interface ILogCallback {\r\n (level: LoggingLevel, ...logArgs: any[]) : void;\r\n}\r\n\r\nexport interface ILogWriter {\r\n write: ILogCallback;\r\n}\r\n\r\nexport interface LogMessage {\r\n level: LoggingLevel;\r\n args: any[];\r\n}\r\n\r\n/**\r\n * Represents a device log buffer with filename.\r\n */\r\nexport interface LogFile {\r\n filename: string;\r\n contents: string;\r\n}\r\n","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { ILogWriter, LoggingLevel } from \"./logging.types\";\r\n\r\nexport class ConsoleLogWriter implements ILogWriter {\r\n\r\n private readonly mConsoleFns: Map void>;\r\n\r\n constructor () {\r\n this.mConsoleFns = new Map void>([\r\n [LoggingLevel.None, (msg: string) => void {}],\r\n [LoggingLevel.Error, (msg: string) => {window.console.error(msg)}],\r\n [LoggingLevel.Warning, (msg: string) => {window.console.warn(msg)}],\r\n [LoggingLevel.Info, (msg: string) => {window.console.info(msg)}],\r\n [LoggingLevel.Verbose, (msg: string) => {window.console.log(msg)}],\r\n [LoggingLevel.Event, (msg: string) => {window.console.log(msg)}],\r\n ]);\r\n }\r\n\r\n public write(level: LoggingLevel, args: any[]) {\r\n this.mConsoleFns.get(level)!(args.join(\" \"));\r\n }\r\n}\r\n","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { ILogCallback, ILogger, ILogWriter, LoggingConfiguration, LoggingLevel, LOGGING_LEVEL_MAP, LogMessage } from \"./logging.types\";\r\nimport { ConsoleLogWriter } from \"./console-log-writer\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Utils } from \"../core/utils\";\r\n\r\nexport class Logger implements ILogger {\r\n private mPrefix: string = \"\";\r\n private mLogCallback: ILogCallback;\r\n\r\n constructor(\r\n prefix: string,\r\n logCallback: ILogCallback\r\n ) {\r\n this.mPrefix = prefix;\r\n this.mLogCallback = logCallback;\r\n }\r\n\r\n public error(...args: any[]): void {\r\n this.logEntry(LoggingLevel.Error, args);\r\n }\r\n\r\n public warn(...args: any[]): void {\r\n this.logEntry(LoggingLevel.Warning, args);\r\n }\r\n\r\n public info(...args: any[]): void {\r\n this.logEntry(LoggingLevel.Info, args);\r\n }\r\n\r\n public verbose(...args: any[]): void {\r\n this.logEntry(LoggingLevel.Verbose, args);\r\n }\r\n\r\n public event(...args: any[]): void {\r\n this.logEntry(LoggingLevel.Event, args);\r\n }\r\n\r\n public raw(level: LoggingLevel, msg: string): void {\r\n this.mLogCallback(level, [msg]);\r\n }\r\n\r\n private logEntry(level: LoggingLevel, ...args: any[]): void {\r\n this.mLogCallback(level,[\r\n new Date().toISOString(),\r\n LoggingLevel[level].toUpperCase().padEnd(7, \" \"),\r\n this.mPrefix,\r\n ...args\r\n ]);\r\n }\r\n}\r\n\r\n/** @internal\r\n *\r\n * Initially, we don't have a logging configuration, but some components may still\r\n * want to send logs during construction or init time. So to start, create a console\r\n * log writer that write everything. At the same time, queue up any log messages that\r\n * come in.\r\n * After initialize(), create the desired list of log writers with the desired config,\r\n * and replay the queued up log messages to writers (But not the ConsoleLogWriter, since\r\n * these messages already went to console)\r\n */\r\nexport class LoggingService {\r\n private mLoggers: Map = new Map();\r\n private mLogWriters: ILogWriter[] = [];\r\n private mLoggerNamePrefix: string = \"\";\r\n private mLogLevel: LoggingLevel = LoggingLevel.Event;\r\n private mPreInitQueue: LogMessage[] = [];\r\n private mInitialized = false;\r\n\r\n public get level() {\r\n return this.mLogLevel;\r\n }\r\n\r\n public get prefix() {\r\n return this.mLoggerNamePrefix;\r\n }\r\n\r\n public constructor() {\r\n let scriptName = Utils.getScriptName();\r\n this.mLoggerNamePrefix = scriptName.substring(0, scriptName.lastIndexOf(\".\"));\r\n\r\n // We don't have the logging configuration, but create a console writer immediately\r\n // anyway to show bring-up logs directly to console\r\n this.addWriter(new ConsoleLogWriter());\r\n }\r\n\r\n public initialize(config: LoggingConfiguration) {\r\n if (!LOGGING_LEVEL_MAP.has(config.level)) {\r\n throw new APIError(APIErrorCode.InvalidParameter, `Invalid logging level ${config.level}`);\r\n }\r\n\r\n // TODO: Create writers based on LoggingConfiguration\r\n this.mLogLevel = LOGGING_LEVEL_MAP.get(config.level)!;\r\n\r\n this.mInitialized = true;\r\n this.replayPreInitLogs();\r\n\r\n return this;\r\n }\r\n\r\n public addWriter(writer: ILogWriter) {\r\n this.mLogWriters.push(writer);\r\n }\r\n\r\n public replayPreInitLogs() {\r\n // Don't replay for the first writer, that's the console log writer, which\r\n // has already printed all these logs to console.\r\n for (let i = 1; i < this.mLogWriters.length; ++i) {\r\n for (const msg of this.mPreInitQueue) {\r\n if (msg.level <= this.mLogLevel) {\r\n this.mLogWriters[i].write(msg.level, msg.args);\r\n }\r\n }\r\n }\r\n this.mPreInitQueue = [];\r\n }\r\n\r\n public clearWriters() {\r\n this.mLogWriters.length = 0;\r\n }\r\n\r\n public write(level: LoggingLevel, ...args: any[]) {\r\n if (level <= this.mLogLevel) {\r\n this.mLogWriters.forEach(function (logWriter) {\r\n logWriter.write(level, ...args);\r\n });\r\n if (!this.mInitialized) {\r\n this.mPreInitQueue.push({\r\n level: level,\r\n args: [...args]\r\n });\r\n }\r\n }\r\n }\r\n\r\n public getLogger(loggerName: string): ILogger {\r\n if (!this.mLoggers.get(loggerName)) {\r\n this.mLoggers.set(loggerName, new Logger(\r\n `${this.mLoggerNamePrefix}/${loggerName}`,\r\n this.write.bind(this)\r\n ));\r\n }\r\n return this.mLoggers.get(loggerName)!;\r\n }\r\n}\r\n\r\nexport const Logging = new LoggingService();\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpError, HttpErrorReason, IHttpRateLimiterConfiguration } from \"../core/http-client.types\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\n\r\n/** @internal **/\r\nexport class RestClientError extends HttpError {\r\n private readonly mStatus: number;\r\n\r\n public get status(): number {\r\n return this.mStatus;\r\n }\r\n\r\n constructor(code: number, url: string, status: number, message?: string) {\r\n super(code, url, HttpErrorReason.Generic, message);\r\n\r\n this.mStatus = status ?? 0;\r\n }\r\n\r\n public toString(): string {\r\n let msg: string = super.toString();\r\n\r\n if (this.mStatus && Utils.string.contains(msg, \"url=\")) {\r\n return `${msg}, status=${this.mStatus}`;\r\n }\r\n\r\n return msg;\r\n }\r\n}\r\n\r\n\r\n/** @internal **/\r\nexport interface GraphQLErrorMessageLocation {\r\n line: number;\r\n column: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface GraphQLErrorMessage {\r\n message: string;\r\n locations?: GraphQLErrorMessageLocation[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface GraphQLErrorResponse {\r\n errors: GraphQLErrorMessage[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface GraphQLResponse {\r\n data: any;\r\n}\r\n\r\n/** @internal **/\r\nexport interface GraphQLPayload {\r\n query: string;\r\n variables: Nullable>;\r\n operationName: Nullable;\r\n}\r\n\r\n/** @internal **/\r\nexport class RestClientGraphQLError extends RestClientError {\r\n private readonly mErrorResponse: GraphQLErrorResponse;\r\n\r\n public get response(): GraphQLErrorResponse {\r\n return this.mErrorResponse;\r\n }\r\n\r\n public get reasonDescription(): string {\r\n let reason: string = \"\";\r\n\r\n for (const err of this.mErrorResponse.errors) {\r\n reason += \"\\n * \" + err.message;\r\n\r\n if (err.locations) {\r\n reason += \" [\";\r\n if (err.locations.length === 1) {\r\n const loc: GraphQLErrorMessageLocation = err.locations[0];\r\n reason += `${loc.line}:${loc.column}`;\r\n } else {\r\n let isFirst: boolean = true;\r\n for (const loc of err.locations) {\r\n if (!isFirst) {\r\n reason += \", \";\r\n }\r\n\r\n reason += `${loc.line}:${loc.column}`\r\n isFirst = false;\r\n }\r\n }\r\n reason += \"]\";\r\n }\r\n }\r\n\r\n return reason;\r\n }\r\n\r\n constructor(code: number, url: string, status: number, response: GraphQLErrorResponse) {\r\n const errStr = response.errors.reduce((errStr: string, err: GraphQLErrorMessage) => errStr + `${err.message}\\n`,\r\n `GraphQL query failed: HTTP error ${status} with error details: \\n`);\r\n super(code, url, status, errStr);\r\n\r\n this.mErrorResponse = response;\r\n }\r\n}\r\n\r\nexport class RestClientGfcChunkError extends RestClientError {\r\n public readonly xDataOffset: number;\r\n\r\n constructor(code: number, url: string, status: number, xDataOffset: number, message?: string) {\r\n super(code, url, status, message);\r\n this.xDataOffset = xDataOffset;\r\n }\r\n}\r\n\r\n/** @internal **/\r\nexport interface RestClientConfiguration {\r\n rateLimiters?: IHttpRateLimiterConfiguration[];\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Cross-reference with https://confluence.nvidia.com/display/SWGPU/Current+GFN+PC+Client+Telemetry+Events\r\n * Not all GFNPC fields are added here.\r\n */\r\nexport enum ServiceName {\r\n ALS = \"ALS\",\r\n Lcars = \"Lcars\",\r\n GxTarget = \"GxTarget\",\r\n Gfc = \"Gfc\",\r\n Grid = \"Grid\",\r\n Starfleet = \"Starfleet\",\r\n NES = \"NES\",\r\n I18N = \"i18n\",\r\n Voltron = \"Voltron\",\r\n Other = \"Other\",\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Cross-reference with https://confluence.nvidia.com/display/SWGPU/Current+GFN+PC+Client+Telemetry+Events\r\n * Not all GFNPC fields are added here. Some are added here and not present in GFNPC\r\n */\r\nexport enum ServiceUseCase {\r\n AlsTokenExchange = \"AlsTokenExchange\",\r\n FetchJSFile = \"FetchJSFile\",\r\n FetchLocaleJson = \"FetchLocaleJson\",\r\n GetRemoteConfig = \"GetRemoteConfig\",\r\n GetCloudVariable = \"GetCloudVariable\",\r\n GfcHeadRequest = \"FeedbackHead\",\r\n GfcAttachmentRequest = \"FeedbackAttachment\",\r\n GridGetSpecificServerInformation = \"GetSpecificServerInformation\",\r\n GridGetServerInformation = \"GetServerInformation\",\r\n GridGetActiveSessions = \"GetActiveSessions\",\r\n GridGetSession = \"GetSession\",\r\n GridDeleteSession = \"DeleteSession\",\r\n GridCreateSession = \"CreateSession\",\r\n GridUpdateSession = \"UpdateSession\",\r\n LCARSGetAppData = \"GetAppData\",\r\n LCARSLayoutGetSection = \"Layout_Get_Section\",\r\n LCARSLayoutGetSections = \"Layout_Get_Sections\",\r\n LCARSGetGenres = \"GetGenres\",\r\n LCARSGetAppStores = \"GetAppStores\",\r\n LCARSGetUserAccountStores = \"GetUserAccountStores\",\r\n LCARSGetRatingsInfo = \"GetRatingsInfo\",\r\n LCARSGetLayout = \"GetLayout\",\r\n LCARSGetApps = \"GetApps\",\r\n NESGetSubscriptions = \"NES_Get_Subscriptions\",\r\n NESGetClientStreamingQuality = \"NES_GetClientStreamingQuality\",\r\n NESGetProducts = \"NES_Get_Products\",\r\n NESGetLanguages = \"NES_Get_Languages\",\r\n NESGetCountries = \"NES_Get_Countries\",\r\n NESGetProduct = \"NES_Get_Product\",\r\n NESAddToLibrary = \"NES_Add_To_Library\",\r\n NESRemoveFromLibrary = \"NES_Remove_From_Library\",\r\n NESGetServiceUrls = \"NES_Get_ServiceUrls\",\r\n StarfleetLoadProviderConfig = \"LoadProviderConfig\",\r\n StarfleetGetClientToken = \"Get_Client_Token\",\r\n StarfleetGetAccessToken = \"Get_Access_Token\",\r\n StarfleetStartDeviceAuthorization = \"StartDeviceAuthorization\",\r\n UserDataGet = \"UserDataGet\",\r\n UserDataDelete = \"UserDataDelete\",\r\n Other = \"Other\",\r\n}\r\n\r\n/**\r\n * @internal\r\n *\r\n * Cross-reference with https://confluence.nvidia.com/display/SWGPU/Current+GFN+PC+Client+Telemetry+Events\r\n */\r\nexport enum ServiceSubUseCase {\r\n Other = \"Other\"\r\n}\r\n","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { CatalogConfiguration } from \"../catalog/catalog.types\";\r\nimport { HttpServerConfiguration, IHttpBackoffConfiguration } from \"../core/http-client.types\";\r\nimport { RecursivePartial } from \"../core/util.types\";\r\nimport { LoggingConfiguration } from \"../logging/logging.types\";\r\nimport { RemoteLoggerConfiguration } from \"../logging/remote-logger.types\";\r\nimport { RestClientConfiguration } from \"../rest/rest-client.types\";\r\nimport { SettingsOverrides } from \"../settings/settings.types\";\r\nimport { StreamerConfiguration } from \"../streamer/streamer.types\";\r\nimport { FeedbackConfiguration } from \"../telemetry/feedback.types\";\r\nimport { TelemetryConfiguration } from \"../telemetry/telemetry.types\";\r\nimport { GxTargetConfiguration } from \"../gxtarget/gxtarget.types\";\r\nimport { AccountLinkingConfiguration } from \"../guestmode/guestmode.types\";\r\n\r\n/**\r\n * @internal\r\n *\r\n * Events that are dispatched from {@link GFN.Configuration}.\r\n */\r\nexport interface ConfigurationEvents {\r\n /**\r\n * Sent when the remote config service has updated the configuration.\r\n */\r\n updated: () => void;\r\n}\r\n\r\n/** @internal **/\r\nexport enum BuildType {\r\n Local = \"local\",\r\n Virtual = \"virtual\",\r\n Automatic = \"automatic\",\r\n Official = \"official\"\r\n}\r\n\r\n/** @internal **/\r\nexport enum BuildFlavor {\r\n Development = \"dev\",\r\n Production = \"prod\"\r\n}\r\n\r\n/** @internal **/\r\nexport interface BuildConfiguration {\r\n configType: string;\r\n buildType: BuildType;\r\n flavor?: BuildFlavor;\r\n version?: string;\r\n tag?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface SdkConfiguration {\r\n /**\r\n * Contains the SDK's CDN url without the version moniker, this is used to build\r\n * a full url to the CDN's redirect page.\r\n *\r\n * @example\r\n * https:///gfn/client-sdk\r\n */\r\n cdnUrl: string;\r\n\r\n /**\r\n * The browser callback url used to (re)launch a native application from the built-in browser.\r\n *\r\n * @example\r\n * gfn://partner\r\n */\r\n browserCallbackUrl: string;\r\n\r\n /**\r\n * Optional, and typically used for debug. If this is set, and /gfn-client-sdk-wrapper.js loaded, it will\r\n * load and initialize gfn-client-sdk.js from the given location instead of from /gfn-client-sdk.js\r\n *\r\n * @example\r\n * https:///gfn/client-sdk//gfn-client-sdk.js\r\n * @example\r\n * https://localhost:8002/gfn-client-sdk.js\r\n */\r\n wrapperSdkUrl: string;\r\n\r\n /**\r\n * Feature Toggle Switches for OSC\r\n */\r\n enableTouchOsc: boolean;\r\n enableDesktopOsc: boolean;\r\n}\r\n\r\n/** @internal **/\r\nexport interface NetworkTestConfiguration {\r\n port: number;\r\n disableAutomaticTest: boolean;\r\n}\r\n\r\n/** @internal **/\r\nexport interface NetworkIndicatorsConfiguration {\r\n alertThreshold: number;\r\n warningThreshold: number;\r\n initializationDelay: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface Config {\r\n build: BuildConfiguration;\r\n sdk: SdkConfiguration;\r\n logging: LoggingConfiguration;\r\n catalog: CatalogConfiguration;\r\n entitlement: HttpServerConfiguration;\r\n grid: HttpServerConfiguration;\r\n accountLinking: AccountLinkingConfiguration;\r\n serviceInfo: HttpServerConfiguration;\r\n starfleet: HttpServerConfiguration;\r\n streamer: StreamerConfiguration;\r\n networkTest: NetworkTestConfiguration;\r\n networkIndicators: NetworkIndicatorsConfiguration;\r\n restClient: RestClientConfiguration;\r\n gxTarget: GxTargetConfiguration;\r\n telemetry: TelemetryConfiguration;\r\n feedback: FeedbackConfiguration;\r\n remoteLogger: RemoteLoggerConfiguration;\r\n voltron: HttpServerConfiguration;\r\n settingsOverrides: SettingsOverrides;\r\n internal: RecursivePartial;\r\n}\r\n","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { VersionInfo, VersionParts } from \"./version.types\";\r\nimport { BuildFlavor, BuildType } from \"../configuration/configuration.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Nullable, Undefined } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\n\r\nconst logger = Logging.getLogger(\"version\");\r\n\r\n/**\r\n * Represents the versions of the javascript and runtime libraries\r\n */\r\nexport class Version {\r\n public readonly flavor: Undefined;\r\n public readonly buildType: BuildType;\r\n public readonly version: string;\r\n public readonly tag: string;\r\n public readonly runtimeVersion: string;\r\n public readonly runtimeTag: string;\r\n public readonly streamerName: string;\r\n public readonly streamerVersion: string;\r\n public readonly streamerTag: string;\r\n public readonly appName: string;\r\n public readonly appVersion: string;\r\n\r\n /** @internal **/\r\n public constructor(config: Configuration, runtimeVersion: Nullable = null, streamerVersion: Nullable = null, appVersion: Nullable = null) {\r\n this.flavor = config.build.flavor;\r\n this.buildType = config.build.buildType;\r\n this.version = config.build.version || \"\";\r\n this.tag = config.build.tag || \"\";\r\n\r\n if (runtimeVersion) {\r\n this.runtimeVersion = runtimeVersion.version;\r\n this.runtimeTag = runtimeVersion.tag;\r\n } else {\r\n this.runtimeVersion = \"\";\r\n this.runtimeTag = \"\";\r\n }\r\n\r\n if (streamerVersion) {\r\n this.streamerName = streamerVersion.name;\r\n this.streamerVersion = streamerVersion.version;\r\n this.streamerTag = streamerVersion.tag;\r\n } else {\r\n this.streamerName = \"\";\r\n this.streamerVersion = \"\";\r\n this.streamerTag = \"\";\r\n }\r\n\r\n if (appVersion) {\r\n this.appName = appVersion.name;\r\n this.appVersion = appVersion.version;\r\n } else {\r\n this.appName = \"\";\r\n this.appVersion = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Performs a version check against the host runtime and client on native platforms.\r\n * Also prints out the SDK version information.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RuntimVersionNew}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RuntimVersionOld}.\r\n *\r\n */\r\n public check() {\r\n const clientVersionParts = Version.ParseVersionString(this.version);\r\n if (this.runtimeVersion) {\r\n const runtimeVersionParts = Version.ParseVersionString(this.runtimeVersion)\r\n if (runtimeVersionParts.major > clientVersionParts.major) {\r\n throw new APIError(APIErrorCode.RuntimVersionNew, `Runtime version ${this.runtimeVersion} too new for client version ${this.version}`);\r\n } else if (runtimeVersionParts.major < clientVersionParts.major) {\r\n throw new APIError(APIErrorCode.RuntimVersionOld, `Runtime version ${this.runtimeVersion} too old for client version ${this.version}`);\r\n }\r\n }\r\n\r\n logger.info(`Version name: ${this.version} tag: ${this.tag} flavor: ${this.flavor} type: ${this.buildType}`)\r\n if (this.runtimeVersion) {\r\n logger.info(`Runtime Version name: ${this.runtimeVersion} tag: ${this.runtimeTag}`)\r\n }\r\n if (this.appVersion) {\r\n logger.info(`Application Version name: ${this.appName} version: ${this.appVersion}`);\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public static ParseVersionString(version: string): VersionParts {\r\n const arr = version.split(\".\", 3);\r\n\r\n if (arr.length !== 3) {\r\n throw new APIError(APIErrorCode.InvalidVersion, `Expected 3 part version number, received ${version}`);\r\n }\r\n\r\n const parts = {\r\n major: parseInt(arr[0]),\r\n minor: parseInt(arr[1]),\r\n patch: parseInt(arr[2]),\r\n }\r\n\r\n if (isNaN(parts.major) || isNaN(parts.minor) || isNaN(parts.patch)) {\r\n throw new APIError(APIErrorCode.InvalidVersion, `Invalid version, received ${version}`);\r\n }\r\n\r\n return parts;\r\n }\r\n\r\n public toString() {\r\n let versionString = `GFN Client SDK version \"${this.version}\"`;\r\n if (this.buildType) {\r\n versionString += \"_\" + this.buildType;\r\n }\r\n if (this.flavor) {\r\n versionString += \"_\" + this.flavor;\r\n }\r\n if (this.tag) {\r\n versionString += \"_\" + this.tag;\r\n }\r\n if (this.runtimeVersion?.length > 0) {\r\n versionString += `, Runtime version \"${this.runtimeVersion}\"`;\r\n if (this.runtimeTag) {\r\n versionString += \"_\" + this.runtimeTag;\r\n }\r\n }\r\n if (this.streamerVersion?.length > 0) {\r\n versionString += `, Streamer ${this.streamerName} version \"${this.streamerVersion}\"`;\r\n if (this.streamerTag) {\r\n versionString += \"_\" + this.streamerTag;\r\n }\r\n }\r\n\r\n if (this.appVersion?.length > 0) {\r\n versionString += `, App ${this.appName} version \"${this.appVersion}\"`;\r\n }\r\n return versionString;\r\n }\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { User } from \"./user\";\r\nimport { JWTPartner } from \"./jwt\";\r\nimport { DEFAULT_USER_CONSENTS } from \"./user.types\"\r\n\r\n/**\r\n * Represents a guest mode user.\r\n */\r\nexport class GuestUser extends User {\r\n private mToken: Nullable = null;\r\n private mPartnerSecureData: Nullable = null;\r\n private mPartnerId: Nullable = null;\r\n private mCmsId: Nullable = null;\r\n\r\n public get isLoggedIn(): boolean {\r\n return this.idToken !== \"\";\r\n }\r\n\r\n public get isGuest(): boolean {\r\n return true;\r\n }\r\n\r\n public get idToken(): string {\r\n return this.mToken?.token || \"\";\r\n }\r\n\r\n public get partnerSecureData(): Nullable {\r\n return this.mPartnerSecureData;\r\n }\r\n\r\n public get partnerId(): Nullable {\r\n return this.mPartnerId;\r\n }\r\n\r\n public get cmsId(): Nullable {\r\n return this.mCmsId;\r\n }\r\n\r\n /** @internal **/\r\n constructor(config: Configuration, settings: Settings, restClient: RestClient) {\r\n super(config, settings, restClient);\r\n }\r\n\r\n /**\r\n * Updates the user authorization information. Unless the client is performing their\r\n * own authorization requests, this should never need to be called.\r\n *\r\n * @param authInfo The new authorization information.\r\n */\r\n public setTokenInfo(token: JWTPartner, partnerSecureData: string): void {\r\n\r\n this.mToken = token;\r\n this.mPartnerSecureData = partnerSecureData;\r\n\r\n if (this.mToken) {\r\n this.mId = this.mToken.payload.sub;\r\n this.mPartnerId = this.mToken.payload.options?.partnerId;\r\n this.mCmsId = parseInt(this.mToken.payload.options?.cmsId);\r\n this.mConsents.trackTechnicalData = DEFAULT_USER_CONSENTS.trackTechnicalData;\r\n this.mConsents.trackBehavioralData = DEFAULT_USER_CONSENTS.trackBehavioralData;\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { IInitializable, Nullable, Point, Rect, Size, Undefined } from \"../core/util.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport {\r\n AuthAgent,\r\n AuthErrorId,\r\n AuthErrorResult,\r\n AuthFlowKind,\r\n AuthParameters,\r\n AuthResult,\r\n AuthState,\r\n AuthToken,\r\n AuthInfo,\r\n DeviceAuthParameters,\r\n DeviceAuthResult,\r\n LoginError,\r\n MissingTokenError,\r\n PartnerToken,\r\n AuthScope,\r\n AuthResponseMode,\r\n AuthPrompt\r\n} from \"./auth.types\";\r\n\r\nimport {\r\n StarfleetAuthorizeResult,\r\n StarfleetError,\r\n StarfleetProviderConfiguration,\r\n StarfleetTokenGrantType\r\n} from \"../starfleet/starfleet.types\";\r\n\r\nimport {\r\n StarfleetClientTokenResponseEntity,\r\n StarfleetDeviceAuthResponseEntity,\r\n StarfleetTokenRequestEntity,\r\n StarfleetTokenResponseEntity\r\n} from \"../starfleet/starfleet.entities\";\r\n\r\nimport { User } from \"./user\";\r\nimport { AuthorizedUser } from \"./authorized-user\";\r\nimport { Device } from \"../device/device\";\r\nimport { PlatformID } from \"../platform/platform.types\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { ServiceInfoResponseEntity } from \"../server/server.entities\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { RestClientError } from \"../rest/rest-client.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Consent } from \"./consent\";\r\nimport { DistributedTracing } from \"../telemetry/distributed-tracing\";\r\nimport { BuildFlavor } from \"../configuration/configuration.types\";\r\nimport { Platform } from \"../platform/platform\";\r\nimport { Version } from \"../version/version\";\r\nimport { VersionParts } from \"../version/version.types\";\r\nimport { AlsTokenExchangeData } from \"../guestmode/guestmode.types\";\r\nimport { GuestUser } from \"./guest-user\";\r\n\r\nconst GFN_AUTH_KEY: string = \"gfn_auth\";\r\nconst GFN_AUTH_ERROR_KEY: string = \"gfn_auth_error\";\r\nconst GFN_AUTH_POPUP_WINDOW_DEFAULT_FEATURES: string = \"status,scrollbars,resizable\";\r\nconst GFN_AUTH_POPUP_WINDOW_DEFAULT_SIZE: Size = { width: 600, height: 480 };\r\nconst GFN_DEFAULT_WINDOW_POLL_TIMEOUT: number = 900000; // 15 minutes\r\nconst GFN_DEFAULT_PARTNER_TOKEN_NAME: string = \"nv_gfn_partner_token\";\r\nconst GFN_DEFAULT_REDIRECT_URI_PAGE: string = \"auth-redirect.html\";\r\n\r\n/** @internal **/\r\nexport const GFN_STORAGE_LOGGED_IN_USER_KEY = \"$$nv-gfn-logged-in-user-{CLIENT_ID}\";\r\n\r\nconst logger = Logging.getLogger(\"idm/auth\");\r\n\r\n/**\r\n * Class for performing user authentication and authorization.\r\n */\r\nexport class Auth implements IInitializable {\r\n private readonly mDevice: Device;\r\n private readonly mConsent: Consent;\r\n private readonly mRestClient: RestClient;\r\n private readonly mRequestedDeviceAuthCancellations: string[] = [];\r\n private mConfiguration!: Configuration;\r\n private mSettings!: Settings;\r\n private mStorage!: IStorage;\r\n private mSdkVersion!: Version;\r\n private mStarfleetProviderConfiguration!: StarfleetProviderConfiguration;\r\n private mLoginWindow: Nullable = null;\r\n private mAuthorizedUser: Nullable = null;\r\n private mGuestUser: Nullable = null;\r\n private mUserStorageKey: Nullable = null;\r\n private mRefreshAccessTokenPromise: Nullable> = null;\r\n private mDistributedTracing: DistributedTracing;\r\n\r\n /**\r\n * Returns an HTML Window instance that was created during a call\r\n * to the {@link loginWithBrowserPopup} method; otherwise, will return\r\n * null.\r\n */\r\n public get loginWindow(): Nullable {\r\n return this.mLoginWindow;\r\n }\r\n\r\n /**\r\n * Gets the currently authorized user; otherwise, when no user\r\n * has yet to login, returns null.\r\n */\r\n public get authorizedUser(): Nullable {\r\n return this.mAuthorizedUser;\r\n }\r\n\r\n /** @private **/\r\n public set authorizedUser(value: Nullable) {\r\n this.mAuthorizedUser = value;\r\n // Need to clear out old guest users when a normal login occurs\r\n this.mGuestUser = null;\r\n\r\n // Update the consents service with the new user\r\n this.mConsent.user = this.mAuthorizedUser;\r\n\r\n // Save the user to storage when its mutable fields change\r\n if (this.mAuthorizedUser) {\r\n this.mAuthorizedUser.on(\"consentsUpdated\", this.onUserInfoUpdated.bind(this));\r\n }\r\n }\r\n\r\n /**\r\n * Guests the current gues user; otherwise, while no guest mode\r\n * user is active, returns null.\r\n */\r\n public get guestUser(): Nullable {\r\n return this.mGuestUser;\r\n }\r\n\r\n /** @private **/\r\n public set guestUser(value: Nullable) {\r\n this.mGuestUser = value;\r\n this.mConsent.user = this.mGuestUser;\r\n }\r\n\r\n public get currentUser(): Nullable {\r\n return this.authorizedUser ?? this.guestUser;\r\n }\r\n\r\n /** @internal **/\r\n constructor(device: Device, consent: Consent, restClient: RestClient, distributedTracing: DistributedTracing) {\r\n this.mDevice = device;\r\n this.mConsent = consent;\r\n this.mRestClient = restClient;\r\n this.mDistributedTracing = distributedTracing;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mConfiguration = context.configuration;\r\n this.mSettings = context.settings;\r\n this.mStorage = context.storage;\r\n this.mUserStorageKey = GFN_STORAGE_LOGGED_IN_USER_KEY.replace(\"{CLIENT_ID}\", this.mSettings.clientId);\r\n this.mSdkVersion = context.sdkVersion;\r\n\r\n this.mStarfleetProviderConfiguration = await this.mRestClient.loadStarfleetProviderConfiguration();\r\n }\r\n\r\n /** @internal */\r\n public onUserInfoUpdated(): void {\r\n this.saveCurrentUserToStorage();\r\n }\r\n\r\n /**\r\n * When a user has been authenticated, returns the identity token of this\r\n * user; otherwise, throws an {@link MissingTokenError} if no user has yet\r\n * to be authenticated.\r\n *\r\n * @returns\r\n * The identity token of the logged in user.\r\n *\r\n * @throws {@link MissingTokenError}\r\n *\r\n * @category\r\n * Token\r\n *\r\n */\r\n public getTokenOrThrow(): string {\r\n const token: string = this.getToken();\r\n if (!token) {\r\n throw new MissingTokenError();\r\n }\r\n\r\n return token;\r\n }\r\n\r\n /**\r\n * Gets a new token and if needed, a new client and identity tokens. When\r\n * finished, the {@link authorizedUser} will have been updated with\r\n * the latest tokens.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RefreshTokenWithNoUser}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RefreshTokenWithNoClientToken}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NotSupported}. The grant type is not supported.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Token\r\n *\r\n * @async\r\n */\r\n public async refreshAccessToken(): Promise {\r\n if (!this.mAuthorizedUser || !this.mAuthorizedUser.authInfo) {\r\n throw new APIError(APIErrorCode.RefreshTokenWithNoUser);\r\n }\r\n if (!this.mAuthorizedUser.authInfo.clientToken) {\r\n throw new APIError(APIErrorCode.RefreshTokenWithNoClientToken);\r\n }\r\n\r\n // Only allow one refresh to happen at a time\r\n if (!this.mRefreshAccessTokenPromise) {\r\n logger.info(\"Unauthorized API response. Attempting to refresh access token\");\r\n this.mRefreshAccessTokenPromise = this.authorizeClientToken(this.mAuthorizedUser.authInfo.clientToken.value, this.mAuthorizedUser.id)\r\n .then((result: AuthResult) => {\r\n logger.info(\"Token refreshed successfully.\");\r\n this.mRefreshAccessTokenPromise = null;\r\n return this.resetAuthorizedUser(result);\r\n }).catch((e) => {\r\n logger.error(\"Failed to refresh token.\");\r\n this.mRefreshAccessTokenPromise = null;\r\n throw e;\r\n });\r\n }\r\n\r\n return this.mRefreshAccessTokenPromise;\r\n }\r\n\r\n /**\r\n * Logs in the previously logged in user using persisted tokens. If the\r\n * previously logged in user had expired tokens, this will attempt to\r\n * refresh them. Otherwise, naively \"log in\" the user using the existing\r\n * tokens. The first authenticated call to be made will attempt to refresh\r\n * them if they are no longer valid.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserNotFoundInStorage}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NotSupported}. The grant type is not supported.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidToken}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserEndpointNotFound}.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Login\r\n *\r\n * @async\r\n */\r\n public async loginLastUser(): Promise {\r\n const user = new AuthorizedUser(this.mConfiguration, this.mSettings, this.mRestClient);\r\n await user.readFromStorage(this.mUserStorageKey!, this.mStorage);\r\n\r\n // if we have a client token, then try refreshing the users auth info\r\n // when the access token has expired (or does not exist)\r\n if (user.authInfo?.clientToken && (!user.authInfo!.accessToken || Auth.IsTokenExpired(user.authInfo!.accessToken))) {\r\n logger.info(\"User's tokens have expired. Attempting to refresh them\");\r\n const result: AuthResult = await this.authorizeClientToken(user.authInfo!.clientToken.value, user.id);\r\n return this.resetAuthorizedUser(result);\r\n } else {\r\n this.authorizedUser = user;\r\n\r\n // the service provider for the user could have changed since\r\n // the user was saved, need to update this and then save the\r\n // updated user back into storage\r\n await this.updateCurrentUserServiceProvider();\r\n return this.saveCurrentUserToStorage();\r\n }\r\n }\r\n\r\n /**\r\n * Creates a new {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}\r\n * that can be used to begin the login flow.\r\n *\r\n * @param authParams\r\n * Optional. The parameters needed to build the url.\r\n * @param extraParams\r\n * Optional. Extra parameters to be appended to the end of the query string.\r\n *\r\n * @returns\r\n * A URL that can be used to authorize a user.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. The {@link AuthParameters.responseType} must not be empty.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. When a redirect uri is either not provided or the default redirect uri could not be created.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. The {@link AuthParameters.nonce} must not be empty for Implicit and Hybrid flows.\r\n *\r\n * @category\r\n * Login\r\n *\r\n */\r\n public createLoginUrl(authParams?: AuthParameters, extraParams?: Record): URL {\r\n // use default parameters\r\n if (!authParams) {\r\n authParams = {\r\n responseType: \"code\",\r\n responseMode: AuthResponseMode.Query,\r\n scopes: [AuthScope.Consent, AuthScope.TkClient, AuthScope.Profile],\r\n uiLocales: [Utils.normalizeLanguageCode(this.mSettings.languageCode, \"-\")],\r\n prompt: [AuthPrompt.SelectAccount],\r\n nonce: Utils.uuid.create()\r\n };\r\n }\r\n\r\n if (authParams.responseType.length === 0) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The response type is missing.\");\r\n }\r\n\r\n // automatically switch to auth code flow, hybrid and implicit flows are deprecated.\r\n if (!Utils.string.equals(authParams.responseType, \"code\")) {\r\n logger.warn(\"The implicit and hybrid authentication flows will be deprecated on July 28th, 2023. Use 'code' as the responseType instead; automatically switching to code flow...\");\r\n\r\n authParams.responseType = \"code\";\r\n }\r\n\r\n let redirectUri: Undefined = authParams.redirectUri;\r\n\r\n // use the default SDK's redirect url\r\n if (!redirectUri) {\r\n redirectUri = this.createDefaultRedirectUri();\r\n }\r\n\r\n if (!redirectUri) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The redirect uri is missing.\");\r\n }\r\n\r\n const flowKind: AuthFlowKind = Auth.GetAuthFlowKind(authParams.responseType);\r\n\r\n // an implicit or hybrid flow must have a nonce\r\n if (!authParams.nonce && (flowKind === AuthFlowKind.Implicit || flowKind === AuthFlowKind.Hybrid)) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The nonce must be provided for this authorization flow.\");\r\n }\r\n\r\n const authUrl: URL = new URL(this.mStarfleetProviderConfiguration.authorizationUrl);\r\n const scopes: string = [\"\"].concat(authParams.scopes).join(\" \");\r\n\r\n authUrl.searchParams.set(\"client_id\", this.mSettings.clientId);\r\n authUrl.searchParams.set(\"response_type\", authParams.responseType);\r\n authUrl.searchParams.set(\"redirect_uri\", redirectUri);\r\n authUrl.searchParams.set(\"scope\", `openid${scopes}`);\r\n\r\n if (authParams.responseMode) {\r\n authUrl.searchParams.set(\"response_mode\", authParams.responseMode);\r\n }\r\n\r\n if (authParams.state) {\r\n authUrl.searchParams.set(\"state\", authParams.state);\r\n }\r\n\r\n if (authParams.nonce) {\r\n authUrl.searchParams.set(\"nonce\", authParams.nonce);\r\n }\r\n\r\n if (authParams.prompt && authParams.prompt.length > 0) {\r\n authUrl.searchParams.set(\"prompt\", authParams.prompt.join(\" \"));\r\n }\r\n\r\n if (authParams.maxAge) {\r\n authUrl.searchParams.set(\"max_age\", authParams.maxAge.toString());\r\n }\r\n\r\n if (authParams.uiLocales && authParams.uiLocales.length > 0) {\r\n authUrl.searchParams.set(\"ui_locales\", authParams.uiLocales.join(\" \"));\r\n }\r\n\r\n if (authParams.idTokenHint) {\r\n authUrl.searchParams.set(\"id_token_hint\", authParams.idTokenHint);\r\n }\r\n\r\n if (authParams.loginHint) {\r\n authUrl.searchParams.set(\"login_hint\", authParams.loginHint);\r\n }\r\n\r\n if (authParams.idpId) {\r\n authUrl.searchParams.set(\"idp_id\", authParams.idpId);\r\n }\r\n\r\n if (extraParams) {\r\n for (const p in extraParams) {\r\n authUrl.searchParams.append(p, extraParams[p]);\r\n }\r\n }\r\n\r\n return authUrl;\r\n }\r\n\r\n /**\r\n * Begins the login flow, when fulfilled, the login flow will have completed.\r\n *\r\n * #### Browser\r\n * Opens a new top-level window to the specified\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}.\r\n *\r\n * #### Native Platform\r\n * Launches the default web browser and navigates to the specified\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}.\r\n *\r\n * @param authUrl\r\n * The authorize {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}, this can be created from {@link createLoginUrl}.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingAuthorizationResult}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.FeatureNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.CannotCreateLoginWindow}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserEndpointNotFound}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidToken}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.LoginCancelled}.\r\n * @throws {@link LoginError}\r\n * with {@link APIErrorCode.LoginFailed}.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Login\r\n *\r\n * @async\r\n */\r\n public async loginWithBrowser(authUrl: URL): Promise {\r\n return this.openLoginWindow(authUrl, AuthAgent.Browser, \"_blank\");\r\n }\r\n\r\n /**\r\n * Begins the login flow, when fulfilled, the login flow will have completed.\r\n *\r\n * #### Browser\r\n * Opens a new window to the specified {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}.\r\n *\r\n * #### Native Platform\r\n * Launches the default web browser and navigates to the specified\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}.\r\n *\r\n * @param authUrl\r\n * The authorize {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL},\r\n * this can be created from {@link createLoginUrl}.\r\n *\r\n * @param windowFeatures\r\n * A comma-delimited list of window features to pass along to\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/open | window.open}.\\\r\n * __Default:__ ```status,scrollbars,resizable```\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingAuthorizationResult}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.FeatureNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.CannotCreateLoginWindow}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserEndpointNotFound}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidToken}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.LoginCancelled}.\r\n * @throws {@link LoginError}\r\n * with {@link APIErrorCode.LoginFailed}.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Login\r\n *\r\n * @async\r\n */\r\n public async loginWithBrowserPopup(authUrl: URL, windowFeatures: string = GFN_AUTH_POPUP_WINDOW_DEFAULT_FEATURES): Promise {\r\n return this.openLoginWindow(authUrl, AuthAgent.BrowserPopup, \"gfn-login-window\", windowFeatures);\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * WebView based login is no longer supported, use one of the loginWithBrowser or device login flows\r\n *\r\n * @async\r\n * @native\r\n * @internal\r\n */\r\n public async loginWithWebView(authUrl: URL): Promise {\r\n return this.loginWithBrowser(authUrl);\r\n }\r\n\r\n /**\r\n * Performs an automatic login, when fulfilled, the login will have completed.\r\n *\r\n * #### Browser\r\n * Not supported; Will throw an Error.\r\n *\r\n * #### Native Platform\r\n * Creates a new hidden WebView instance and navigates to the specified\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL}.\r\n *\r\n * @param authUrl\r\n * The authorize {@link https://developer.mozilla.org/en-US/docs/Web/API/URL_API | URL},\r\n * this can be created from {@link createLoginUrl}.\r\n *\r\n * @param partnerToken\r\n * A token that should be used to authenticate the user. This token is passed along to the\r\n * authentication server in an HTTP cookie named `nv_gfn_partner_token`. This cookie\r\n * is only available to the domain provided by `partnerDomain`.\r\n *\r\n * @param partnerDomain\r\n * The domain of the authentication server for which the partner token should be made\r\n * available via an HTTP cookie.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingAuthorizationResult}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.FeatureNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.CannotCreateLoginWindow}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserEndpointNotFound}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidToken}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.LoginCancelled}.\r\n * @throws {@link LoginError}\r\n * with {@link APIErrorCode.LoginFailed}.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Login\r\n *\r\n * @async\r\n * @native\r\n */\r\n public async loginWithPartnerToken(authUrl: URL, partnerToken: PartnerToken): Promise {\r\n if (this.mDevice.isBrowser) {\r\n throw new APIError(APIErrorCode.FeatureNotSupported, \"Not supported in browser environment.\");\r\n }\r\n\r\n if (!partnerToken.value) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Must provide a value.\");\r\n }\r\n\r\n if (!partnerToken.domain) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Must provide a domain.\");\r\n }\r\n\r\n const state: string = this.encodeUrlState(authUrl, AuthAgent.WebView);\r\n authUrl.searchParams.set(\"state\", state);\r\n\r\n const callbackUrl: string = this.mDevice.getCallbackUrl();\r\n const autoLoginUrl: URL = new URL(`${callbackUrl}/auto-login`);\r\n autoLoginUrl.searchParams.set(\"tokenName\", partnerToken.name ?? GFN_DEFAULT_PARTNER_TOKEN_NAME);\r\n autoLoginUrl.searchParams.set(\"tokenValue\", partnerToken.value);\r\n autoLoginUrl.searchParams.set(\"tokenDomain\", partnerToken.domain);\r\n\r\n // add all the authUrl parameters, if we just added a single parameter that contains\r\n // the full authUrl, it will get encoded, we will then need to decode it, however, because\r\n // the authUrl will already contain encoded parameter values (e.g. a redirect_uri with query or hash),\r\n // those too will get decoded, then we will be in a tricky situation trying to parse the url, it's\r\n // easier to just pass each parameter, encoded, then pull each one out and reconstruct the url.\r\n authUrl.searchParams.forEach((value: string, key: string) => {\r\n autoLoginUrl.searchParams.set(key, value);\r\n });\r\n\r\n autoLoginUrl.searchParams.set(\"authUrl\", authUrl.href.replace(authUrl.search, \"\"));\r\n\r\n return this.openLoginWindow(autoLoginUrl, AuthAgent.WebView, \"_blank\");\r\n }\r\n\r\n /**\r\n * Performs a guest mode login. When fulfilled, the guest mode login will have been completed.\r\n *\r\n * @param partnerId\r\n * The ID of the partner providing the nonce.\r\n *\r\n * @param nonce\r\n * A nonce provided from the partner, which can be used once to exchange for a limited access login token.\r\n *\r\n * @param appId\r\n * The ID of the application that the user will be granted access to as a guest.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n *\r\n * @category\r\n * Login\r\n *\r\n * @async\r\n */\r\n public async loginWithNonce(nonce: string, appId: number): Promise {\r\n if (!this.mSettings.partnerId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing or empty partnerId in Settings\");\r\n }\r\n\r\n if (!nonce) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing or empty nonce\");\r\n }\r\n\r\n if (!appId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing or empty appId\");\r\n }\r\n\r\n this.logout();\r\n const data: AlsTokenExchangeData = await this.mRestClient.getAuthConfigFromNonce(this.mSettings.partnerId, nonce, appId);\r\n\r\n const guestUser = new GuestUser(this.mConfiguration, this.mSettings, this.mRestClient);\r\n guestUser.setTokenInfo(data.token, data.partnerSecureData);\r\n\r\n // Setting the guest user fires the user update events\r\n this.guestUser = guestUser;\r\n }\r\n\r\n\r\n /**\r\n * Finishes the login flow started by one of the ```loginWithXXX``` calls. This\r\n * must be called from the login redirect page specified with {@link AuthParameters.redirectUri}.\r\n *\r\n * See the [Login Flow](../guides/login-flow.html) for more information.\r\n *\r\n * @returns\r\n * True if the login was finished successfully. otherwise false.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MainWindowClosed}.\r\n * @throws {@link LoginError}\r\n * with {@link APIErrorCode.LoginFailed}.\r\n *\r\n * @category\r\n * Login\r\n *\r\n */\r\n public finishLogin(): boolean {\r\n const url: URL = new URL(window.location.href);\r\n const state: Nullable = url.searchParams.get(\"state\");\r\n\r\n if (state) {\r\n const authState: Nullable = Auth.DecodeUrlState(state);\r\n\r\n if (authState) {\r\n const isPopupAgent: boolean = (authState.agent === AuthAgent.BrowserPopup);\r\n\r\n // login was initiated by a native application to run in the built-in browser\r\n if (authState.platform !== PlatformID.Browser && authState.agent !== AuthAgent.WebView) {\r\n this.finishLoginWithNativeBrowser(url, authState);\r\n return true;\r\n }\r\n\r\n // login was initiated in the browser or in a hidden webview\r\n this.finishLoginWithBrowserOrWebView(url, authState, isPopupAgent);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Begins the device authorization flow.\r\n *\r\n * See the [Device Authorization Flow](../guides/device-auth-flow.html) for\r\n * more information.\r\n *\r\n * @param authParams\r\n * An {@link DeviceAuthParameters} used to create the device authorization request.\r\n *\r\n * @param extraParams\r\n * Extra parameters to pass along to the service.\r\n *\r\n * @returns\r\n * An {@link DeviceAuthResult}\r\n *\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Device Authorization\r\n *\r\n * @async\r\n */\r\n public async startDeviceAuthorization(authParams?: DeviceAuthParameters, extraParams?: Record): Promise {\r\n // default to an empty structure, defaults will be used later.\r\n if (!authParams) {\r\n authParams = {};\r\n }\r\n\r\n const response: StarfleetDeviceAuthResponseEntity = await this.mRestClient.startDeviceAuthorization(this.mStarfleetProviderConfiguration, {\r\n display_name: authParams.displayName,\r\n scopes: authParams.scopes || [AuthScope.TkClient, AuthScope.Profile, AuthScope.Consent],\r\n id_token_hint: authParams.idTokenHint,\r\n idp_id: authParams.idpId,\r\n login_hint: authParams.loginHint,\r\n max_age: authParams.maxAge,\r\n nonce: authParams.nonce,\r\n prompt: authParams.prompt || [AuthPrompt.SelectAccount],\r\n state: authParams.state\r\n }, extraParams);\r\n\r\n return {\r\n deviceCode: response.device_code,\r\n userCode: response.user_code,\r\n interval: response.interval,\r\n expiresIn: response.expires_in,\r\n verificationUrl: response.verification_uri,\r\n verificationCompleteUrl: response.verification_uri_complete\r\n };\r\n }\r\n\r\n /**\r\n * Waits for the device to be authorized. This will poll the authorization\r\n * server at the supplied interval rate until either the device has been\r\n * authorized, the timeout period has expired or this device authorization\r\n * has been cancelled by {@link cancelDeviceAuthorization}.\r\n *\r\n * @param deviceCode\r\n * The {@link DeviceAuthResult.deviceCode} returned from a call\r\n * to {@link startDeviceAuthorization}.\r\n *\r\n * @param interval\r\n * The rate (in seconds) at which to check the server for authorizationstatus.\r\n * The {@link DeviceAuthResult.interval} is the recommended value.\r\n *\r\n * @param timeout\r\n * The maximum amount of time (in seconds) to wait for the authorization to\r\n * complete. This value should be no more than {@link DeviceAuthResult.expiresIn}.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.DeviceAuthorizationCancelled}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserEndpointNotFound}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidToken}.\r\n * @throws {@link HttpError}\r\n *\r\n * @category\r\n * Device Authorization\r\n *\r\n * @async\r\n */\r\n public async waitForDeviceAuthorization(deviceCode: string, interval: number, timeout: number): Promise {\r\n if (deviceCode.length === 0) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The device code must be provided.\");\r\n }\r\n\r\n if (interval <= 0) {\r\n throw new APIError(APIErrorCode.InvalidParameter, \"The polling interval must be greater than zero.\");\r\n }\r\n\r\n if (timeout <= 0) {\r\n throw new APIError(APIErrorCode.InvalidParameter, \"The timeout must be greater than zero.\");\r\n }\r\n\r\n if (timeout < interval) {\r\n throw new APIError(APIErrorCode.InvalidParameter, \"The timeout must be greater than the polling interval.\");\r\n }\r\n\r\n const authResult: AuthResult = await Utils.poll(async (): Promise> => {\r\n try {\r\n return Promise.resolve({\r\n done: true,\r\n result: await this.authorizeDeviceCode(deviceCode)\r\n });\r\n }\r\n catch (err) {\r\n if (err instanceof StarfleetError) {\r\n if (err.id === AuthErrorId.AuthorizationPending || err.id === AuthErrorId.SlowDown) {\r\n\r\n // user has requested a cancellation\r\n const idx: number = this.mRequestedDeviceAuthCancellations.indexOf(deviceCode);\r\n\r\n if (idx !== -1) {\r\n this.mRequestedDeviceAuthCancellations.splice(idx, 1);\r\n return Promise.reject(new APIError(APIErrorCode.DeviceAuthorizationCancelled));\r\n }\r\n\r\n // TODO: need to handle the slow down error, e.g. for each slow_down response returned, increase\r\n // the interval by 5 seconds.\r\n // https://gitlab-master.nvidia.com/kaizen/auth/starfleet/docs/-/blob/master/api/token.md#interim-error-response\r\n return Promise.resolve({\r\n done: false\r\n });\r\n }\r\n }\r\n\r\n return Promise.reject(err);\r\n }\r\n\r\n }, interval * 1000, timeout * 1000);\r\n\r\n return this.resetAuthorizedUser(authResult);\r\n }\r\n\r\n /**\r\n * Cancels a previous device authorization.\r\n *\r\n * @param deviceCode\r\n * The device code returned in the {@link DeviceAuthResponse.deviceCode} field.\r\n *\r\n * @category\r\n * Device Authorization\r\n *\r\n */\r\n public cancelDeviceAuthorization(deviceCode: string): void {\r\n if (this.mRequestedDeviceAuthCancellations.indexOf(deviceCode) === -1) {\r\n this.mRequestedDeviceAuthCancellations.push(deviceCode);\r\n }\r\n }\r\n\r\n /**\r\n * Logs out the current user, sets the current user to null, and deletes\r\n * the user information from the peristed storage\r\n *\r\n * @category\r\n * Logout\r\n *\r\n * @async\r\n */\r\n public async logout(): Promise {\r\n if (this.mAuthorizedUser) {\r\n this.mAuthorizedUser.deleteFromStorage(this.mUserStorageKey!, this.mStorage);\r\n this.authorizedUser = null;\r\n }\r\n }\r\n\r\n /**\r\n * Wraps an authenticated REST API call and handles retries\r\n * If the api call fails with a 401 error, attempt to refresh the token and\r\n * try again.\r\n *\r\n * @internal\r\n * @async\r\n */\r\n public async authenticatedRestCall(authenticatedFn: (token: string) => Promise, tokenOptional: boolean = false): Promise {\r\n let token: string = this.getToken();\r\n if (!tokenOptional && !token) {\r\n throw new MissingTokenError();\r\n }\r\n\r\n try {\r\n // Await here to catch the exception\r\n return await authenticatedFn(token);\r\n } catch (e) {\r\n if (e instanceof RestClientError) {\r\n if (e.status === 401) {\r\n await this.refreshAccessToken();\r\n token = this.getToken();\r\n return authenticatedFn(token);\r\n }\r\n }\r\n\r\n throw e;\r\n }\r\n }\r\n\r\n private async openLoginWindow(authUrl: URL, agent: AuthAgent, windowTarget: string, windowFeatures: string = \"\"): Promise {\r\n if (agent === AuthAgent.WebView && this.mDevice.isBrowser) {\r\n throw new APIError(APIErrorCode.FeatureNotSupported, \"WebView is not supported in a browser environment.\");\r\n }\r\n\r\n const span = this.mDistributedTracing.startSpan(\"Login\");\r\n\r\n // for authorization code flow - we need to construct a code challenge from a random \"code verifier\"\r\n // this verifier needs to be sent down to the result handling along with the auth code returned from\r\n // the login and the code challenge needs to be added to the auth url.\r\n //\r\n // This isn't ideal but maintains backwards compatibility, this needs to be changed in v2 when only\r\n // the authorization code flow with PKCE is supported.\r\n\r\n const responseType: Nullable = authUrl.searchParams.get(\"response_type\");\r\n const redirectUri: string = authUrl.searchParams.get(\"redirect_uri\") || \"\";\r\n\r\n let codeVerifier: string = \"\";\r\n\r\n if (responseType && Utils.string.contains(responseType, \"code\")) {\r\n codeVerifier = Utils.crypt.random(32, Utils.crypt.Encoding.Base64Url);\r\n\r\n const codeChallenge: string = await Utils.crypt.sha256(codeVerifier, Utils.crypt.Encoding.Base64Url);\r\n\r\n authUrl.searchParams.set(\"code_challenge\", codeChallenge);\r\n authUrl.searchParams.set(\"code_challenge_method\", \"S256\");\r\n }\r\n\r\n // encode the existing state (if there is any) and add our agent, we will\r\n // use this on the return redirect to determine if it is ours\r\n const savedUrlStr = authUrl.href;\r\n const state: string = this.encodeUrlState(authUrl, agent);\r\n authUrl.searchParams.set(\"state\", state);\r\n this.mDistributedTracing.updateUrlForHttpPopupSpan(authUrl, span);\r\n\r\n // login using the built-in browser\r\n if (agent !== AuthAgent.WebView && !this.mDevice.isBrowser) {\r\n this.mLoginWindow = null;\r\n this.mDevice.launchBrowser(authUrl.href);\r\n\r\n return this.handleBrowserLoginResult(true, codeVerifier, redirectUri).then((res) => {\r\n this.mDistributedTracing.closeHttpPopupSpan(span);\r\n return res;\r\n }, (err: LoginError) => {\r\n this.mDistributedTracing.closeHttpPopupSpan(span, true, { errorCode: `${err.code}`, errorText: err.toString(), failedUrl: savedUrlStr });\r\n throw err;\r\n });\r\n }\r\n\r\n // otherwise login using the current host\r\n this.mLoginWindow = window.open(authUrl.href, windowTarget, windowFeatures ? Auth.CreatePopupWindowFeatures(windowFeatures) : undefined);\r\n\r\n if (!this.mLoginWindow) {\r\n this.mLoginWindow = null;\r\n throw new APIError(APIErrorCode.CannotCreateLoginWindow, `Unable to create ${agent} login window.`);\r\n }\r\n\r\n return this.handleBrowserLoginResult(false, codeVerifier, redirectUri).then((res) => {\r\n this.mDistributedTracing.closeHttpPopupSpan(span);\r\n return res;\r\n }, (err: LoginError) => {\r\n this.mDistributedTracing.closeHttpPopupSpan(span, true, { errorCode: `${err.code}`, errorText: err.toString(), failedUrl: savedUrlStr });\r\n throw err;\r\n });\r\n }\r\n\r\n private async handleBrowserLoginResult(fromNativeBrowser: boolean, codeVerifier: string, redirectUri: string): Promise {\r\n let result: AuthResult = await (fromNativeBrowser ? this.getBrowserLoginResultForNative() : this.getBrowserLoginResult());\r\n\r\n // using authorization code flow, we'll need to use the code and code verifier\r\n // to get the tokens first\r\n if (result.code) {\r\n result = await this.authorizeAuthorizationCode(result.code, codeVerifier, redirectUri);\r\n }\r\n\r\n return this.resetAuthorizedUser(result);\r\n }\r\n\r\n private async resetAuthorizedUser(authResult: AuthResult): Promise {\r\n if (!authResult.idToken) {\r\n throw new APIError(APIErrorCode.MissingToken, \"The identifier token is missing.\");\r\n }\r\n\r\n const authInfo: AuthInfo = {\r\n idToken: {\r\n value: authResult.idToken,\r\n expiresOn: Auth.DecodeIdentityTokenExpirationDate(authResult.idToken)\r\n }\r\n };\r\n\r\n if (authResult.accessToken) {\r\n authInfo.accessToken = {\r\n value: authResult.accessToken,\r\n expiresOn: new Date(Date.now() + (authResult.expiresIn * 1000))\r\n };\r\n\r\n // get a client token, which can be used to refresh the access token\r\n const clientToken: AuthToken = await this.getClientToken(authResult.accessToken);\r\n authInfo.clientToken = clientToken;\r\n }\r\n\r\n this.authorizedUser = new AuthorizedUser(this.mConfiguration, this.mSettings, this.mRestClient);\r\n\r\n // update the users auth information\r\n this.mAuthorizedUser!.setAuthInfo(authInfo);\r\n\r\n // update the provider information\r\n await this.updateCurrentUserServiceProvider();\r\n\r\n // persist the current user\r\n return this.saveCurrentUserToStorage();\r\n }\r\n\r\n private async saveCurrentUserToStorage(): Promise {\r\n if (!this.mAuthorizedUser) {\r\n return;\r\n }\r\n\r\n try {\r\n await this.mAuthorizedUser.writeToStorage(this.mUserStorageKey!, this.mStorage);\r\n logger.info(`User saved to storage. id=${this.mAuthorizedUser.id}.`);\r\n } catch (e) {\r\n logger.error(`Unable to write the current user to storage. id=${this.mAuthorizedUser.id}.`, e);\r\n }\r\n }\r\n\r\n private async updateCurrentUserServiceProvider(): Promise {\r\n if (!this.mAuthorizedUser) {\r\n return;\r\n }\r\n\r\n const serviceInfo: ServiceInfoResponseEntity = await this.mRestClient.getServiceInfo();\r\n this.mAuthorizedUser.updateServiceProvider(serviceInfo);\r\n }\r\n\r\n private getBrowserLoginResult(): Promise {\r\n return new Promise((resolve, reject) => {\r\n\r\n // because the login window is in another domain, we can't capture the `unload` event\r\n // to find out if the window was closed, thus, we need to poll the `window.closed`\r\n // property, if the window closes before this promise has been fullfilled, it will\r\n // be rejected and thus \"cancelled\", unless GFN_DEFAULT_WINDOW_POLL_TIMEOUT has\r\n // been reached, in which case the login will be cancelled automatically\r\n Utils.poll(async () => {\r\n // cancel the existing login promise if either\r\n // the login window has been reset or closed\r\n if (!this.mLoginWindow || this.mLoginWindow && this.mLoginWindow.closed) {\r\n reject(new APIError(APIErrorCode.LoginCancelled));\r\n\r\n // stop.\r\n return Promise.resolve({\r\n done: true\r\n });\r\n }\r\n\r\n // continue...\r\n return Promise.resolve({\r\n done: false\r\n });\r\n\r\n }, 500, GFN_DEFAULT_WINDOW_POLL_TIMEOUT).catch((e) => {\r\n // the login timeout has expired, just close the\r\n // login window\r\n if (e && e.message === \"timeout_expired\") {\r\n if (this.mLoginWindow) {\r\n this.mLoginWindow.close();\r\n }\r\n } else {\r\n logger.error(\"Unknown error occurred while waiting for login. \" + e);\r\n }\r\n });\r\n\r\n const onWindowMessage = (e: MessageEvent) => {\r\n if (this.isSafeMessageOrigin(e.origin) && e.data && \"key\" in e.data && e.data.key.startsWith(GFN_AUTH_KEY)) {\r\n window.removeEventListener(\"message\", onWindowMessage);\r\n\r\n if (!(\"value\" in e.data)) {\r\n reject(new APIError(APIErrorCode.MissingAuthorizationResult));\r\n return;\r\n }\r\n\r\n const value: any = e.data.value;\r\n\r\n if (\"error\" in value) {\r\n reject(new LoginError(\r\n APIErrorCode.LoginFailed,\r\n value.error,\r\n value.errorDescription,\r\n value.state\r\n ));\r\n } else {\r\n const result: AuthResult = {\r\n accessToken: value.access_token || \"\",\r\n code: value.code || \"\",\r\n expiresIn: value.expires_in || 0,\r\n idToken: value.id_token || \"\",\r\n tokenType: value.token_type || \"\",\r\n state: value.state || \"\"\r\n };\r\n\r\n resolve(result);\r\n }\r\n } else {\r\n logger.warn(`Unknown message received from ${e.origin}.`);\r\n logger.warn(JSON.stringify(e.data));\r\n }\r\n };\r\n\r\n window.addEventListener(\"message\", onWindowMessage);\r\n\r\n });\r\n }\r\n\r\n private getBrowserLoginResultForNative(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const onCallback = (obj: any) => {\r\n if (\"error\" in obj) {\r\n reject(new LoginError(\r\n APIErrorCode.LoginFailed,\r\n obj.error,\r\n obj.errorDescription,\r\n obj.state\r\n ));\r\n } else {\r\n const result: AuthResult = {\r\n accessToken: obj.access_token || \"\",\r\n code: obj.code || \"\",\r\n expiresIn: obj.expires_in || 0,\r\n idToken: obj.id_token || \"\",\r\n tokenType: obj.token_type || \"\",\r\n state: obj.state || \"\"\r\n };\r\n\r\n resolve(result);\r\n }\r\n };\r\n\r\n this.mDevice.registerBrowserCallback(\"authenticate\", onCallback);\r\n });\r\n }\r\n\r\n private finishLoginWithBrowserOrWebView(url: URL, authState: AuthState, isPopup: boolean): void {\r\n if (!window.opener) {\r\n throw new APIError(APIErrorCode.MainWindowClosed);\r\n }\r\n\r\n const origin: string = authState.origin ? authState.origin : url.origin;\r\n\r\n // login error occurred\r\n if (url.searchParams.has(\"error\")) {\r\n const errorResult: AuthErrorResult = {\r\n error: url.searchParams.get(\"error\")!,\r\n state: authState.state\r\n };\r\n\r\n if (url.searchParams.has(\"error_description\")) {\r\n errorResult.errorDescription = url.searchParams.get(\"error_description\")!;\r\n }\r\n\r\n // send the error result to the main window\r\n window.opener.postMessage({\r\n key: GFN_AUTH_ERROR_KEY,\r\n value: errorResult\r\n }, origin);\r\n\r\n // throw an error when not in a popup so the consumer can\r\n // handle the error in their redirect page if they choose\r\n if (!isPopup) {\r\n throw new LoginError(\r\n APIErrorCode.LoginFailed,\r\n errorResult.error,\r\n errorResult.errorDescription,\r\n errorResult.state);\r\n }\r\n } else {\r\n const result: StarfleetAuthorizeResult = {};\r\n\r\n url.searchParams.forEach((value: string, key: string) => {\r\n (result as any)[key] = value;\r\n });\r\n\r\n window.opener.postMessage({\r\n key: GFN_AUTH_KEY,\r\n value: result\r\n }, origin);\r\n }\r\n }\r\n\r\n private finishLoginWithNativeBrowser(url: URL, authState: AuthState): void {\r\n let callbackUrl: string;\r\n\r\n // login error occurred\r\n if (url.searchParams.has(\"error\")) {\r\n const errorResult: AuthErrorResult = {\r\n error: url.searchParams.get(\"error\")!,\r\n state: authState.state ?? \"\"\r\n };\r\n\r\n if (url.searchParams.has(\"error_description\")) {\r\n errorResult.errorDescription = url.searchParams.get(\"error_description\")!;\r\n }\r\n\r\n callbackUrl = this.mDevice.createCallbackUrl(\"authenticate\", errorResult);\r\n } else {\r\n const result: StarfleetAuthorizeResult = {};\r\n\r\n url.searchParams.forEach((value: string, key: string) => {\r\n (result as any)[key] = value;\r\n });\r\n\r\n callbackUrl = this.mDevice.createCallbackUrl(\"authenticate\", result);\r\n }\r\n\r\n window.location.href = callbackUrl;\r\n }\r\n\r\n private getToken(): string {\r\n let token: string = \"\";\r\n\r\n if (this.authorizedUser && this.authorizedUser.authInfo) {\r\n token = this.authorizedUser.authInfo.idToken.value;\r\n }\r\n\r\n return token;\r\n }\r\n\r\n private async getClientToken(accessToken: string): Promise {\r\n const response: StarfleetClientTokenResponseEntity = await this.mRestClient.getClientToken(this.mStarfleetProviderConfiguration, accessToken);\r\n\r\n return {\r\n value: response.client_token,\r\n expiresOn: new Date(Date.now() + response.expires_in * 1000)\r\n };\r\n }\r\n\r\n private async authorizeAuthorizationCode(code: string, codeVerifier: string, redirectUri: string): Promise {\r\n return this.authorize({\r\n grant_type: StarfleetTokenGrantType.AuthorizationCode,\r\n code: code,\r\n codeVerifier: codeVerifier,\r\n redirectUri: redirectUri\r\n });\r\n }\r\n\r\n private async authorizeDeviceCode(deviceCode: string): Promise {\r\n return this.authorize({\r\n grant_type: StarfleetTokenGrantType.DeviceCode,\r\n client_id: this.mSettings.clientId,\r\n device_code: deviceCode\r\n });\r\n }\r\n\r\n private async authorizeClientToken(clientToken: string, subClaim: string): Promise {\r\n return this.authorize({\r\n grant_type: StarfleetTokenGrantType.ClientToken,\r\n client_id: this.mSettings.clientId,\r\n client_token: clientToken,\r\n sub: subClaim\r\n });\r\n }\r\n\r\n private async authorize(requestEntity: StarfleetTokenRequestEntity): Promise {\r\n const response: StarfleetTokenResponseEntity = await this.mRestClient.getToken(this.mStarfleetProviderConfiguration, requestEntity);\r\n\r\n return {\r\n accessToken: response.access_token || \"\",\r\n code: response.code || \"\",\r\n expiresIn: response.expires_in || 0,\r\n idToken: response.id_token || \"\",\r\n tokenType: response.token_type || \"\",\r\n state: response.state || \"\"\r\n };\r\n }\r\n\r\n private encodeUrlState(url: URL, agent: AuthAgent): string {\r\n const stateObj: AuthState = {\r\n agent: agent,\r\n platform: this.mDevice.platformId,\r\n clientId: this.mSettings.clientId,\r\n origin: window.location.origin\r\n };\r\n\r\n const currentState: Nullable = url.searchParams.get(\"state\");\r\n\r\n if (currentState) {\r\n stateObj.state = currentState;\r\n }\r\n\r\n return btoa(JSON.stringify(stateObj));\r\n }\r\n\r\n private createDefaultRedirectUri(): Undefined {\r\n let baseUrl: Undefined;\r\n\r\n try {\r\n baseUrl = Utils.url.create(Utils.getScriptOriginPath());\r\n\r\n // always use the cdn url in production, stage environments can have localhost configs\r\n if (this.mConfiguration.build.flavor === BuildFlavor.Production) {\r\n const versionParts: VersionParts = Version.ParseVersionString(this.mSdkVersion.version);\r\n baseUrl = Utils.url.create(this.mConfiguration.sdk.cdnUrl, versionParts.major + \".x\");\r\n }\r\n } catch (e: any) {\r\n logger.error(`Unable to create default redirect uri. ${e.message}`);\r\n }\r\n\r\n if (baseUrl) {\r\n return Utils.url.create(baseUrl.href, GFN_DEFAULT_REDIRECT_URI_PAGE).href;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private isSafeMessageOrigin(messageOrigin: string): boolean {\r\n const cdnUrl = new URL(this.mConfiguration.sdk.cdnUrl);\r\n\r\n return (Utils.string.equals(messageOrigin, Utils.getScriptOrigin()) ||\r\n Utils.string.equals(messageOrigin, window.location.origin) ||\r\n Utils.string.equals(messageOrigin, cdnUrl.origin));\r\n }\r\n\r\n /** @internal */\r\n public static DecodeUrlState(state: string): Nullable {\r\n let stateObj: any = null;\r\n\r\n try {\r\n stateObj = JSON.parse(atob(state));\r\n }\r\n catch (e: any) {\r\n // the state value is either not base64 encoded\r\n // or is not json and thus is not ours, just log\r\n // the error\r\n logger.error(\"The url state is invalid.\" + e);\r\n }\r\n\r\n if (stateObj && \"agent\" in stateObj) {\r\n return stateObj as AuthState;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static CreatePopupWindowFeatures(initialFeatures: string): string {\r\n let windowFeatures: string = initialFeatures;\r\n // no position or size features are being used, we will use our own default\r\n // sizing and center the popup in the middle of the main window\r\n const hasPosOrSizeFeature: boolean = [\"left\", \"top\", \"width\", \"height\"].some((v: string) => Utils.string.contains(windowFeatures, v));\r\n\r\n if (!hasPosOrSizeFeature) {\r\n const winRect: Rect = Utils.device.getWindowRect();\r\n const popupWinSize: Size = GFN_AUTH_POPUP_WINDOW_DEFAULT_SIZE;\r\n const popupWinPos: Point = {\r\n x: winRect.x + ((winRect.width - popupWinSize.width) * 0.5),\r\n y: winRect.y + ((winRect.height - popupWinSize.height) * 0.5)\r\n };\r\n\r\n if (windowFeatures.length > 0) {\r\n windowFeatures += \",\";\r\n }\r\n\r\n windowFeatures += `left=${popupWinPos.x}`;\r\n windowFeatures += `,top=${popupWinPos.y}`;\r\n windowFeatures += `,width=${popupWinSize.width}`;\r\n windowFeatures += `,height=${popupWinSize.height}`;\r\n }\r\n\r\n return windowFeatures;\r\n }\r\n\r\n private static DecodeIdentityTokenExpirationDate(idToken: string): Date {\r\n const parts: string[] = idToken.split(\".\");\r\n\r\n if (parts && parts.length > 1) {\r\n const payload = JSON.parse(Utils.base64.url_decode(parts[1]));\r\n return new Date(payload.exp * 1000);\r\n }\r\n\r\n throw new APIError(APIErrorCode.InvalidToken, \"The JWT is invalid.\");\r\n }\r\n\r\n private static GetAuthFlowKind(responseType: string): AuthFlowKind {\r\n if (Utils.string.equals(responseType, \"code\")) {\r\n return AuthFlowKind.Code;\r\n }\r\n\r\n if (!Utils.string.contains(responseType, \"code\")) {\r\n return AuthFlowKind.Implicit;\r\n }\r\n\r\n return AuthFlowKind.Hybrid;\r\n }\r\n\r\n private static IsTokenExpired(token: AuthToken) {\r\n return !token.expiresOn || token.expiresOn.getTime() < (new Date().getTime());\r\n }\r\n}","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n// TODO: add to a configuration file that we load during build time\r\n// TODO: add ability to override configuration values at runtime\r\n\r\nimport { Nullable, RecursivePartial } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { CatalogConfiguration } from \"../catalog/catalog.types\";\r\nimport { LoggingConfiguration } from \"../logging/logging.types\";\r\nimport { RestClientConfiguration } from \"../rest/rest-client.types\";\r\nimport { StreamerConfiguration } from \"../streamer/streamer.types\";\r\nimport { BuildConfiguration, SdkConfiguration, BuildType, Config, NetworkTestConfiguration, NetworkIndicatorsConfiguration, ConfigurationEvents } from \"./configuration.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport config from \"../../config/config.json\";\r\nimport { PlatformID } from \"../platform/platform.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { TelemetryConfiguration } from \"../telemetry/telemetry.types\";\r\nimport { FeedbackConfiguration } from \"../telemetry/feedback.types\";\r\nimport { Device } from \"../device/device\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { SettingsOverrides } from \"../settings/settings.types\";\r\nimport { HttpServerConfiguration } from \"../core/http-client.types\";\r\nimport { RemoteLoggerConfiguration } from \"../logging/remote-logger.types\";\r\nimport { GxTargetConfiguration } from \"../gxtarget/gxtarget.types\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { AccountLinkingConfiguration } from \"../guestmode/guestmode.types\";\r\n\r\nconst logger = Logging.getLogger(\"configuration/configuration\");\r\n\r\n/**\r\n * Represents configuration that can be set at build time.\r\n * For runtime settings {@link Settings}\r\n *\r\n * @internal\r\n */\r\nexport class Configuration extends EventEmitter {\r\n private mConfig: Config;\r\n\r\n private mImmutableConfig: RecursivePartial;\r\n private mOverrideToolOverrides: RecursivePartial;\r\n private mInternalConfig: RecursivePartial;\r\n private mSettingsConfigOverrides: RecursivePartial = {};\r\n private mRemoteConfig: RecursivePartial = {};\r\n private mBaseConfig: Config;\r\n\r\n public get build(): BuildConfiguration {\r\n return this.mConfig.build;\r\n }\r\n\r\n public get sdk(): SdkConfiguration {\r\n return this.mConfig.sdk;\r\n }\r\n\r\n public get logging(): LoggingConfiguration {\r\n return this.mConfig.logging;\r\n }\r\n\r\n public get starfleet(): HttpServerConfiguration {\r\n return this.mConfig.starfleet;\r\n }\r\n\r\n public get entitlement(): HttpServerConfiguration {\r\n return this.mConfig.entitlement;\r\n }\r\n\r\n public get grid(): HttpServerConfiguration {\r\n return this.mConfig.grid;\r\n }\r\n\r\n public get accountLinking(): AccountLinkingConfiguration {\r\n return this.mConfig.accountLinking;\r\n }\r\n\r\n public get catalog(): CatalogConfiguration {\r\n return this.mConfig.catalog;\r\n }\r\n\r\n public get streamer(): StreamerConfiguration {\r\n return this.mConfig.streamer;\r\n }\r\n\r\n public get networkTest(): NetworkTestConfiguration {\r\n return this.mConfig.networkTest;\r\n }\r\n\r\n public get networkIndicators(): NetworkIndicatorsConfiguration {\r\n return this.mConfig.networkIndicators;\r\n }\r\n\r\n public get restClient(): RestClientConfiguration {\r\n return this.mConfig.restClient;\r\n }\r\n\r\n public get gxTarget(): GxTargetConfiguration {\r\n return this.mConfig.gxTarget;\r\n }\r\n\r\n public get telemetry(): TelemetryConfiguration {\r\n return this.mConfig.telemetry;\r\n }\r\n\r\n public get feedback(): FeedbackConfiguration {\r\n return this.mConfig.feedback;\r\n }\r\n\r\n public get remoteLogger(): RemoteLoggerConfiguration {\r\n return this.mConfig.remoteLogger;\r\n }\r\n\r\n public get serviceInfoUrl(): string {\r\n return Utils.url.create(this.mConfig.serviceInfo.serverUrl, this.mConfig.serviceInfo.version!).toString();\r\n }\r\n\r\n public get voltron(): HttpServerConfiguration {\r\n return this.mConfig.voltron;\r\n }\r\n\r\n public get settingsOverrides(): SettingsOverrides {\r\n return this.mConfig.settingsOverrides\r\n }\r\n\r\n constructor(device: Nullable, overridesToolOverides: RecursivePartial = {}) {\r\n super();\r\n\r\n this.mImmutableConfig = {\r\n build: {\r\n configType: config.build.configType,\r\n buildType: config.build.buildType\r\n }\r\n };\r\n\r\n this.mOverrideToolOverrides = overridesToolOverides;\r\n\r\n // This is data from config.json that cannot be overridden by Settings.configOverrides\r\n this.mInternalConfig = config.internal;\r\n\r\n // Form the base config, which can get overridden, from:\r\n // - Hardcoded platform specific overrides (on top of...)\r\n // - .json (on top of...)\r\n // - config.json (on top of...)\r\n // - Remaining calculated fields that were not overridden\r\n const calculated: RecursivePartial = Utils.object.deepmerge({\r\n sdk: {\r\n wrapperSdkUrl: Utils.getScriptPath().href\r\n },\r\n }, this.mImmutableConfig);\r\n this.mBaseConfig = Utils.object.deepmerge(\r\n {\r\n settingsOverrides: {}\r\n },\r\n calculated,\r\n config,\r\n this.getDeviceOverrides(device),\r\n );\r\n\r\n // Form the initial config. This won't include the RemoteConfig or\r\n // the Settings.configOverrides, which come later\r\n this.mConfig = Utils.object.deepmerge(\r\n this.mBaseConfig,\r\n this.mInternalConfig,\r\n this.mOverrideToolOverrides,\r\n this.mImmutableConfig,\r\n );\r\n }\r\n\r\n public async initialize(settings: Nullable): Promise {\r\n const settingsConfigOverrides: RecursivePartial = settings?.configOverrides || {};\r\n if (\"internal\" in settingsConfigOverrides) {\r\n throw new APIError(APIErrorCode.AttempedInternalConfigurationOverride);\r\n }\r\n\r\n this.mSettingsConfigOverrides = settingsConfigOverrides;\r\n if (settingsConfigOverrides && Object.keys(settingsConfigOverrides).length > 0) {\r\n this.mergeConfigsAndNotify();\r\n }\r\n }\r\n\r\n public updateRemoteConfig(remoteConfigParams: any): void {\r\n this.mRemoteConfig = {};\r\n\r\n // the rconfig data is returned like this:\r\n // {\r\n // \"debugInfo\": {...},\r\n // \"params\": [\r\n // { name: \"parameter1\", value: {..} },\r\n // { name: \"parameter2\", value: {..} },\r\n // ]\r\n // }\r\n // etc. We don't have a use for all of these parameters, pick out the ones we need.\r\n const ragnarok: any = Utils.array.find(remoteConfigParams, (elem: any) => elem.name === \"ragnarok\");\r\n if (ragnarok?.value) {\r\n this.mRemoteConfig = Utils.object.deepmerge(this.mRemoteConfig,\r\n {\r\n streamer: {\r\n web: {\r\n ragnarokConfigData: {\r\n remoteConfigData: {\r\n ragnarok: JSON.stringify(ragnarok.value),\r\n version: ragnarok.version,\r\n }\r\n }\r\n }\r\n }\r\n }\r\n );\r\n }\r\n\r\n const clientSdk: any = Utils.array.find(remoteConfigParams, (elem: any) => elem.name === \"clientSdk\");\r\n if (clientSdk?.value) {\r\n this.mRemoteConfig = Utils.object.deepmerge(this.mRemoteConfig, clientSdk.value);\r\n }\r\n\r\n if (this.mRemoteConfig && Object.keys(this.mRemoteConfig).length > 0) {\r\n this.mergeConfigsAndNotify();\r\n }\r\n }\r\n\r\n public getDeviceOverrides(device: Nullable): RecursivePartial {\r\n if (device) {\r\n const deviceOverrides: RecursivePartial = {\r\n streamer: {}\r\n };\r\n\r\n switch (device.platformId) {\r\n case PlatformID.Chromebook:\r\n case PlatformID.Huawei:\r\n case PlatformID.MiBox:\r\n case PlatformID.TVision:\r\n case PlatformID.KbroA0:\r\n case PlatformID.JioStb:\r\n logger.info(`Enabling enableStreamRecoveryWithIDR by default for PlatformID ${device.platformId}`);\r\n deviceOverrides.streamer!.android = {\r\n enableStreamRecoveryWithIDR: true\r\n }\r\n break;\r\n case PlatformID.ChromeCast:\r\n logger.info(\"Disabling DRC for chromecast device\");\r\n deviceOverrides.streamer!.android = {\r\n enableDynamicResolutionChange: false\r\n }\r\n break;\r\n }\r\n\r\n return deviceOverrides;\r\n }\r\n\r\n return {};\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * The final config is build in this order:\r\n *\r\n * - Immutable config like build info (on top of...)\r\n * - Overrides Tool Overrides (on top of...)\r\n * - \"Internal\" config from config.json (on top of...)\r\n * - Settings.configOverrides (on top of...)\r\n * - GXT RemoteConfig (on top of...)\r\n * - Hardcoded platform specific overrides (on top of...)\r\n * - .json (on top of...)\r\n * - config.json (on top of...)\r\n * - Remaining calculated fields that were not overridden\r\n */\r\n private mergeConfigsAndNotify() {\r\n this.mConfig = Utils.object.deepmerge(\r\n this.mBaseConfig,\r\n this.mRemoteConfig,\r\n this.mSettingsConfigOverrides,\r\n this.mInternalConfig,\r\n this.mOverrideToolOverrides,\r\n this.mImmutableConfig,\r\n );\r\n this.emit(\"updated\");\r\n }\r\n}\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/** @internal **/\r\nexport enum KeyCode {\r\n // whitespace\r\n Enter = 0x0100,\r\n Tab,\r\n Space,\r\n\r\n // navigation\r\n ArrowDown = 0x0200,\r\n ArrowLeft,\r\n ArrowRight,\r\n ArrowUp,\r\n\r\n // text editing\r\n Backspace = 0x0300,\r\n Delete,\r\n\r\n // general\r\n Escape = 0x400,\r\n Help,\r\n HeadsetButton,\r\n Back,\r\n Forward,\r\n DVR,\r\n Guide,\r\n Info,\r\n Captions,\r\n Search,\r\n LastChannel,\r\n ChannelUp,\r\n ChannelDown,\r\n UserProgramRed,\r\n UserProgramGreen,\r\n UserProgramBlue,\r\n UserProgramYellow,\r\n ZoomIn,\r\n ZoomOut,\r\n MicrophoneMute,\r\n VolumeMute,\r\n VolumeUp,\r\n VolumeDown,\r\n NavigateIn,\r\n NavigateOut,\r\n NavigateNext,\r\n NavigatePrevious,\r\n\r\n // device\r\n DevicePower = 0x0500,\r\n DeviceSleep,\r\n DeviceWake,\r\n DeviceEjectMedia,\r\n DeviceMannerMode,\r\n DeviceBrightnessUp,\r\n DeviceBrightnessDown,\r\n DevicePairing,\r\n DeviceExtraPower1,\r\n DeviceExtraPower2,\r\n DeviceExtraPower3,\r\n DeviceExtraInput1,\r\n DeviceExtraInput2,\r\n DeviceExtraInput3,\r\n\r\n // tv\r\n TvMode = 0x0600,\r\n Tv3DMode,\r\n TvZoomMode,\r\n TvPower,\r\n TvNetwork,\r\n TvContentsMenu,\r\n TvMediaContextMenu,\r\n TvNumberEntry,\r\n TvProgramTimer,\r\n TvInput,\r\n TvInputComponent1,\r\n TvInputComponent2,\r\n TvInputComposite1,\r\n TvInputComposite2,\r\n TvInputHDMI1,\r\n TvInputHDMI2,\r\n TvInputHDMI3,\r\n TvInputHDMI4,\r\n TvInputVGA1,\r\n TvInputAntennaCable,\r\n TvDataService,\r\n TvRadioService,\r\n TvSatellite,\r\n TvSatelliteBroadcast,\r\n TvSatelliteCommunication,\r\n TvSatelliteSelect,\r\n TvTerrestrialAnalog,\r\n TvTerrestrialDigital,\r\n TvTeletext,\r\n TvAudioDescription,\r\n TvAudioDescriptionMixDown,\r\n TvAudioDescriptionMixUp,\r\n TvPictureInPicture,\r\n\r\n // media\r\n MediaPlay = 0x0700,\r\n MediaPlayPause,\r\n MediaPause,\r\n MediaStop,\r\n MediaRecord,\r\n MediaMenu,\r\n MediaAudioTrack,\r\n MediaNext,\r\n MediaPrevious,\r\n MediaClose,\r\n MediaRewind,\r\n MediaFastForward,\r\n MediaSkipBack,\r\n MediaSkipForward,\r\n MediaStepBack,\r\n MediaStepForward,\r\n\r\n // Button\r\n ButtonA,\r\n ButtonB,\r\n ButtonX,\r\n ButtonY,\r\n ButtonL1,\r\n ButtonL2,\r\n ButtonL3,\r\n ButtonR1,\r\n ButtonR2,\r\n ButtonR3,\r\n}","/* Copyright (c) 2020-2021, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpError, HttpErrorReason, IHttpHeaders, IHttpResponse } from \"./http-client.types\";\r\nimport { Utils } from \"./utils\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\n\r\nconst logger = Logging.getLogger(\"core/xhr-http-client\");\r\n\r\n/** @internal **/\r\nexport enum XHRReadyState {\r\n NotSent = 0,\r\n Opened = 1,\r\n HeadersAvailable = 2,\r\n Loading = 3,\r\n Done = 4\r\n}\r\n\r\n/** @internal **/\r\nexport class XHRHttpResponse implements IHttpResponse {\r\n private readonly mResponse: any;\r\n private readonly mResponseType: XMLHttpRequestResponseType;\r\n\r\n public url: string = \"\";\r\n public headers: IHttpHeaders = {};\r\n public ok: boolean = false;\r\n public status: number = 0;\r\n public statusText: string = \"\";\r\n\r\n public get raw(): any {\r\n return this.mResponse;\r\n }\r\n\r\n public get hasBody(): boolean {\r\n return !!this.mResponse;\r\n }\r\n\r\n constructor(response: any, responseType: XMLHttpRequestResponseType) {\r\n this.mResponse = response;\r\n this.mResponseType = responseType;\r\n }\r\n\r\n public async text(): Promise {\r\n if (!this.mResponse) {\r\n return \"\";\r\n }\r\n\r\n switch (this.mResponseType) {\r\n case \"arraybuffer\":\r\n return Utils.string.fromArrayBuffer(this.mResponse as ArrayBuffer);\r\n case \"blob\":\r\n return (this.mResponse as Blob).text();\r\n case \"document\":\r\n return (this.mResponse as Document).documentElement.outerHTML;\r\n case \"json\":\r\n return JSON.stringify(this.mResponse);\r\n case \"text\":\r\n default:\r\n return this.mResponse as string;\r\n }\r\n }\r\n\r\n public async json(): Promise {\r\n if (!this.mResponse) {\r\n return \"\";\r\n }\r\n\r\n if (this.mResponseType === \"json\") {\r\n return this.mResponse;\r\n }\r\n\r\n let str: string = \"\";\r\n\r\n switch (this.mResponseType) {\r\n case \"arraybuffer\":\r\n str = Utils.string.fromArrayBuffer(this.mResponse as ArrayBuffer);\r\n break;\r\n case \"blob\":\r\n str = await (this.mResponse as Blob).text();\r\n break;\r\n case \"document\":\r\n throw new HttpError(APIErrorCode.Http, this.url, HttpErrorReason.Generic, \"The response is a document node, cannot convert to JSON.\");\r\n case \"text\":\r\n default:\r\n str = this.mResponse as string;\r\n break;\r\n }\r\n\r\n return JSON.parse(str);\r\n }\r\n\r\n public async object(rootNodeName?: string): Promise {\r\n let obj: any = await this.json();\r\n\r\n if (!obj) {\r\n throw new HttpError(APIErrorCode.Http, this.url, HttpErrorReason.Generic, \"The response is empty.\");\r\n }\r\n\r\n if (rootNodeName) {\r\n if (rootNodeName in obj) {\r\n obj = obj[rootNodeName];\r\n } else {\r\n logger.warn(`There is no node named '${rootNodeName}' at the root of the json.`);\r\n throw new HttpError(APIErrorCode.Http, this.url, HttpErrorReason.Generic, `The node '${rootNodeName}' does not exist.`);\r\n }\r\n }\r\n\r\n return obj as T;\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"./util.types\";\r\nimport {\r\n DEFAULT_REQUEST_TIMEOUT_MS,\r\n DEFAULT_RETRY_MODE,\r\n DEFAULT_RETRY_LIMIT,\r\n DEFAULT_RESPONSE_FORMAT,\r\n DEFAULT_RETRYABLE_STATUS_CODES,\r\n DEFAULT_FIXED_BACKOFF_INTERVAL,\r\n DEFAULT_INCREMENTAL_BACKOFF_INTERVAL,\r\n DEFAULT_EXPONENTIAL_BACKOFF_MULTIPLIER,\r\n DEFAULT_BACKOFF_RETRY_CEILING,\r\n DEFAULT_EXPONENTIAL_BACKOFF_INITIAL_DELAY,\r\n DEFAULT_EXPONENTIAL_BACKOFF_JITTER,\r\n IHttpClient,\r\n IHttpHeaders,\r\n IHttpRequest,\r\n IHttpSettings,\r\n IHttpResponse,\r\n IHttpBackoffConfiguration,\r\n IHttpExponentialBackoffConfiguration,\r\n HttpError,\r\n HttpMethod,\r\n HttpRequestData,\r\n HttpStatusCode,\r\n HttpBackoffStrategy,\r\n HttpErrorReason,\r\n HttpRetryMode,\r\n IHttpResponseListener,\r\n IHttpResponseStats,\r\n ServiceInfo\r\n} from \"./http-client.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { HttpRateLimiterService } from \"./rate-limiter\";\r\n\r\nconst logger = Logging.getLogger(\"core/http-client\");\r\n\r\n/**\r\n * An abstract HTTP client implementation.\r\n */\r\nexport abstract class HttpClient implements IHttpClient {\r\n private mRateLimiter: HttpRateLimiterService;\r\n private mResponseListeners: IHttpResponseListener[] = [];\r\n private mServiceInfo: ServiceInfo;\r\n private mSettings: IHttpSettings;\r\n private mRetryTimeoutHandle: number = -1;\r\n\r\n public get userAgent(): Nullable {\r\n if (this.mSettings.userAgent) {\r\n return this.mSettings.userAgent;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public set userAgent(value: Nullable) {\r\n this.mSettings.userAgent = value ? value : undefined;\r\n }\r\n\r\n public get settings(): IHttpSettings {\r\n return this.mSettings;\r\n }\r\n\r\n public set settings(value: IHttpSettings) {\r\n this.mSettings = value;\r\n }\r\n\r\n constructor(rateLimiter: HttpRateLimiterService, responseListener: Nullable, serviceInfo: ServiceInfo, settings: IHttpSettings = {}) {\r\n this.mRateLimiter = rateLimiter;\r\n if (responseListener) {\r\n this.mResponseListeners.push(responseListener)\r\n }\r\n this.mServiceInfo = serviceInfo;\r\n this.mSettings = settings;\r\n\r\n if (this.mSettings.retryMode === undefined) {\r\n this.mSettings.retryMode = DEFAULT_RETRY_MODE;\r\n }\r\n\r\n if (this.mSettings.retryStatusCodes === undefined) {\r\n this.mSettings.retryStatusCodes = DEFAULT_RETRYABLE_STATUS_CODES;\r\n }\r\n\r\n if (this.mSettings.maxRetries === undefined) {\r\n this.mSettings.maxRetries = DEFAULT_RETRY_LIMIT;\r\n }\r\n\r\n this.mSettings.maxRetries = Math.max(this.mSettings.maxRetries, 0);\r\n\r\n if (this.mSettings.timeout === undefined) {\r\n this.mSettings.timeout = DEFAULT_REQUEST_TIMEOUT_MS;\r\n }\r\n\r\n this.mSettings.timeout = Math.max(this.mSettings.timeout, 0);\r\n\r\n if (this.mSettings.responseFormat === undefined) {\r\n this.mSettings.responseFormat = DEFAULT_RESPONSE_FORMAT;\r\n }\r\n\r\n if (this.mSettings.backoffConfiguration === undefined) {\r\n this.mSettings.backoffConfiguration = {\r\n strategy: HttpBackoffStrategy.Exponential\r\n };\r\n }\r\n\r\n if (this.mSettings.backoffConfiguration.retryCeiling === undefined) {\r\n this.mSettings.backoffConfiguration.retryCeiling = DEFAULT_BACKOFF_RETRY_CEILING;\r\n }\r\n\r\n switch (this.mSettings.backoffConfiguration.strategy) {\r\n case HttpBackoffStrategy.Exponential:\r\n const expoBackoff: IHttpExponentialBackoffConfiguration = this.mSettings.backoffConfiguration as IHttpExponentialBackoffConfiguration;\r\n expoBackoff.multiplier = expoBackoff.multiplier ?? DEFAULT_EXPONENTIAL_BACKOFF_MULTIPLIER;\r\n expoBackoff.initialDelay = expoBackoff.initialDelay ?? DEFAULT_EXPONENTIAL_BACKOFF_INITIAL_DELAY;\r\n expoBackoff.jitter = expoBackoff.jitter ?? DEFAULT_EXPONENTIAL_BACKOFF_JITTER;\r\n break;\r\n case HttpBackoffStrategy.Fixed:\r\n this.mSettings.backoffConfiguration.interval = this.mSettings.backoffConfiguration.interval ?? DEFAULT_FIXED_BACKOFF_INTERVAL;\r\n break;\r\n case HttpBackoffStrategy.Incremental:\r\n this.mSettings.backoffConfiguration.interval = this.mSettings.backoffConfiguration.interval ?? DEFAULT_INCREMENTAL_BACKOFF_INTERVAL;\r\n break;\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n // cancel the backoff timer if we have one\r\n if (this.mRetryTimeoutHandle != -1) {\r\n clearTimeout(this.mRetryTimeoutHandle);\r\n }\r\n\r\n logger.verbose(\"Operation has been cancelled.\");\r\n }\r\n\r\n public async delete(url: string, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.DELETE, url, null, extraHeaders || {});\r\n }\r\n\r\n public async get(url: string, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.GET, url, null, extraHeaders || {});\r\n }\r\n\r\n public async head(url: string, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.HEAD, url, null, extraHeaders || {});\r\n }\r\n\r\n public async options(url: string, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.OPTIONS, url, null, extraHeaders || {});\r\n }\r\n\r\n public async patch(url: string, data: Nullable = null, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.PATCH, url, data, extraHeaders || {});\r\n }\r\n\r\n public async patchObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise\r\n {\r\n return this.patch(url, JSON.stringify(data), extraHeaders);\r\n }\r\n\r\n public async post(url: string, data: Nullable = null, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.POST, url, data, extraHeaders || {});\r\n }\r\n\r\n public async postObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise\r\n {\r\n return this.post(url, JSON.stringify(data), extraHeaders);\r\n }\r\n\r\n public async put(url: string, data: Nullable = null, extraHeaders?: IHttpHeaders): Promise {\r\n return this.request(HttpMethod.PUT, url, data, extraHeaders || {});\r\n }\r\n\r\n public async putObject(url: string, data: T, extraHeaders?: IHttpHeaders): Promise\r\n {\r\n return this.put(url, JSON.stringify(data), extraHeaders);\r\n }\r\n\r\n public async request(method: HttpMethod, url: string, data: Nullable, headers: IHttpHeaders): Promise {\r\n const req: IHttpRequest = {\r\n method: method,\r\n url: url,\r\n body: data,\r\n headers: headers\r\n };\r\n\r\n const stats: IHttpResponseStats = {\r\n retryCount: 0,\r\n durationInMs: 0,\r\n totalDurationInMs: 0,\r\n backoffConfiguration: this.mSettings.backoffConfiguration,\r\n backoffInfo: []\r\n }\r\n\r\n const tFirstRequest: number = new Date().getTime();\r\n let tThisRequest: number = tFirstRequest;\r\n let tRequestFinished: number = tFirstRequest;\r\n let response: Nullable = null;\r\n\r\n try {\r\n this.validateRequest(req);\r\n\r\n if (!this.mRateLimiter.allowRequest()) {\r\n throw new HttpError(APIErrorCode.Http, url, HttpErrorReason.TooManyRequests);\r\n }\r\n\r\n const maxRetries: number = this.mSettings.maxRetries;\r\n const retryMode: number = this.mSettings.retryMode;\r\n const retryDisabled: boolean = !!(retryMode & HttpRetryMode.Never);\r\n\r\n // retries not allowed, just return the response\r\n if (retryDisabled) {\r\n response = await this.executeRequest(req);\r\n stats.durationInMs = stats.totalDurationInMs = new Date().getTime() - tFirstRequest;\r\n this.notifyHttpResult(req, response, stats, 0);\r\n return response;\r\n }\r\n\r\n let retryAfterHeaderValue: string = \"\";\r\n do {\r\n if (stats.retryCount > 0) {\r\n logger.verbose(`Retrying previous failed request (${stats.retryCount}/${maxRetries}).`);\r\n }\r\n\r\n try {\r\n tThisRequest = stats.retryCount === 0 ? tFirstRequest : new Date().getTime();\r\n if (stats.retryCount > 0) {\r\n stats.backoffInfo.push({\r\n backoffWaitMs: tThisRequest - tRequestFinished\r\n });\r\n }\r\n response = await this.executeRequest(req);\r\n tRequestFinished = new Date().getTime();\r\n\r\n // nothing more to do\r\n if (response.ok || !this.isRetryableResponse(response)) {\r\n stats.durationInMs = tRequestFinished - tThisRequest;\r\n stats.totalDurationInMs = tRequestFinished - tFirstRequest;\r\n this.notifyHttpResult(req, response, stats, 0);\r\n return response;\r\n }\r\n\r\n // use the Retry-After value for waiting\r\n if (\"retry-after\" in response.headers && (retryMode & HttpRetryMode.RetryAfterHeader)) {\r\n retryAfterHeaderValue = response.headers[\"retry-after\"];\r\n }\r\n\r\n } catch(e: any) {\r\n // retry mode does not allow retries on a timeout\r\n if (!(retryMode & HttpRetryMode.Timeout) || !HttpClient.IsTimeoutError(e)) {\r\n throw e;\r\n }\r\n }\r\n\r\n // wait before retrying the request\r\n await this.doRetryAfterOrBackoff(retryAfterHeaderValue, stats.retryCount+1);\r\n } while (stats.retryCount++ < maxRetries);\r\n\r\n // no more retries available\r\n throw new HttpError(APIErrorCode.Http, url, HttpErrorReason.MaxRetriesExceeded);\r\n } catch (exception) {\r\n if (exception instanceof HttpError) {\r\n stats.durationInMs = tRequestFinished - tThisRequest;\r\n stats.totalDurationInMs = tRequestFinished - tFirstRequest;\r\n this.notifyHttpResult(req, response, stats, (exception as HttpError).reason);\r\n }\r\n throw exception;\r\n }\r\n }\r\n\r\n protected abstract executeRequest(req: IHttpRequest): Promise;\r\n protected abstract validateRequest(req: IHttpRequest): void;\r\n\r\n private notifyHttpResult(req: IHttpRequest, response: Nullable, stats: IHttpResponseStats, errorCode: number = 0): void {\r\n for (const listener of this.mResponseListeners) {\r\n listener.onHttpResult(req, response, this.mServiceInfo, stats, errorCode);\r\n }\r\n }\r\n\r\n private doRetryAfterOrBackoff(retryAfterHeaderValue: string, retries: number): Promise {\r\n // no Retry-After header, run normal backoff strategy\r\n if (!retryAfterHeaderValue) {\r\n return this.doBackoff(retries);\r\n }\r\n\r\n let retryDelay: number = parseInt(retryAfterHeaderValue);\r\n\r\n // header value did not contain an integer, try parsing\r\n // the value as a date instead\r\n if (isNaN(retryDelay)) {\r\n const ts: number = Date.parse(retryAfterHeaderValue);\r\n\r\n // get the delta between now and the retry date\r\n if (!isNaN(ts)) {\r\n retryDelay = ts - Date.now();\r\n\r\n // the timestamp was in the past, which is unlikely\r\n // just force to run the backoff instead\r\n if (retryDelay <= 0) {\r\n retryDelay = NaN;\r\n }\r\n\r\n }\r\n } else {\r\n retryDelay *= 1000;\r\n }\r\n\r\n // could not parse out the retry delay, just run the backoff instead\r\n if (isNaN(retryDelay)) {\r\n return this.doBackoff(retries);\r\n }\r\n\r\n logger.verbose(`Applying retry-after delay of ${retryDelay}ms`);\r\n\r\n return new Promise((resolve) => {\r\n this.mRetryTimeoutHandle = window.setTimeout(() => resolve(), retryDelay);\r\n })\r\n }\r\n\r\n private doBackoff(retries: number): Promise {\r\n let config: IHttpBackoffConfiguration = this.mSettings.backoffConfiguration as IHttpBackoffConfiguration;\r\n let timeoutInterval: number = 0;\r\n const intervalOrMultiplier: number = (config.strategy === HttpBackoffStrategy.Exponential ?\r\n (config).multiplier : config.interval ) as number;\r\n\r\n retries = Math.min(config.retryCeiling as number, retries);\r\n\r\n switch (config.strategy) {\r\n case HttpBackoffStrategy.Exponential:\r\n let expoConfig: IHttpExponentialBackoffConfiguration = config as IHttpExponentialBackoffConfiguration;\r\n let r: number = Math.random();\r\n let delay: number = (expoConfig.initialDelay ? expoConfig.initialDelay : 1);\r\n let jitter: number = expoConfig.jitter as number;\r\n\r\n delay *= Math.pow(intervalOrMultiplier, retries);\r\n delay -= (r * jitter * delay);\r\n timeoutInterval = delay;\r\n break;\r\n case HttpBackoffStrategy.Fixed:\r\n timeoutInterval = intervalOrMultiplier;\r\n break;\r\n case HttpBackoffStrategy.Incremental:\r\n timeoutInterval = retries * intervalOrMultiplier;\r\n break;\r\n }\r\n\r\n logger.verbose(`Applying retry backoff of ${timeoutInterval}ms.`);\r\n\r\n return new Promise((resolve) => {\r\n this.mRetryTimeoutHandle = window.setTimeout(() => resolve(), timeoutInterval);\r\n });\r\n }\r\n\r\n private isRetryableResponse(response:IHttpResponse): boolean {\r\n const retryMode: number = this.mSettings.retryMode;\r\n const retryableStatusCodes: HttpStatusCode[] = this.mSettings.retryStatusCodes;\r\n\r\n // Never\r\n if (retryMode & HttpRetryMode.Never) {\r\n return false;\r\n }\r\n\r\n // Always\r\n if (retryMode & HttpRetryMode.Always) {\r\n return true;\r\n }\r\n\r\n // Retry-After header\r\n if ((retryMode & HttpRetryMode.RetryAfterHeader) && \"retry-after\" in response.headers) {\r\n return true;\r\n }\r\n\r\n // Status Code\r\n if ((retryMode & HttpRetryMode.StatusCode) && retryableStatusCodes.includes(response.status)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private static IsTimeoutError(error: Error): boolean {\r\n return (error instanceof HttpError && error.reason === HttpErrorReason.Timeout);\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Utils } from \"./utils\";\r\nimport { Nullable } from \"./util.types\";\r\nimport { XHRHttpResponse, XHRReadyState } from \"./xhr-http-client.types\";\r\nimport { HttpClient } from \"./http-client\";\r\nimport {\r\n IHttpHeaders,\r\n IHttpRequest,\r\n IHttpResponse,\r\n IHttpSettings,\r\n HttpCancelledError,\r\n HttpError,\r\n HttpErrorReason,\r\n HttpStatusCode,\r\n HttpTimeoutError,\r\n IHttpResponseListener,\r\n ServiceInfo\r\n} from \"./http-client.types\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { HttpRateLimiterService } from \"./rate-limiter\";\r\n\r\n/**\r\n * An HTTP client that uses XMLHttpRequest to execute HTTP requests.\r\n *\r\n * @internal\r\n */\r\nexport class XHRHttpClient extends HttpClient {\r\n private mXHR: Nullable = null;\r\n\r\n constructor(rateLimiter: HttpRateLimiterService, responseListener: Nullable, serviceInfo: ServiceInfo, settings?: IHttpSettings) {\r\n super(rateLimiter, responseListener, serviceInfo, settings);\r\n }\r\n\r\n public cancel(): void {\r\n if (this.mXHR) {\r\n this.mXHR.abort();\r\n }\r\n\r\n super.cancel();\r\n }\r\n\r\n protected executeRequest(req: IHttpRequest): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.mXHR = new XMLHttpRequest();\r\n this.mXHR.onabort = (ev: ProgressEvent) => {\r\n this.reset();\r\n reject(new HttpCancelledError(APIErrorCode.Cancelled, req.url));\r\n };\r\n\r\n this.mXHR.ontimeout = (ev: ProgressEvent) => {\r\n this.reset();\r\n reject(new HttpTimeoutError(APIErrorCode.Network, req.url));\r\n };\r\n\r\n this.mXHR.onerror = (ev: ProgressEvent) => {\r\n this.reset();\r\n reject(new HttpError(APIErrorCode.Network, req.url, HttpErrorReason.Unknown));\r\n };\r\n\r\n this.mXHR.onreadystatechange = (ev: Event) => {\r\n const me: XMLHttpRequest = this.getXHRFromEvent(ev);\r\n\r\n // only handle the response if the request has\r\n // not been cancelled (status=0)\r\n if (me.readyState === XHRReadyState.Done && me.status > 0) {\r\n const response: XHRHttpResponse = new XHRHttpResponse(me.response, me.responseType);\r\n response.url = me.responseURL ? me.responseURL : req.url;\r\n response.headers = this.getResponseHeaders(me);\r\n response.ok = (me.status >= 100 && me.status < HttpStatusCode.BadRequest);\r\n response.status = me.status;\r\n response.statusText = me.statusText;\r\n\r\n this.reset();\r\n resolve(response);\r\n }\r\n };\r\n\r\n // configure the type of response object to\r\n // be used, e.g. XHR.response\r\n if (this.settings.responseFormat) {\r\n this.mXHR.responseType = this.settings.responseFormat;\r\n }\r\n\r\n // build the request and send it\r\n this.configure(req);\r\n this.mXHR.send(req.body ? req.body : null);\r\n });\r\n }\r\n\r\n protected validateRequest(req: IHttpRequest): void {\r\n // there is already a request running on this\r\n // client, multiple requests are not allowed\r\n if (this.mXHR !== null) {\r\n throw new HttpError(APIErrorCode.Http, req.url, HttpErrorReason.InvalidState, \"Request already in progress.\");\r\n }\r\n }\r\n\r\n private configure(req: IHttpRequest): void {\r\n if (!this.mXHR) {\r\n throw new HttpError(APIErrorCode.Http, req.url, HttpErrorReason.InvalidState, \"Unable to configure the request.\");\r\n }\r\n\r\n this.mXHR.open(req.method, req.url, true);\r\n this.setRequestHeaders(req);\r\n\r\n if (this.settings.timeout !== undefined) {\r\n this.mXHR.timeout = this.settings.timeout;\r\n }\r\n }\r\n\r\n private reset(): void {\r\n this.mXHR = null;\r\n }\r\n\r\n private getXHRFromEvent(ev: Event): XMLHttpRequest {\r\n if (ev.currentTarget && ev.currentTarget instanceof XMLHttpRequest) {\r\n return ev.currentTarget as XMLHttpRequest;\r\n }\r\n\r\n if (ev.target && ev.target instanceof XMLHttpRequest) {\r\n return ev.target as XMLHttpRequest;\r\n }\r\n\r\n // sanity, should never happen if this is called from an XHR event.\r\n throw new APIError(APIErrorCode.Http, \"Unable to find the XMLHttpRequest event target.\");\r\n }\r\n\r\n private getResponseHeaders(xhr: XMLHttpRequest): IHttpHeaders {\r\n const headers: IHttpHeaders = {};\r\n const responseHeaders: string[] = xhr.getAllResponseHeaders().trim().split(/[\\r\\n]+/);\r\n\r\n responseHeaders.forEach((header: string) => {\r\n // header = \"key: value\"\r\n const idx: number = header.indexOf(\":\");\r\n const key: string = header.substr(0, idx).toLowerCase();\r\n const value: string = header.substr(idx+1).trim();\r\n\r\n // XHR will probably already have multiple\r\n // headers combined but doesn't hurt to be safe\r\n if (headers[key]) {\r\n headers[key] += \",\" + value;\r\n } else {\r\n headers[key] = value;\r\n }\r\n });\r\n\r\n return headers;\r\n }\r\n\r\n private setRequestHeaders(req: IHttpRequest): void {\r\n if (!this.mXHR) {\r\n throw new HttpError(APIErrorCode.Http, req.url, HttpErrorReason.InvalidState, \"Unable to set the request headers.\");\r\n }\r\n\r\n const xhr: XMLHttpRequest = this.mXHR;\r\n const hdrs: IHttpHeaders = this.settings.headers ?? {};\r\n let userAgentHeaderFound: boolean = false;\r\n\r\n // merge in the request headers with the client headers\r\n Object.assign(hdrs, req.headers);\r\n\r\n Object.keys(hdrs).forEach((key) => {\r\n xhr.setRequestHeader(key, hdrs[key]);\r\n\r\n if (Utils.string.equals(key, \"user-agent\")) {\r\n userAgentHeaderFound = true;\r\n }\r\n });\r\n\r\n if (!userAgentHeaderFound && this.userAgent !== null) {\r\n // will generate an error in some browsers as you can't overwrite the\r\n // user-agent (even though you should be able to), this is left here\r\n // for devices that have custom browser/webviews where a user agent might\r\n // indeed need to be overwritten.\r\n xhr.setRequestHeader(\"User-Agent\", this.userAgent);\r\n }\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IHttpClient, IHttpResponseListener, IHttpSettings, ServiceInfo } from \"./http-client.types\";\r\nimport { HttpRateLimiterService } from \"./rate-limiter\";\r\nimport { Nullable } from \"./util.types\";\r\nimport { XHRHttpClient } from \"./xhr-http-client\";\r\n\r\n/**\r\n * Factory class used to create an {@link IHttpClient} instance that\r\n * will be used to perform all HTTP requests.\r\n *\r\n * The default client is an {@link XHRHttpClient}.\r\n */\r\nexport class HttpClientFactory {\r\n\r\n /**\r\n * Override to create an instance an {@link IHttpClient}.\r\n *\r\n * @param settings The {@link IHttpSettings} that should be passed on to the {@link IHttpClient}.\r\n *\r\n * @returns An instance of an {@link IHttpClient} that will satisfy HTTP requests.\r\n */\r\n public create(rateLimiter: HttpRateLimiterService, responseListener: Nullable, serviceInfo: ServiceInfo, settings?: IHttpSettings): IHttpClient {\r\n return new XHRHttpClient(rateLimiter, responseListener, serviceInfo, settings);\r\n }\r\n}","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { BaseStreamerConfiguration } from \"../streamer/base/base-streamer.types\";\r\nimport {\r\n AppLaunchMode,\r\n MetadataEntity,\r\n MonitorSettingsEntity,\r\n RequestStatusEntity,\r\n ServerVersionEntity,\r\n ServiceEndpointEntity,\r\n SessionEntity,\r\n SessionResponseEntity\r\n} from \"./server.entities\";\r\n\r\n/**\r\n * Describes status reported by the server in the statusCode field\r\n * of a RequestStatus entity.\r\n *\r\n * @internal\r\n */\r\n export enum RequestStatusCode {\r\n Unknown = 0,\r\n Success,\r\n Forbidden,\r\n Timeout,\r\n InternalError,\r\n InvalidRequest,\r\n InvalidRequestVersion,\r\n SessionListLimitExceeded,\r\n InvalidRequestDataMalformed,\r\n InvalidRequestDataMissing,\r\n RequestLimitExceeded,\r\n SessionLimitExceeded,\r\n InvalidRequestVersionOutOfDate,\r\n SessionEntitledTimeExceeded,\r\n AuthFailure,\r\n InvalidAuthenticationMalformed,\r\n InvalidAuthenticationExpired,\r\n InvalidAuthenticationNotFound,\r\n EntitlementFailure,\r\n InvalidAppIdNotAvailable,\r\n InvalidAppIdNotFound,\r\n InvalidSessionIdMalformed,\r\n InvalidSessionIdNotFound,\r\n EulaUnaccepted,\r\n Maintenance,\r\n ServiceUnavailable,\r\n SteamGuardRequired,\r\n SteamLoginRequired,\r\n SteamGuardInvalid,\r\n SteamProfilePrivate,\r\n InvalidCountryCode,\r\n InvalidLanguageCode,\r\n MissingCountryCode,\r\n MissingLanguageCode,\r\n SessionNotPaused,\r\n InvalidAuthenticationEmailNotVerified,\r\n InvalidAuthenticationUnsupportedProtocol,\r\n InvalidAuthenticationUnknownToken,\r\n InvalidAuthenticationCredentials,\r\n SessionNotPlaying,\r\n InvalidServiceResponse,\r\n AppPatching,\r\n GameNotFoundInZone,\r\n NotEnoughCredits,\r\n InvitationOnlyRegistration,\r\n RegionNotSupportedForRegistration,\r\n SessionTerminatedByAnotherClient,\r\n DeviceIdIsAlreadyUsed,\r\n ServiceNotExist,\r\n SessionExpired,\r\n SessionLimitPerDeviceExceeded,\r\n ForwardingZoneOutOfCapacity,\r\n RegionNotSupportedIndefinitely,\r\n RegionBanned,\r\n RegionOnHoldForFree,\r\n RegionOnHoldForPaid,\r\n AppMaintenance,\r\n ForwardRequestResourcePoolNotConfigured,\r\n ForwardRequestInsufficientVMCapacity,\r\n ForwardRequestInsufficientRouteCapacity,\r\n ForwardRequestInsufficientScratchSpaceCapacity,\r\n InstanceTypeNotSupportedInRegion,\r\n SessionQueueLengthExceeded,\r\n RegionNotSupportedForStreaming,\r\n ForwardRequestAllocationTimeExpired,\r\n ForwardGameBinariesNotAvailable,\r\n SessionGameBinariesNotAvailableInRegion,\r\n UEKRetrievalFailed,\r\n EntitlementFailureForResource,\r\n SessionInQueueAbandoned\r\n}\r\n\r\n/**\r\n * Represents an error generated from a response that\r\n * contains a requestStatus field.\r\n */\r\nexport class RequestStatusError extends APIError {\r\n private readonly mRequestStatus: RequestStatusEntity;\r\n\r\n /**\r\n * Returns the request status entity from the\r\n * original server response.\r\n */\r\n public get requestStatus(): RequestStatusEntity {\r\n return this.mRequestStatus;\r\n }\r\n\r\n /**\r\n * Gets the message provided or, if no message was provided, constructs\r\n * one from the request status entity.\r\n */\r\n public get message(): string {\r\n let msg: string = super.message;\r\n\r\n if (!msg) {\r\n msg = RequestStatusError.GetMessageFromRequestStatus(this.mRequestStatus);\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n /** @internal **/\r\n constructor(requestStatus: RequestStatusEntity, message?: string) {\r\n super(requestStatus.unifiedErrorCode ?? APIErrorCode.MissingUnifiedErrorCode, message);\r\n\r\n this.mRequestStatus = requestStatus;\r\n }\r\n\r\n /** @internal **/\r\n public static GetMessageFromRequestStatus(status: RequestStatusEntity): string {\r\n let msg: string = \"\";\r\n\r\n if (status.statusDescription) {\r\n msg += `${status.statusDescription}`;\r\n }\r\n\r\n if (status.statusCode && status.statusCode > 0) {\r\n if (msg) {\r\n msg += \" \";\r\n }\r\n\r\n msg += `(${status.statusCode})`;\r\n }\r\n\r\n return msg;\r\n }\r\n}\r\n\r\n/**\r\n * Represents an HTTP error returned from a server response that\r\n * contains a `requestStatus` field.\r\n */\r\nexport class HttpRequestStatusError extends RequestStatusError {\r\n private readonly mUrl: string;\r\n private readonly mHttpStatusCode: number;\r\n\r\n /**\r\n * Gets the HTTP status code.\r\n */\r\n public get httpStatusCode(): number {\r\n return this.mHttpStatusCode;\r\n }\r\n\r\n /**\r\n * Returns the url of the original request from where this error occurred.\r\n */\r\n public get url(): string {\r\n return this.mUrl;\r\n }\r\n\r\n /** @internal **/\r\n constructor(url: string, requestStatus: RequestStatusEntity, httpStatus: number, message?: string) {\r\n super(requestStatus, message);\r\n\r\n this.mUrl = url;\r\n this.mHttpStatusCode = httpStatus;\r\n }\r\n\r\n /**\r\n * Get a detailed string representation of this error.\r\n *\r\n * @returns\r\n * A detailed error string.\r\n */\r\n public toString(): string {\r\n return `${this.message}\\n\\tcode=${Utils.string.hex(this.code, 8)}, url=${this.url}, status=${this.httpStatusCode}`;\r\n }\r\n}\r\n\r\n/**\r\n * Represents an error generated from a session api that\r\n * contains a `requestStatus` field.\r\n */\r\nexport class SessionRequestStatusError extends HttpRequestStatusError {\r\n private readonly mResponse: SessionResponseEntity;\r\n\r\n /**\r\n * Gets the session entity for which the error originated, or undefined\r\n * if this error occurred before a session became available.\r\n */\r\n public get session(): SessionEntity | undefined {\r\n return this.mResponse.session;\r\n }\r\n\r\n /**\r\n * Gets an array of active sessions for a user, for example,\r\n * when a user tries to create a new session after that max.\r\n * number of sessions has been reached.\r\n */\r\n public get otherSessions(): SessionEntity[] | undefined {\r\n return this.mResponse.otherUserSessions;\r\n }\r\n\r\n /** @internal **/\r\n constructor(url: string, sessionResponse: SessionResponseEntity, httpStatus: number, message?: string) {\r\n super(url, sessionResponse.requestStatus!, httpStatus, message);\r\n\r\n this.mResponse = sessionResponse;\r\n }\r\n\r\n /**\r\n * Get a detailed string representation of this error.\r\n *\r\n * @returns\r\n * A detailed error string.\r\n */\r\n public toString(): string {\r\n let msg: string = super.toString();\r\n\r\n if (this.session) {\r\n return `${msg}, sessionId=${this.session.sessionId}`;\r\n }\r\n\r\n return msg;\r\n }\r\n}\r\n\r\nexport interface Zone {\r\n name: string;\r\n address: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ZoneTable {\r\n [key: string]: Zone;\r\n}\r\n\r\n/** @internal **/\r\nexport enum ServerType {\r\n Unknown = -1,\r\n Nimbus = 0,\r\n GameStream = 1,\r\n GameStreamRoamingProxy = 2,\r\n CloudStation = 3,\r\n QuadroStation = 4,\r\n PassThrough = 51,\r\n Playback = 52,\r\n SecureSignallingPassThrough = 53\r\n}\r\n\r\n/**\r\n * Represents server information.\r\n */\r\nexport interface ServerInfo {\r\n /**\r\n * The version information of the server.\r\n */\r\n version: ServerVersionEntity;\r\n\r\n /**\r\n * The Virtual Private Cloud identifier of the server.\r\n */\r\n vpcId: string;\r\n\r\n /**\r\n * The type of server.\r\n */\r\n serverType: ServerType;\r\n\r\n /**\r\n * The users default zone. This is the zone that the user\r\n * is physically closest to based on their IP address only.\r\n * If the user is on a VPN then it is the zone closest to the\r\n * location of the VPN the user is connected to.\r\n */\r\n defaultZone: Zone;\r\n\r\n /**\r\n * The zones that are currently available.\r\n */\r\n zones: ZoneTable;\r\n\r\n /**\r\n * The streaming modes supported by the server.\r\n */\r\n monitorSettings: MonitorSettingsEntity[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServiceProviderEndpoint {\r\n endpoint: Nullable;\r\n defaultEndpoint: ServiceEndpointEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport interface SessionRequestParams {\r\n appId: number;\r\n appLaunchMode?: AppLaunchMode;\r\n accountLinked?: boolean;\r\n monitorSettings: MonitorSettingsEntity[];\r\n metadata?: MetadataEntity[];\r\n sessionId?: string;\r\n subSessionId?: string;\r\n keyboardLayout?: string;\r\n config?: BaseStreamerConfiguration;\r\n}\r\n\r\n/**\r\n * Represents an available keyboard layout and its localized description\r\n */\r\n export interface KeyboardLayout {\r\n /**\r\n * The locale of this keyboard layout\r\n */\r\n localeCode: string;\r\n\r\n /**\r\n * The localized description of this keyboard layout\r\n */\r\n description: string;\r\n}\r\n\r\n/** @internal */\r\nexport interface serverLatencyEntry {\r\n fingerprint: string;\r\n serverList: string[];\r\n lowestLatencyServer: string;\r\n}\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Represents a host device operating system.\r\n */\r\nexport enum DeviceOS {\r\n\r\n /** Other / Unknown **/\r\n Other = \"other\",\r\n\r\n /** Microsoft Windows **/\r\n Windows = \"windows\",\r\n\r\n /** Apple MacOS **/\r\n macOS = \"macos\",\r\n\r\n /** Linux **/\r\n Linux = \"linux\",\r\n\r\n /** Apple iOS **/\r\n iOS = \"ios\",\r\n\r\n /** Apple iPad **/\r\n iPadOS = \"ipados\",\r\n\r\n /** Apple TV **/\r\n tvOS = \"tvos\",\r\n\r\n /** Android **/\r\n Android = \"android\",\r\n\r\n /** Chrome OS **/\r\n ChromeOS = \"chromeos\",\r\n\r\n /** Fire OS **/\r\n FireOS = \"fireos\",\r\n\r\n /** Shield **/\r\n Shield = \"shield\",\r\n\r\n /** Samsung Tizen **/\r\n Tizen = \"tizen\",\r\n\r\n /** LG webOS **/\r\n webOS = \"webos\",\r\n\r\n /** Microsoft Xbox **/\r\n Xbox = \"Xbox\",\r\n\r\n /** Connected Car OS **/\r\n ccOS = \"ccOS\",\r\n\r\n /** Steam OS **/\r\n SteamOS = \"SteamOS\"\r\n}\r\n\r\n/**\r\n * Represents a type of device.\r\n */\r\nexport enum DeviceKind {\r\n Other = 0,\r\n Desktop = 1,\r\n Laptop = 2,\r\n Phone = 3,\r\n Tablet = 4,\r\n TV = 5,\r\n Console = 6,\r\n Server = 7,\r\n}\r\n\r\n/**\r\n * Represents a type of browser\r\n */\r\nexport enum BrowserID {\r\n Other = \"Other\",\r\n Chrome = \"Chrome\",\r\n Firefox = \"Firefox\",\r\n Safari = \"Safari\",\r\n Edge = \"Edge\",\r\n Chromium = \"Chromium\",\r\n Opera = \"Opera\",\r\n Brave = \"Brave\",\r\n Samsung = \"Samsung\",\r\n Silk = \"Silk\",\r\n Yandex = \"Yandex\",\r\n EdgeLegacy = \"EdgeLegacy\",\r\n ReactNative = \"ReactNative\"\r\n}\r\n\r\n/**\r\n * Represents the orientation of a physical device.\r\n */\r\nexport enum DeviceOrientation {\r\n PortraitUp,\r\n PortraitDown,\r\n LandscapeLeft,\r\n LandscapeRight,\r\n Other\r\n}\r\n\r\n/**\r\n * Represents a device log type.\r\n */\r\nexport enum DeviceLogType {\r\n Unknown = 0,\r\n Process = 1,\r\n}\r\n\r\n/**\r\n * Represents information about connected displays.\r\n */\r\nexport interface DisplayDetails {\r\n physicalRes: string;\r\n logicalRes: string;\r\n refreshRate: number;\r\n displayNumber: number;\r\n}\r\n\r\nexport interface DeviceInformation {\r\n os: DeviceOS;\r\n version: string;\r\n kind: DeviceKind;\r\n manufacturer?: string;\r\n model?: string;\r\n product?: string;\r\n browser: BrowserID;\r\n browserVersion: string;\r\n}\r\n\r\n/**\r\n * The event data sent when a {@link DeviceEvents.browsercallback} event is dispatched.\r\n */\r\nexport interface BrowserCallbackEvent {\r\n /**\r\n * The action for which the callback was registered for.\r\n */\r\n action: string;\r\n\r\n /**\r\n * Any data passed from the browser to the app.\r\n */\r\n data: any;\r\n}\r\n\r\n/**\r\n * Represents events dispatched from the `GFN.device` instance.\r\n */\r\nexport interface DeviceEvents {\r\n\r\n /**\r\n * Sent when a registered browser callback is invoked.\r\n *\r\n * @param e\r\n * The browser callback event data.\r\n */\r\n browsercallback(e: BrowserCallbackEvent): void;\r\n}\r\n\r\n/**\r\n * A callback that is invoked when a native app is launched from a browser link\r\n * that contains a registered browser handler action.\r\n *\r\n * See {@link Device.registerBrowserCallback | GFN.device.registerBrowserCallback}.\r\n */\r\nexport type BrowserCallbackHandler = (obj: any) => void;","/* Copyright (c) 2021-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { PlatformID } from \"./platform.types\";\r\nimport { BrowserID, DeviceKind, DeviceOS } from \"../device/device.types\";\r\nimport { PlatformName as GsPlatformID, DeviceOS as GsDeviceOS, BrowserName as GsBrowserName, DeviceType as GsDeviceType } from \"@gamestream-stable/gridserver\";\r\nimport { NvBrowserType, NvDeviceOS, NvDeviceType } from \"../nv-types\";\r\n\r\n\r\n/**\r\n * @internal\r\n *\r\n * The following are deprecated but some services may still rely on the values, we just do a best\r\n * match here.\r\n * https://confluence.nvidia.com/display/GENPCGRP/Client+identification+headers\r\n */\r\nconst CLIENT_IDENTITY_PLATFORM_MAP: Map = new Map([\r\n [PlatformID.AmazonFire, \"Android\"],\r\n [PlatformID.Android, \"Android\"],\r\n [PlatformID.AppleMobile, \"MacOSX\"],\r\n [PlatformID.AppleTV, \"MacOSX\"],\r\n [PlatformID.Browser, \"WebRTC\"],\r\n [PlatformID.Chromebook, \"Android\"],\r\n [PlatformID.ChromeCast, \"Android\"],\r\n [PlatformID.ConnectedCar, \"WebRTC\"],\r\n [PlatformID.Huawei, \"Android\"],\r\n [PlatformID.JioStb, \"Android\"],\r\n [PlatformID.KbroA0, \"Android\"],\r\n [PlatformID.LGTV, \"WebRTC\"],\r\n [PlatformID.LGUPlus, \"Android\"],\r\n [PlatformID.Linux, \"MacOSX\"], // just use mac\r\n [PlatformID.Mac, \"MacOSX\"],\r\n [PlatformID.MiBox, \"Android\"],\r\n [PlatformID.SamsungTV, \"WebRTC\"],\r\n [PlatformID.Shield, \"Android\"],\r\n [PlatformID.Steam, \"MacOSX\"], // just use mac\r\n [PlatformID.TVision, \"Android\"],\r\n [PlatformID.Windows, \"Windows\"],\r\n [PlatformID.Xbox, \"WebRTC\"]\r\n]);\r\n\r\n/** @internal **/\r\nexport function ToClientIdentityPlatform(id: PlatformID): string {\r\n if (CLIENT_IDENTITY_PLATFORM_MAP.has(id)) {\r\n return CLIENT_IDENTITY_PLATFORM_MAP.get(id)!;\r\n }\r\n return \"Unknown\";\r\n}\r\n\r\n/** @internal **/\r\nconst FROM_GS_DEVICE_OS_MAP: Map = new Map([\r\n [GsDeviceOS.ANDROID, DeviceOS.Android],\r\n [GsDeviceOS.CCOS, DeviceOS.ccOS],\r\n [GsDeviceOS.CHROMEOS, DeviceOS.ChromeOS],\r\n [GsDeviceOS.IOS, DeviceOS.iOS],\r\n [GsDeviceOS.IPADOS, DeviceOS.iPadOS],\r\n [GsDeviceOS.LINUX, DeviceOS.Linux],\r\n [GsDeviceOS.MACOS, DeviceOS.macOS],\r\n [GsDeviceOS.SHIELD, DeviceOS.Shield],\r\n [GsDeviceOS.STEAMOS, DeviceOS.SteamOS],\r\n [GsDeviceOS.TIZEN, DeviceOS.Tizen],\r\n [GsDeviceOS.TVOS, DeviceOS.tvOS],\r\n [GsDeviceOS.WEBOS, DeviceOS.webOS],\r\n [GsDeviceOS.WINDOWS, DeviceOS.Windows],\r\n [GsDeviceOS.XBOX, DeviceOS.Xbox]\r\n]);\r\n\r\n/** @internal **/\r\nexport function FromGsDeviceOS(os?: GsDeviceOS): DeviceOS {\r\n if (os && FROM_GS_DEVICE_OS_MAP.has(os)) {\r\n return FROM_GS_DEVICE_OS_MAP.get(os)!;\r\n }\r\n\r\n return DeviceOS.Other;\r\n}\r\n\r\n/** @internal **/\r\nconst TO_GS_DEVICE_OS_MAP: Map = new Map([\r\n [DeviceOS.Android, GsDeviceOS.ANDROID],\r\n [DeviceOS.ccOS, GsDeviceOS.CCOS],\r\n [DeviceOS.ChromeOS, GsDeviceOS.CHROMEOS],\r\n [DeviceOS.FireOS, GsDeviceOS.ANDROID],\r\n [DeviceOS.iOS, GsDeviceOS.IOS],\r\n [DeviceOS.iPadOS, GsDeviceOS.IPADOS],\r\n [DeviceOS.Linux, GsDeviceOS.LINUX],\r\n [DeviceOS.macOS, GsDeviceOS.MACOS],\r\n [DeviceOS.Shield, GsDeviceOS.SHIELD],\r\n [DeviceOS.SteamOS, GsDeviceOS.STEAMOS],\r\n [DeviceOS.Tizen, GsDeviceOS.TIZEN],\r\n [DeviceOS.tvOS, GsDeviceOS.TVOS],\r\n [DeviceOS.webOS, GsDeviceOS.WEBOS],\r\n [DeviceOS.Windows, GsDeviceOS.WINDOWS],\r\n [DeviceOS.Xbox, GsDeviceOS.XBOX],\r\n]);\r\n\r\n/** @internal **/\r\nexport function ToGsDeviceOS(os: DeviceOS): GsDeviceOS {\r\n if (TO_GS_DEVICE_OS_MAP.has(os)) {\r\n return TO_GS_DEVICE_OS_MAP.get(os)!;\r\n }\r\n\r\n // there is no \"other\" or \"unknown\" just default to Windows\r\n return GsDeviceOS.WINDOWS;\r\n}\r\n\r\n/** @internal **/\r\nconst FROM_GS_DEVICE_TYPE_MAP: Map = new Map([\r\n [GsDeviceType.CONSOLE, DeviceKind.Console],\r\n [GsDeviceType.DESKTOP, DeviceKind.Desktop],\r\n [GsDeviceType.LAPTOP, DeviceKind.Laptop],\r\n [GsDeviceType.PHONE, DeviceKind.Phone],\r\n [GsDeviceType.TABLET, DeviceKind.Tablet],\r\n [GsDeviceType.TV, DeviceKind.TV]\r\n]);\r\n\r\n/** @internal **/\r\nexport function FromGsDeviceType(type?: GsDeviceType): DeviceKind {\r\n if (type && FROM_GS_DEVICE_TYPE_MAP.has(type)) {\r\n return FROM_GS_DEVICE_TYPE_MAP.get(type)!;\r\n }\r\n\r\n return DeviceKind.Other;\r\n}\r\n\r\n/** @internal **/\r\nconst TO_GS_PLATFORM_NAME_MAP: Map = new Map([\r\n [PlatformID.AmazonFire, GsPlatformID.FIRETV],\r\n [PlatformID.Android, GsPlatformID.ANDROID],\r\n [PlatformID.AppleTV, \"tvOS\"],\r\n [PlatformID.Chromebook, GsPlatformID.CHROME_OS],\r\n [PlatformID.ChromeCast, GsPlatformID.ANDROID],\r\n [PlatformID.ConnectedCar, GsPlatformID.CCOS],\r\n [PlatformID.Huawei, GsPlatformID.ANDROID],\r\n [PlatformID.JioStb, GsPlatformID.ANDROID],\r\n [PlatformID.KbroA0, GsPlatformID.ANDROID],\r\n [PlatformID.LGTV, GsPlatformID.WEBOS],\r\n [PlatformID.LGUPlus, GsPlatformID.ANDROID],\r\n [PlatformID.Linux, GsPlatformID.LINUX],\r\n [PlatformID.Mac, GsPlatformID.MAC],\r\n [PlatformID.MiBox, GsPlatformID.ANDROID],\r\n [PlatformID.SamsungTV, GsPlatformID.TIZEN],\r\n [PlatformID.Shield, GsPlatformID.ANDROID],\r\n [PlatformID.Steam, GsPlatformID.STEAMOS],\r\n [PlatformID.TVision, GsPlatformID.ANDROID],\r\n [PlatformID.Windows, GsPlatformID.WINDOWS],\r\n [PlatformID.Xbox, GsPlatformID.XBOX]\r\n]);\r\n\r\n/** @internal **/\r\nexport function ToGsPlatformName(id: PlatformID, os: DeviceOS): string {\r\n if (TO_GS_PLATFORM_NAME_MAP.has(id)) {\r\n return TO_GS_PLATFORM_NAME_MAP.get(id)!;\r\n }\r\n\r\n // handle apple phone and tablets\r\n if (id === PlatformID.AppleMobile) {\r\n switch(os) {\r\n case DeviceOS.iOS:\r\n return GsPlatformID.IOS;\r\n case DeviceOS.iPadOS:\r\n return GsPlatformID.IPADOS;\r\n }\r\n }\r\n\r\n return \"Browser\";\r\n}\r\n\r\n/** @internal **/\r\nconst TO_GS_BROWSER_NAME_MAP: Map = new Map([\r\n [BrowserID.Chrome, GsBrowserName.CHROME],\r\n [BrowserID.Firefox, GsBrowserName.FIREFOX],\r\n [BrowserID.Safari, GsBrowserName.SAFARI],\r\n [BrowserID.Edge, GsBrowserName.EDGE],\r\n [BrowserID.Chromium, GsBrowserName.CHROMIUM],\r\n [BrowserID.Opera, GsBrowserName.OPERA],\r\n [BrowserID.Brave, GsBrowserName.BRAVE],\r\n [BrowserID.Samsung, GsBrowserName.SAMSUNG],\r\n [BrowserID.Silk, GsBrowserName.SILK],\r\n [BrowserID.Yandex, GsBrowserName.YANDEX],\r\n [BrowserID.EdgeLegacy, GsBrowserName.EDGE_LEGACY],\r\n [BrowserID.ReactNative, GsBrowserName.REACT],\r\n]);\r\n\r\n/** @internal **/\r\nconst FROM_GS_BROWSER_NAME_MAP = new Map(Array.from(TO_GS_BROWSER_NAME_MAP, entry => [entry[1], entry[0]]));\r\n\r\n/** @internal **/\r\nexport function ToGsBrowserName(id: BrowserID): string {\r\n if (TO_GS_BROWSER_NAME_MAP.has(id)) {\r\n return TO_GS_BROWSER_NAME_MAP.get(id)!;\r\n }\r\n return \"undefined\";\r\n}\r\n\r\n/** @internal **/\r\nexport function FromGsBrowserName(name: string): BrowserID {\r\n if (FROM_GS_BROWSER_NAME_MAP.has(name as GsBrowserName)) {\r\n return FROM_GS_BROWSER_NAME_MAP.get(name as GsBrowserName)!;\r\n }\r\n return BrowserID.Other;\r\n}\r\n\r\n/** @internal **/\r\nconst TO_NV_DEVICE_OS_MAP: Map = new Map([\r\n [DeviceOS.Android, \"Android\"],\r\n [DeviceOS.ChromeOS, \"ChromeOS\"],\r\n [DeviceOS.FireOS, \"Android\"],\r\n [DeviceOS.iOS, \"iOS\"],\r\n [DeviceOS.iPadOS, \"iPadOS\"],\r\n [DeviceOS.Linux, \"Linux\"],\r\n [DeviceOS.macOS, \"MacOS\"],\r\n [DeviceOS.Shield, \"Shield\"],\r\n [DeviceOS.SteamOS, \"SteamOS\"],\r\n [DeviceOS.Tizen, \"Tizen\"],\r\n [DeviceOS.tvOS, \"tvOS\"],\r\n [DeviceOS.webOS, \"WebOS\"],\r\n [DeviceOS.Windows, \"Windows\"],\r\n [DeviceOS.Xbox, \"Xbox\"]\r\n]);\r\n\r\n/** @internal **/\r\nexport function ToNvDeviceOs(os: DeviceOS, platform: PlatformID): NvDeviceOS {\r\n if (TO_NV_DEVICE_OS_MAP.has(os)) {\r\n return TO_NV_DEVICE_OS_MAP.get(os)!;\r\n }\r\n\r\n return \"undefined\";\r\n}\r\n\r\n/** @internal **/\r\nconst TO_NV_DEVICE_KIND_MAP: Map = new Map([\r\n [DeviceKind.Other, \"undefined\"],\r\n [DeviceKind.Desktop, \"Desktop\"],\r\n [DeviceKind.Laptop, \"Laptop\"],\r\n [DeviceKind.Phone, \"Phone\"],\r\n [DeviceKind.Tablet, \"Tablet\"],\r\n [DeviceKind.TV, \"TV\"],\r\n [DeviceKind.Console, \"Console\"],\r\n [DeviceKind.Server, \"Server\"],\r\n]);\r\n\r\n/** @internal */\r\nexport function ToNvDeviceType(kind: DeviceKind): NvDeviceType {\r\n if (TO_NV_DEVICE_KIND_MAP.has(kind)) {\r\n return TO_NV_DEVICE_KIND_MAP.get(kind)!;\r\n }\r\n\r\n return \"undefined\";\r\n}\r\n\r\n\r\n/** @internal **/\r\nconst TO_NV_BROWSER_TYPE_MAP: Map = new Map([\r\n [BrowserID.Chrome, \"Chrome\"],\r\n [BrowserID.Firefox, \"Firefox\"],\r\n [BrowserID.Safari, \"Safari\"],\r\n [BrowserID.Edge, \"Edge\"],\r\n [BrowserID.Chromium, \"Chromium\"],\r\n [BrowserID.Opera, \"Opera\"],\r\n [BrowserID.Brave, \"Brave\"],\r\n [BrowserID.Samsung, \"Samsung\"],\r\n [BrowserID.Silk, \"Silk\"],\r\n [BrowserID.Yandex, \"Yandex\"],\r\n [BrowserID.EdgeLegacy, \"Edge_legacy\"],\r\n [BrowserID.ReactNative, \"ReactNative\"]\r\n]);\r\n\r\n/** @internal **/\r\nexport function ToNvBrowserType(id: BrowserID): NvBrowserType {\r\n if (TO_NV_BROWSER_TYPE_MAP.has(id)) {\r\n return TO_NV_BROWSER_TYPE_MAP.get(id)!;\r\n }\r\n return \"undefined\";\r\n}","/* Copyright (c) 2020-2021, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { HttpError, HttpErrorReason, HttpMethod, HttpRequestData, IHttpClient, IHttpHeaders, IHttpRequest, IHttpResponse, IHttpRateLimiter, IHttpRateLimiterConfiguration, HttpRateLimiterType, ISlidingWindowHttpRateLimiterConfiguration } from \"./http-client.types\";\r\nimport { Nullable } from \"./util.types\";\r\n\r\nexport class SlidingWindowRateLimiter implements IHttpRateLimiter {\r\n public readonly type: HttpRateLimiterType = HttpRateLimiterType.SlidingWindow;\r\n public readonly intervalSeconds: number;\r\n public readonly requestLimit: number;\r\n\r\n private mPrevEpoch: number;\r\n private mPrevEpochCount: number;\r\n private mCurEpoch: number;\r\n private mCurEpochCount: number;\r\n\r\n constructor(config: ISlidingWindowHttpRateLimiterConfiguration) {\r\n this.intervalSeconds = config.intervalSeconds;\r\n this.requestLimit = config.requestLimit;\r\n this.mPrevEpoch = 0;\r\n this.mPrevEpochCount = 0;\r\n this.mCurEpoch = 0;\r\n this.mCurEpochCount = 0;\r\n\r\n if (this.intervalSeconds < 1) {\r\n throw new APIError(APIErrorCode.ConfigurationError, \"Invalid ISlidingWindowHttpRateLimiterConfiguration: intervalSeconds must be >= 1\");\r\n }\r\n\r\n if (this.requestLimit < 1) {\r\n throw new APIError(APIErrorCode.ConfigurationError, \"Invalid ISlidingWindowHttpRateLimiterConfiguration: requestLimit must be >= 1\");\r\n }\r\n }\r\n\r\n public allowRequest(): boolean {\r\n const now: number = new Date().getTime();\r\n const epoch: number = Math.floor(now / 1000 / this.intervalSeconds);\r\n\r\n if (epoch > this.mCurEpoch) {\r\n this.rotateEpoch(epoch);\r\n }\r\n\r\n const percentCurrentEpochCompleted: number = (now - (epoch * 1000 * this.intervalSeconds)) / (this.intervalSeconds * 1000);\r\n const prevEstimatedRequests: number = (1 - percentCurrentEpochCompleted) * this.mPrevEpochCount;\r\n const totalEstimatedRequests: number = prevEstimatedRequests + this.mCurEpochCount;\r\n\r\n if (totalEstimatedRequests <= this.requestLimit) {\r\n this.mCurEpochCount++;\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private rotateEpoch(epoch: number): void {\r\n // If the last recorded request was in the prior epoch, move the current data into the previous.\r\n // If the last recorded request was earlier than the prior epoch, we're starting over\r\n if (this.mCurEpoch === epoch - 1) {\r\n this.mPrevEpoch = this.mCurEpoch;\r\n this.mPrevEpochCount = this.mCurEpochCount;\r\n } else {\r\n this.mPrevEpoch = 0;\r\n this.mPrevEpochCount = 0;\r\n }\r\n this.mCurEpoch = epoch;\r\n this.mCurEpochCount = 0;\r\n }\r\n}\r\n\r\nexport class HttpRateLimiterService {\r\n private mRateLimiters: IHttpRateLimiter[];\r\n\r\n constructor(configs: IHttpRateLimiterConfiguration[]) {\r\n this.mRateLimiters = [];\r\n for (const config of configs) {\r\n this.mRateLimiters.push(this.createRateLimiter(config));\r\n }\r\n }\r\n\r\n public allowRequest(): boolean {\r\n for (const limiter of this.mRateLimiters) {\r\n if (!limiter.allowRequest()) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private createRateLimiter(config: IHttpRateLimiterConfiguration): IHttpRateLimiter {\r\n switch (config.type) {\r\n case HttpRateLimiterType.SlidingWindow:\r\n return new SlidingWindowRateLimiter(config as ISlidingWindowHttpRateLimiterConfiguration);\r\n default:\r\n throw new APIError(APIErrorCode.InvalidParameter, `Unknown type of rate limiter: ${config.type}`);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { JWTPartnerOptions, JWTPartnerPayload } from \"./auth.types\";\r\n\r\nconst logger = Logging.getLogger(\"idm/jwt\");\r\n\r\n/**\r\n * Class representing a {@link https://tools.ietf.org/html/rfc7519 | JWT}\r\n */\r\nexport class JWT {\r\n public readonly token: any;\r\n public readonly header: any;\r\n public readonly payload: TPayload;\r\n public readonly signature: string;\r\n\r\n constructor(token: string) {\r\n const arr = token.split(\".\");\r\n if (arr.length !== 3) {\r\n throw new APIError(APIErrorCode.InvalidToken, \"The JWT is invalid.\");\r\n }\r\n\r\n try {\r\n this.header = JSON.parse(Utils.base64.decode(arr[0]));\r\n this.payload = JSON.parse(Utils.base64.decode(arr[1]));\r\n this.signature = arr[2];\r\n } catch (e: any) {\r\n throw new APIError(APIErrorCode.InvalidToken, \"The JWT is invalid.\");\r\n }\r\n\r\n this.token = token;\r\n }\r\n\r\n public toString() {\r\n return this.token;\r\n }\r\n}\r\n\r\n/**\r\n * Class representing an NVIDIA {@link https://tools.ietf.org/html/rfc7519 | JWT}\r\n */\r\nexport class JWTPartner extends JWT {\r\n constructor(data: string) {\r\n super(data);\r\n\r\n if (!this.payload.options) {\r\n throw new APIError(APIErrorCode.InvalidToken, \"The NVIDIA JWT is missing 'options'.\");\r\n }\r\n\r\n try {\r\n this.payload.options = JSON.parse(Utils.base64.decode(this.payload.options as unknown as string))\r\n } catch (e: any) {\r\n throw new APIError(APIErrorCode.InvalidToken, \"Could not parse 'options' for NVIDIA JWT\");\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { HttpClientFactory } from \"../core/http-client-factory\";\r\nimport { HttpEvents, HttpMethod, IHttpClient, IHttpRequest, IHttpResponse, IHttpResponseListener, IHttpResponseStats, IHttpSettings, ServiceInfo } from \"../core/http-client.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { ProductLocalizedEntity, ProductsResponseEntity, StreamingQualityResponseEntity, SubscriptionResponseEntity } from \"../entitlement/entitlement.entities\";\r\nimport { SessionRequestStatusError, HttpRequestStatusError } from \"../server/server.types\";\r\n\r\nimport {\r\n CountryEntity,\r\n CreateSessionRequestEntity,\r\n DeleteSessionResponseEntity,\r\n ModifySessionRequestEntity,\r\n RequestStatusEntity,\r\n ServerInfoResponseEntity,\r\n ServiceInfoResponseEntity,\r\n SessionResponseEntity,\r\n SessionsResponseEntity\r\n} from \"../server/server.entities\";\r\n\r\nimport {\r\n GraphQLErrorMessage,\r\n GraphQLErrorResponse,\r\n GraphQLPayload,\r\n GraphQLResponse,\r\n RestClientError,\r\n RestClientGfcChunkError,\r\n RestClientGraphQLError,\r\n ServiceName,\r\n ServiceSubUseCase,\r\n ServiceUseCase,\r\n} from \"./rest-client.types\";\r\n\r\nimport {\r\n StarfleetDeviceAuthRequestEntity,\r\n StarfleetDeviceAuthResponseEntity,\r\n StarfleetAuthErrorResponseEntity,\r\n StarfleetClientTokenResponseEntity,\r\n StarfleetTokenRequestEntity,\r\n StarfleetTokenResponseEntity\r\n} from \"../starfleet/starfleet.entities\";\r\n\r\nimport { Device } from \"../device/device\";\r\nimport { Version } from \"../version/version\";\r\nimport { DeviceKind } from \"../device/device.types\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { ToClientIdentityPlatform, ToGsBrowserName, ToNvDeviceOs, ToNvDeviceType } from \"../platform/platform-mappings\";\r\nimport { StarfleetConfigurationMetadata, StarfleetError, StarfleetProviderConfiguration, StarfleetTokenGrantType } from \"../starfleet/starfleet.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { HttpRateLimiterService } from \"../core/rate-limiter\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { AuthToken } from \"../idm/auth.types\";\r\nimport { FeedbackAttachmentParameters, FeedbackEndpointParameters } from \"../telemetry/gxt.types\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { DistributedTracing } from \"../telemetry/distributed-tracing\";\r\nimport { ParentSpan } from \"../telemetry/distributed-tracing.types\";\r\nimport { RemoteConfigClientParams } from \"../gxtarget/remote-configuration.types\";\r\nimport { CloudVariablesResult } from \"../gxtarget/cloud-variables.types\";\r\nimport { JWTPartner } from \"../idm/jwt\";\r\nimport { AlsTokenExchangeData } from \"../guestmode/guestmode.types\";\r\nimport { User } from \"../idm/user\";\r\n\r\n/** @internal */\r\nexport const OIDC_PROVIDER_METADATA_URI: string = \"/.well-known/openid-configuration\";\r\nconst UNDEFINED = \"undefined\";\r\n\r\nconst logger = Logging.getLogger(\"rest/rest-client\");\r\n\r\ntype EntityWithRequestStatus = Partial<{ requestStatus: RequestStatusEntity }>;\r\n\r\n/**\r\n * Class used to interact directly with a REST API.\r\n */\r\nexport class RestClient extends EventEmitter implements IInitializable, IHttpResponseListener {\r\n private readonly mDevice: Device;\r\n private mVersion!: Version;\r\n private mConfiguration!: Configuration;\r\n private mSettings!: Settings;\r\n private mHttpFactory: HttpClientFactory;\r\n private mRateLimiter!: HttpRateLimiterService;\r\n private mDistributedTracing: DistributedTracing;\r\n\r\n /**\r\n * Gets the underlying http factory used for\r\n * performing HTTP requests.\r\n */\r\n public get httpFactory(): HttpClientFactory {\r\n return this.mHttpFactory;\r\n }\r\n\r\n /**\r\n * Sets the underlying http factory used for\r\n * performing HTTP requests.\r\n */\r\n public set httpFactory(value: HttpClientFactory) {\r\n this.mHttpFactory = value;\r\n }\r\n\r\n /** @internal **/\r\n constructor(device: Device, distributedTracing: DistributedTracing, httpClientFactory?: HttpClientFactory) {\r\n super();\r\n this.mDevice = device;\r\n this.mHttpFactory = httpClientFactory ?? new HttpClientFactory();\r\n this.mDistributedTracing = distributedTracing;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mConfiguration = context.configuration;\r\n this.mSettings = context.settings;\r\n this.mVersion = context.sdkVersion;\r\n\r\n this.mRateLimiter = new HttpRateLimiterService(this.mConfiguration.restClient.rateLimiters ?? []);\r\n }\r\n\r\n /** @internal **/\r\n public createHttpClient(serviceInfo: ServiceInfo, settings?: IHttpSettings): IHttpClient {\r\n settings = settings ?? {};\r\n settings.headers = settings.headers ?? {};\r\n this.addCommonHeaders(settings.headers);\r\n\r\n return this.mHttpFactory.create(this.mRateLimiter, this, serviceInfo, settings);\r\n }\r\n\r\n /** @internal */\r\n public onHttpResult(request: IHttpRequest, response: Nullable, serviceInfo: ServiceInfo, stats: IHttpResponseStats, errorCode: number): void {\r\n this.emit(\"httpResult\", request, response, serviceInfo, stats, errorCode);\r\n }\r\n\r\n /** @internal **/\r\n public async getServiceInfo(parentSpan?: ParentSpan): Promise {\r\n const serviceUrl: URL = Utils.url.create(this.mConfiguration.serviceInfoUrl, \"serviceUrls\");\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Grid,\r\n useCase: ServiceUseCase.NESGetServiceUrls\r\n }, {\r\n timeout: this.mConfiguration.grid.timeout,\r\n backoffConfiguration: this.mConfiguration.grid.backoff\r\n });\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(serviceUrl.href, headers), {}, \"getServiceInfo\", parentSpan);\r\n return RestClient.TryGetEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getServerInfo(serviceUrl: string, parentSpan?: ParentSpan): Promise {\r\n if (!serviceUrl) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The serviceUrl cannot be empty.\");\r\n }\r\n\r\n const serverInfoUrl: URL = Utils.url.create(serviceUrl, this.mConfiguration.grid.version!, \"serverInfo\");\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Grid,\r\n useCase: ServiceUseCase.GridGetSpecificServerInformation\r\n }, {\r\n timeout: this.mConfiguration.grid.timeout,\r\n backoffConfiguration: this.mConfiguration.grid.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(serverInfoUrl.href, headers), {}, \"getServerInfo\", parentSpan);\r\n\r\n return RestClient.TryGetEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getActiveSessions(serviceUrl: string, token: string, parentSpan?: ParentSpan): Promise {\r\n if (!serviceUrl) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The serviceUrl cannot be empty.\");\r\n }\r\n\r\n const sessionUrl: URL = Utils.url.create(serviceUrl, this.mConfiguration.grid.version!, \"session\");\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Grid,\r\n useCase: ServiceUseCase.GridGetActiveSessions\r\n }, {\r\n timeout: this.mConfiguration.grid.timeout,\r\n backoffConfiguration: this.mConfiguration.grid.backoff\r\n });\r\n const headers: Record = RestClient.AddAuthorizationHeader({}, token);\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(sessionUrl.href, headers), { headers: headers }, \"getActiveSessions\", parentSpan);\r\n\r\n return RestClient.TryGetSessionEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getSession(serviceUrl: string, sessionId: string, parentSpan?: ParentSpan): Promise {\r\n if (!serviceUrl) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The serviceUrl cannot be empty.\");\r\n }\r\n\r\n if (!sessionId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The sessionId cannot be empty.\");\r\n }\r\n\r\n const sessionUrl: URL = Utils.url.create(serviceUrl, this.mConfiguration.grid.version!, \"session\", sessionId);\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Grid,\r\n useCase: ServiceUseCase.GridGetSession\r\n }, {\r\n timeout: this.mConfiguration.grid.timeout,\r\n backoffConfiguration: this.mConfiguration.grid.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(sessionUrl.href, headers), {}, \"getSession\", parentSpan);\r\n\r\n return RestClient.TryGetSessionEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /**\r\n * Gets a list of languages supported by GeForce NOW.\r\n *\r\n * @returns\r\n * List of language codes.\r\n *\r\n * @async\r\n */\r\n public async getSupportedLanguages(): Promise {\r\n return this.getSupportedLangaguesCore();\r\n }\r\n\r\n /** @internal **/\r\n public async getSupportedLangaguesCore(parentSpan?: ParentSpan): Promise {\r\n const languagesUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"languages\");\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetLanguages\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(languagesUrl.href, headers), {}, \"getSupportedLanguages\", parentSpan);\r\n\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Unable to get list of supported languages.\");\r\n }\r\n\r\n return response.json();\r\n }\r\n\r\n /**\r\n * Gets a list of countries.\r\n *\r\n * @param supportedOnly\r\n * True to return only countries supported by GeForce NOW; otherwise, false.\r\n *\r\n * @returns\r\n * List of country names and their two-letter country codes.\r\n *\r\n * @async\r\n */\r\n public async getCountries(supportedOnly: boolean = false): Promise {\r\n return this.getCountriesCore(supportedOnly);\r\n }\r\n\r\n /** @internal **/\r\n public async getCountriesCore(supportedOnly: boolean = false, parentSpan?: ParentSpan): Promise {\r\n const countriesUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"countries\");\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetCountries\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(countriesUrl.href, headers), {}, \"getCountries\", parentSpan);\r\n\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Unable to get list of countries.\");\r\n }\r\n\r\n const countries: CountryEntity[] = await response.json();\r\n\r\n if (supportedOnly) {\r\n return countries.filter((value: CountryEntity) => {\r\n return value.supported;\r\n });\r\n }\r\n\r\n return countries;\r\n }\r\n\r\n /** @internal */\r\n public async getClientStreamingQuality(vpcId?: string, parentSpan?: ParentSpan): Promise {\r\n const url: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"client\", \"streamingQuality\");\r\n if (vpcId && vpcId.length > 0) {\r\n url.searchParams.append(\"vpcId\", vpcId);\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetClientStreamingQuality\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(url.href, headers), {}, \"getClientStreamingQuality\", parentSpan);\r\n\r\n return response.json();\r\n }\r\n\r\n /** @internal **/\r\n public async getUserSubscription(token: string, vpcId?: string, lang?: string, parentSpan?: ParentSpan): Promise {\r\n if (!token) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'token' parameter is missing.\");\r\n }\r\n\r\n const subscriptionUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"subscriptions\");\r\n\r\n if (vpcId && vpcId.length > 0) {\r\n subscriptionUrl.searchParams.append(\"vpcId\", vpcId);\r\n }\r\n\r\n if (lang && lang.length > 0) {\r\n subscriptionUrl.searchParams.append(\"languageCode\", Utils.normalizeLanguageCode(lang));\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetSubscriptions\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const headers: Record = RestClient.AddAuthorizationHeader({}, token);\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(subscriptionUrl.href, headers), { headers: headers }, \"getUserSubscription\", parentSpan);\r\n\r\n return RestClient.TryGetEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getUserProducts(token: string, vpcId?: string, lang?: string, parentSpan?: ParentSpan): Promise {\r\n if (!token) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'token' parameter is missing.\");\r\n }\r\n\r\n const productsUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v4\", \"products\");\r\n\r\n if (vpcId && vpcId.length > 0) {\r\n productsUrl.searchParams.append(\"vpcId\", vpcId);\r\n }\r\n\r\n if (lang && lang.length > 0) {\r\n productsUrl.searchParams.append(\"languageCode\", Utils.normalizeLanguageCode(lang));\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetProducts\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const headers: Record = RestClient.AddAuthorizationHeader({}, token);\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(productsUrl.href, headers), { headers: headers }, \"getUserProducts\", parentSpan);\r\n\r\n return RestClient.TryGetEntityFromRequestStatusResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getLocalizedProduct(productUrl: string, parentSpan?: ParentSpan): Promise {\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESGetProduct\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n // clear the common headers, the product url doesn't accept the custom headers\r\n // and since the url is just a static json file there is no need for the headers\r\n http.settings.headers = {};\r\n\r\n // TODO: Check if these endpoints are supposed to support tracing. For now, they give a CORS error\r\n const response: IHttpResponse = await http.get(productUrl);\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"The localized product does not exist.\");\r\n }\r\n\r\n return response.object();\r\n }\r\n\r\n /** @internal **/\r\n public async addAppToLibrary(token: string, appId: number, vpcId?: string, parentSpan?: ParentSpan): Promise {\r\n if (!token) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'token' parameter is missing.\");\r\n }\r\n\r\n if (!appId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'appId' parameter is missing.\");\r\n }\r\n\r\n const appsUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"cloudmatch\", \"apps\", appId.toString());\r\n\r\n if (vpcId && vpcId.length > 0) {\r\n appsUrl.searchParams.append(\"vpcId\", vpcId);\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESAddToLibrary\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const headers: Record = RestClient.AddAuthorizationHeader({}, token);\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.put(appsUrl.href, null, headers), { headers: headers }, \"addAppToLibrary\", parentSpan);\r\n\r\n if (!response.ok) {\r\n // TODO: update error code/handling when api is fixed, at the moment it will always return a 200,\r\n // even if the appId does not exist or vpcId.\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Could not add to users library.\");\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public async removeAppFromLibrary(token: string, appId: number, vpcId?: string, parentSpan?: ParentSpan): Promise {\r\n if (!token) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'token' parameter is missing.\");\r\n }\r\n\r\n if (!appId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'appId' parameter is missing.\");\r\n }\r\n\r\n const appsUrl: URL = Utils.url.create(this.mConfiguration.entitlement.serverUrl, \"v3\", \"cloudmatch\", \"apps\", appId.toString());\r\n\r\n if (vpcId && vpcId.length > 0) {\r\n appsUrl.searchParams.append(\"vpcId\", vpcId);\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.NES,\r\n useCase: ServiceUseCase.NESRemoveFromLibrary\r\n }, {\r\n timeout: this.mConfiguration.entitlement.timeout,\r\n backoffConfiguration: this.mConfiguration.entitlement.backoff\r\n });\r\n const headers: Record = RestClient.AddAuthorizationHeader({}, token);\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.delete(appsUrl.href, headers), { headers: headers }, \"removeAppFromLibrary\", parentSpan);\r\n\r\n if (!response.ok) {\r\n // TODO: update error code/handling when api is fixed, at the moment it will always return a 200,\r\n // even if the appId does not exist or vpcId.\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Could not remove from users library.\");\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public async executeGraphQL(gqlHostName: string, token: string, query: string, useCase: ServiceUseCase, variables?: Record, parentSpan?: ParentSpan): Promise {\r\n if (!gqlHostName) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'gqlHostName' parameter is missing.\");\r\n }\r\n\r\n if (!query) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'query' parameter is missing.\");\r\n }\r\n\r\n if (!this.mSettings.catalogClientId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The Catalog Client ID is missing.\");\r\n }\r\n\r\n const headers: Record = RestClient.AddAuthorizationHeader({\r\n \"nv-client-id\": this.mSettings.catalogClientId,\r\n }, token);\r\n\r\n const gqlPayload: GraphQLPayload = {\r\n query: query,\r\n variables: variables ?? null,\r\n operationName: null\r\n };\r\n\r\n const url: URL = Utils.url.create(gqlHostName, \"graphql\");\r\n url.searchParams.append(\"query\", query)\r\n if (variables) {\r\n url.searchParams.append(\"variables\", JSON.stringify(variables));\r\n }\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Lcars,\r\n useCase: useCase\r\n }, {\r\n timeout: this.mConfiguration.catalog.timeout,\r\n backoffConfiguration: this.mConfiguration.catalog.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(url.href, headers), { headers: headers }, `executeGraphQL:${useCase}`, parentSpan);\r\n\r\n if (!response.ok) {\r\n if (response.hasBody) {\r\n const errorObj: GraphQLErrorResponse = await response.object();\r\n throw new RestClientGraphQLError(APIErrorCode.Http, response.url, response.status, errorObj);\r\n }\r\n\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Error while exeucting GraphQL query.\");\r\n }\r\n return (await response.object()).data;\r\n }\r\n\r\n /** @internal **/\r\n public async loadStarfleetProviderConfiguration(parentSpan?: ParentSpan): Promise {\r\n const configUrl: URL = Utils.url.create(this.mConfiguration.starfleet.serverUrl, OIDC_PROVIDER_METADATA_URI);\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Starfleet,\r\n useCase: ServiceUseCase.StarfleetLoadProviderConfig\r\n }, {\r\n timeout: this.mConfiguration.starfleet.timeout,\r\n backoffConfiguration: this.mConfiguration.starfleet.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(configUrl.href, headers), {}, \"loadStarfleetProviderConfiguration\", parentSpan);\r\n\r\n const configObj: StarfleetConfigurationMetadata = await response.json();\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Could not query provider configuration\");\r\n }\r\n\r\n return {\r\n authorizationUrl: configObj.authorization_endpoint,\r\n clientTokenUrl: Utils.url.create(this.mConfiguration.starfleet.serverUrl, \"client_token\").toString(),\r\n deviceAuthorizationUrl: Utils.url.create(this.mConfiguration.starfleet.serverUrl, \"device\", \"authorize\").toString(),\r\n tokenUrl: configObj.token_endpoint,\r\n userInfoUrl: configObj.userinfo_endpoint\r\n };\r\n }\r\n\r\n /** @internal **/\r\n public async startDeviceAuthorization(provider: StarfleetProviderConfiguration, requestEntity: StarfleetDeviceAuthRequestEntity, extraParams?: Record, parentSpan?: ParentSpan): Promise {\r\n const body: string = this.getDeviceAuthRequestBody(requestEntity, extraParams);\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Starfleet,\r\n useCase: ServiceUseCase.StarfleetStartDeviceAuthorization\r\n }, {\r\n timeout: this.mConfiguration.starfleet.timeout,\r\n backoffConfiguration: this.mConfiguration.starfleet.backoff\r\n });\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(provider.deviceAuthorizationUrl, body, {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n ...headers\r\n }), { params: extraParams }, \"authorizeDevice\", parentSpan);\r\n\r\n return RestClient.TryGetStarfleetEntityFromResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getToken(provider: StarfleetProviderConfiguration, requestEntity: StarfleetTokenRequestEntity, parentSpan?: ParentSpan): Promise {\r\n const body: string = this.getTokenRequestBody(requestEntity);\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Starfleet,\r\n useCase: ServiceUseCase.StarfleetGetAccessToken\r\n }, {\r\n timeout: this.mConfiguration.starfleet.timeout,\r\n backoffConfiguration: this.mConfiguration.starfleet.backoff\r\n });\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(provider.tokenUrl, body, {\r\n \"Content-Type\": \"application/x-www-form-urlencoded\",\r\n ...headers\r\n }), {}, \"getToken\", parentSpan);\r\n\r\n return RestClient.TryGetStarfleetEntityFromResponse(response);\r\n }\r\n\r\n /** @internal **/\r\n public async getClientToken(provider: StarfleetProviderConfiguration, accessToken: string, parentSpan?: ParentSpan): Promise {\r\n if (!accessToken) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'accessToken' parameter is missing.\");\r\n }\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Starfleet,\r\n useCase: ServiceUseCase.StarfleetGetClientToken\r\n }, {\r\n timeout: this.mConfiguration.starfleet.timeout,\r\n backoffConfiguration: this.mConfiguration.starfleet.backoff\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(provider.clientTokenUrl, {\r\n \"Authorization\": `Bearer ${accessToken}`,\r\n ...headers\r\n }), {}, \"getClientToken\", parentSpan);\r\n\r\n return RestClient.TryGetStarfleetEntityFromResponse(response);\r\n }\r\n\r\n /** @internal */\r\n public async getTranslationData(languageCode: string, parentSpan?: ParentSpan): Promise {\r\n const normalizedLanguageCode: string = Utils.normalizeLanguageCode(languageCode);\r\n if (normalizedLanguageCode.length !== 5) {\r\n throw new APIError(APIErrorCode.InvalidParameter, `Unexpected format for language code '${normalizedLanguageCode}'.`);\r\n }\r\n\r\n const url: string = `${Utils.getScriptOriginRootPath()}/i18n/${normalizedLanguageCode}.json`;\r\n const overridesUrl: string = `${this.mSettings.stringOverridesUrl}/${normalizedLanguageCode}.json`;\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.I18N,\r\n useCase: ServiceUseCase.FetchLocaleJson\r\n });\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(url, headers), {}, \"getTranslationData\", parentSpan);\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.CannotLoadTranslationData, url, response.status);\r\n }\r\n const defaultTranslations = response.json();\r\n try {\r\n if (this.mSettings.stringOverridesUrl.length > 0) {\r\n const overridesResponse: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.get(overridesUrl, headers), {}, \"getTranslationData\", parentSpan);\r\n if (overridesResponse.ok) {\r\n return Utils.object.deepmerge(await response.json(), await overridesResponse.json());\r\n } else {\r\n logger.warn(`Failure response '${overridesResponse.statusText}' on fetching ${normalizedLanguageCode} overrides from ${overridesUrl}`);\r\n }\r\n }\r\n } catch(e) {\r\n logger.warn(`Failed to load ${normalizedLanguageCode} overrides from ${overridesUrl}`);\r\n logger.error(e);\r\n }\r\n return defaultTranslations;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public async getRemoteConfig(clientParams: RemoteConfigClientParams, parentSpan?: ParentSpan): Promise {\r\n const remoteConfigUrl: URL = Utils.url.create(\r\n this.mConfiguration.gxTarget.remoteConfig.serverUrl,\r\n this.mConfiguration.gxTarget.remoteConfig.version!\r\n );\r\n\r\n remoteConfigUrl.searchParams.append(\"project\", this.mConfiguration.gxTarget.project);\r\n remoteConfigUrl.searchParams.append(\"product\", this.mConfiguration.gxTarget.product);\r\n remoteConfigUrl.searchParams.append(\"clientParams\", JSON.stringify(clientParams));\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.GxTarget,\r\n useCase: ServiceUseCase.GetRemoteConfig,\r\n }, {\r\n timeout: this.mConfiguration.gxTarget.remoteConfig.timeout,\r\n backoffConfiguration: this.mConfiguration.gxTarget.remoteConfig.backoff\r\n });\r\n\r\n const headers: Record = {\r\n \"nv-client-variant\": \"undefined\",\r\n \"nv-gxt-device-id\": this.mDevice.id,\r\n }\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan(\r\n (headers) => http.get(remoteConfigUrl.href, headers),\r\n { headers: headers },\r\n ServiceUseCase.GetRemoteConfig, parentSpan\r\n );\r\n\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.RestErrorGetRemoteConfigError, remoteConfigUrl.href, response.status);\r\n }\r\n\r\n const json = await response.json();\r\n if (!json.params) {\r\n throw new RestClientError(APIErrorCode.RestErrorGetRemoteConfigError, remoteConfigUrl.href, response.status, \"Could not parse remote config response\");\r\n\r\n }\r\n\r\n return json.params;\r\n }\r\n\r\n /** @internal */\r\n public async getCloudVariables(variables: string[], user: Nullable, clientParams: any, parentSpan?: ParentSpan): Promise {\r\n const url: URL = Utils.url.create(\r\n this.mConfiguration.gxTarget.cloudVariables.serverUrl,\r\n this.mConfiguration.gxTarget.cloudVariables.version!\r\n );\r\n\r\n url.searchParams.append(\"cvName\", variables.join(\",\"));\r\n\r\n if (user?.isGuest) {\r\n url.searchParams.append(\"userId\", UNDEFINED);\r\n url.searchParams.append(\"idpId\", UNDEFINED);\r\n } else {\r\n url.searchParams.append(\"userId\", user?.id ?? UNDEFINED);\r\n url.searchParams.append(\"idpId\", user?.idpId ?? UNDEFINED);\r\n }\r\n\r\n url.searchParams.append(\"deviceId\", this.mDevice.id);\r\n url.searchParams.append(\"clientId\", this.mConfiguration.gxTarget.clientId);\r\n url.searchParams.append(\"clientVer\", this.mVersion.version);\r\n url.searchParams.append(\"clientVariant\", UNDEFINED);\r\n url.searchParams.append(\"deviceOS\", ToNvDeviceOs(this.mDevice.os, this.mDevice.platformId));\r\n url.searchParams.append(\"deviceType\", ToNvDeviceType(this.mDevice.kind));\r\n url.searchParams.append(\"deviceMake\", this.mDevice.manufacturer || UNDEFINED);\r\n url.searchParams.append(\"deviceModel\", this.mDevice.model || UNDEFINED);\r\n url.searchParams.append(\"deviceOSVersion\", this.mDevice.version);\r\n url.searchParams.append(\"clientType\", \"GFNSDK\");\r\n url.searchParams.append(\"browserType\", ToGsBrowserName(this.mDevice.browserId));\r\n url.searchParams.append(\"clientParams\", JSON.stringify(clientParams));\r\n\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.GxTarget,\r\n useCase: ServiceUseCase.GetCloudVariable,\r\n }, {\r\n timeout: this.mConfiguration.gxTarget.cloudVariables.timeout,\r\n backoffConfiguration: this.mConfiguration.gxTarget.cloudVariables.backoff\r\n });\r\n\r\n const headers: Record = {}\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) =>\r\n http.get(url.href, headers),\r\n { headers: headers },\r\n ServiceUseCase.GetRemoteConfig, parentSpan\r\n );\r\n\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, url.href, response.status, \"Could not query cloud variables\");\r\n }\r\n\r\n const ret = await response.json();\r\n\r\n if (!ret.cloudVariables) {\r\n throw new RestClientError(ret.code, url.href, response.status, \"Unable to parse cloud variable response\");\r\n }\r\n\r\n return ret.cloudVariables;\r\n }\r\n\r\n /** @internal */\r\n public async sendFeedbackHeadRequest(parameters: FeedbackEndpointParameters, parentSpan?: ParentSpan): Promise {\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Gfc,\r\n useCase: ServiceUseCase.GfcHeadRequest,\r\n });\r\n\r\n const serviceUrl: URL = Utils.url.create(this.mConfiguration.feedback.serverUrl, \"gfc\", this.mConfiguration.feedback.version!, \"head\");\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(serviceUrl.href,\r\n JSON.stringify(parameters),\r\n {\r\n \"Content-Type\": \"application/json\",\r\n ...headers\r\n }\r\n ), {}, \"sendFeedbackHeadRequest\", parentSpan);\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 413: throw new RestClientError(APIErrorCode.TelemetryFeedbackJSONTooBig, response.url, response.status, \"Feedback JSON is too big\");\r\n case 460: throw new RestClientError(APIErrorCode.TelemetryFeedbackInvalid, response.url, response.status, \"Feedback is invalid\");\r\n case 461: throw new RestClientError(APIErrorCode.TelemetryFeedbackIdInUse, response.url, response.status, \"Feedback ID is already in use\");\r\n case 462: throw new RestClientError(APIErrorCode.TelemetryFeedbackIdInvalid, response.url, response.status, \"Feedback with the given Id is completed or expired\");\r\n case 466: throw new RestClientError(APIErrorCode.TelemetryFeedbackAttachmentRejected, response.url, response.status, \"Attachments are rejected\");\r\n case 467: throw new RestClientError(APIErrorCode.TelemetryFeedbackUnknownClientId, response.url, response.status, \"Unknown Client ID\");\r\n case 500: throw new RestClientError(APIErrorCode.TelemetryFeedbackServerError, response.url, response.status, \"Server Error\");\r\n default:\r\n break;\r\n }\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Could not send feedback HEAD request\");\r\n }\r\n }\r\n\r\n /** @internal */\r\n public async sendFeedbackAttachment(parameters: FeedbackAttachmentParameters, parentSpan?: ParentSpan): Promise {\r\n const http: IHttpClient = this.createHttpClient({\r\n name: ServiceName.Gfc,\r\n useCase: ServiceUseCase.GfcAttachmentRequest,\r\n });\r\n\r\n const serviceUrl: URL = Utils.url.create(this.mConfiguration.feedback.serverUrl, \"gfc\", this.mConfiguration.feedback.version!, \"attachment\");\r\n\r\n // Content-Type: multipart/form-data\r\n const data = new FormData();\r\n data.append(\"data2\", parameters.blob);\r\n data.append(\"feedbackId\", parameters.feedbackId);\r\n data.append(\"size\", parameters.blob.size.toString());\r\n data.append(\"checksum\", parameters.checksum);\r\n data.append(\"parameters\", parameters.parameters);\r\n data.append(\"offset\", parameters.offset.toString());\r\n if (parameters.eob) {\r\n data.append(\"eob\", \"true\");\r\n }\r\n\r\n const response: IHttpResponse = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(serviceUrl.href, data, headers), { params: {\"feedbackId\": parameters.feedbackId} }, \"sendFeedbackAttachment\", parentSpan);\r\n\r\n if (!response.ok) {\r\n switch (response.status) {\r\n case 400: throw new RestClientError(APIErrorCode.TelemetryFeedbackBadRequest, response.url, response.status, \"Bad Request\");\r\n case 462: throw new RestClientError(APIErrorCode.TelemetryFeedbackIdInvalid, response.url, response.status, \"Invalid feedback ID\");\r\n case 463: throw new RestClientGfcChunkError(APIErrorCode.TelemetryFeedbackNonSequentialFrame, response.url, response.status, response.headers[\"x-data-offset\"] ?? 0, \"Non-sequential frame (ie wrong offset).\");\r\n case 464: throw new RestClientError(APIErrorCode.TelemetryFeedbackWrongContent, response.url, response.status, \"Wrong Content.\");\r\n case 500: throw new RestClientError(APIErrorCode.TelemetryFeedbackServerError, response.url, response.status, \"Server Error\");\r\n default:\r\n break;\r\n }\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Could not send feedback attachment request\");\r\n }\r\n }\r\n\r\n private addCommonHeaders(headers: Record): void {\r\n // TODO: remove DeviceKind.Desktop fallback when browser support has been officially implemented\r\n // for now, we default to Desktop since we have very basic device detection support and an\r\n // empty nv-device-type header will fail LCARS calls.\r\n const deviceKind: DeviceKind = this.mDevice.kind === DeviceKind.Other ? DeviceKind.Desktop : this.mDevice.kind;\r\n const deviceType: string = DeviceKind[deviceKind].toUpperCase();\r\n\r\n headers[\"nv-device-os\"] = this.mDevice.os.toUpperCase();\r\n headers[\"nv-device-type\"] = deviceType;\r\n headers[\"nv-device-make\"] = this.mDevice.manufacturer;\r\n headers[\"nv-device-model\"] = this.mDevice.model;\r\n headers[\"nv-client-type\"] = \"GFNSDK\";\r\n headers[\"nv-browser-type\"] = this.mDevice.browserId.toUpperCase();\r\n headers[\"nv-client-version\"] = this.mVersion.version;\r\n headers[\"nv-client-streamer\"] = this.mDevice.isBrowser ? \"WEBRTC\" : \"NVIDIA-CLASSIC\";\r\n headers[\"nv-client-sdk.client-id\"] = this.mSettings.clientId;\r\n headers[\"nv-client-sdk.version\"] = `${this.mVersion.version}/${this.mVersion.tag}`;\r\n\r\n if (this.mVersion.runtimeVersion) {\r\n headers[\"nv-client-sdk.runtime-version\"] = `${this.mVersion.runtimeVersion}/${this.mVersion.runtimeTag}`;\r\n }\r\n\r\n headers[\"x-nv-client-identity\"] = this.buildClientIdentityString();\r\n }\r\n\r\n private buildClientIdentityString(): string {\r\n const platformName: string = ToClientIdentityPlatform(this.mDevice.platformId);\r\n const platformStr: string = `${platformName} ${this.mDevice.version}`.trim();\r\n\r\n // since we are not using a PM library for session allocation we just duplicate the `GFN-CLIENT-SDK/` bit for both\r\n // the PRODUCT and PM fields. If we do use a native PM (e.g. BitfrostClientSDK) then the PM name and version will need to be\r\n // exposed in the JS Runtime API so we can get access to it from here.\r\n //\r\n // https://confluence.nvidia.com/display/GENPCGRP/Client+identification+headers\r\n return `GFN-CLIENT-SDK/${this.mVersion.version} (${platformStr}) GFN-CLIENT-SDK/${this.mVersion.version} (${this.mVersion.tag})`;\r\n }\r\n\r\n private getTokenRequestBody(requestEntity: StarfleetTokenRequestEntity): string {\r\n let result: string = `grant_type=${requestEntity.grant_type}&`;\r\n\r\n // the authorization code flow does not require client_id parameter\r\n if (requestEntity.grant_type !== StarfleetTokenGrantType.AuthorizationCode) {\r\n result += `client_id=${requestEntity.client_id}&`;\r\n }\r\n\r\n switch (requestEntity.grant_type) {\r\n case StarfleetTokenGrantType.ClientToken:\r\n if (!requestEntity.client_token) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the client token field.\");\r\n }\r\n\r\n if (!requestEntity.sub) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the sub field.\");\r\n }\r\n\r\n result += `client_token=${requestEntity.client_token}&sub=${requestEntity.sub}`;\r\n break;\r\n case StarfleetTokenGrantType.DeviceCode:\r\n if (!requestEntity.device_code) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the device code field.\");\r\n }\r\n\r\n result += `device_code=${requestEntity.device_code}`;\r\n break;\r\n case StarfleetTokenGrantType.AuthorizationCode:\r\n if (!requestEntity.code) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the code field.\");\r\n }\r\n\r\n if (!requestEntity.codeVerifier) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the code verifier field.\");\r\n }\r\n\r\n if (!requestEntity.redirectUri) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Missing the redirect uri field.\");\r\n }\r\n\r\n result += `code=${requestEntity.code}&code_verifier=${requestEntity.codeVerifier}&redirect_uri=${requestEntity.redirectUri}`;\r\n break;\r\n case StarfleetTokenGrantType.RefreshToken:\r\n default:\r\n throw new APIError(APIErrorCode.NotSupported, \"Unsupported grant type.\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private getDeviceAuthRequestBody(requestEntity: StarfleetDeviceAuthRequestEntity, extraParams?: Record): string {\r\n const scopes: string = [\"\"].concat(requestEntity.scopes).join(\" \");\r\n\r\n let result: string = `client_id=${this.mSettings.clientId}`;\r\n result += `&device_id=${this.mDevice.id}`;\r\n result += `&scope=openid${scopes}`;\r\n\r\n if (requestEntity.state) {\r\n result += `&state=${requestEntity.state}`;\r\n }\r\n\r\n if (requestEntity.nonce) {\r\n result += `&nonce=${requestEntity.nonce}`;\r\n }\r\n\r\n if (requestEntity.prompt && requestEntity.prompt.length > 0) {\r\n result += `&prompt=${requestEntity.prompt.join(\" \")}`;\r\n }\r\n\r\n if (requestEntity.max_age) {\r\n result += `&max_age=${requestEntity.max_age}`;\r\n }\r\n\r\n if (requestEntity.id_token_hint) {\r\n result += `&id_token_hint=${requestEntity.id_token_hint}`;\r\n }\r\n\r\n if (requestEntity.login_hint) {\r\n result += `&login_hint=${requestEntity.login_hint}`;\r\n }\r\n\r\n if (requestEntity.display_name) {\r\n result += `&display_name=${requestEntity.display_name}`;\r\n }\r\n\r\n if (requestEntity.idp_id) {\r\n result += `&idp_id=${requestEntity.idp_id}`;\r\n }\r\n\r\n if (extraParams) {\r\n for (const p in extraParams) {\r\n result += `&${p}=${extraParams[p]}`;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private static AddAuthorizationHeader(headers: Record, token?: string): Record {\r\n if (token) {\r\n return RestClient.AddHeader(headers, \"Authorization\", `GFNJWT ${token}`);\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private static AddHeader(headers: Record, key: string, value?: string): Record {\r\n if (value) {\r\n headers[key] = value;\r\n }\r\n\r\n return headers;\r\n }\r\n\r\n private static async TryGetEntityFromRequestStatusResponse(response: IHttpResponse): Promise {\r\n if (response.hasBody) {\r\n const entity: TEntity = await response.object();\r\n\r\n if (response.ok) {\r\n return entity;\r\n }\r\n\r\n if (entity.requestStatus) {\r\n throw new HttpRequestStatusError(response.url, entity.requestStatus, response.status);\r\n }\r\n }\r\n\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status);\r\n }\r\n\r\n private static async TryGetSessionEntityFromRequestStatusResponse(response: IHttpResponse): Promise {\r\n if (response.hasBody) {\r\n const entity: TEntity = await response.object();\r\n\r\n if (response.ok) {\r\n return entity;\r\n }\r\n\r\n if (entity.requestStatus) {\r\n throw new SessionRequestStatusError(response.url, entity, response.status);\r\n }\r\n }\r\n\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status);\r\n }\r\n\r\n private static async TryGetStarfleetEntityFromResponse(response: IHttpResponse): Promise {\r\n if (response.hasBody) {\r\n if (response.ok) {\r\n return response.object();\r\n }\r\n\r\n const errorObj: StarfleetAuthErrorResponseEntity = await response.object();\r\n throw new StarfleetError(APIErrorCode.Http, response.url, errorObj.error, errorObj.error_description);\r\n }\r\n\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status);\r\n }\r\n\r\n /** @internal */\r\n public async getAuthConfigFromNonce(partnerId: string, nonce: string, cmsId: number, parentSpan?: ParentSpan): Promise {\r\n const url: URL = Utils.url.create(this.mConfiguration.accountLinking.serverUrl, this.mConfiguration.accountLinking.version!, \"token\");\r\n const http = this.createHttpClient({\r\n name: ServiceName.ALS,\r\n useCase: ServiceUseCase.AlsTokenExchange,\r\n }, {\r\n timeout: this.mConfiguration.accountLinking.timeout,\r\n backoffConfiguration: this.mConfiguration.accountLinking.backoff\r\n });\r\n\r\n const body = {\r\n partnerId: partnerId,\r\n cmsId: cmsId,\r\n nonce: nonce,\r\n deviceId: this.mDevice.id,\r\n };\r\n\r\n const response = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(url.href,\r\n JSON.stringify(body), {\r\n \"Content-Type\": \"application/json\",\r\n ...headers\r\n }), {}, \"getAuthConfigFromNonce\", parentSpan);\r\n\r\n const ret = await response.json();\r\n if (!response.ok) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Failed to get token from nonce\");\r\n }\r\n\r\n if (!ret.token) {\r\n throw new RestClientError(APIErrorCode.Http, response.url, response.status, \"Invalid response\");\r\n }\r\n\r\n return {\r\n token: new JWTPartner(ret.token),\r\n partnerSecureData: ret.partnerSecureData\r\n };\r\n }\r\n\r\n /** @internal **/\r\n public async requestUserTelemetry(userEmail: string, locale: string, idToken: Nullable, parentSpan?: ParentSpan): Promise {\r\n if (!idToken) {\r\n throw new APIError(APIErrorCode.AuthError, \"User is not logged in! Unable to request user telemetry\");\r\n }\r\n const serviceUrl: URL = Utils.url.create(this.mConfiguration.voltron.serverUrl, this.mConfiguration.voltron.version!, \"gdpr\", \"partners\", \"get\", \"request\");\r\n const http = this.createHttpClient({\r\n name: ServiceName.Voltron,\r\n useCase: ServiceUseCase.UserDataGet\r\n }, {\r\n timeout: this.mConfiguration.voltron.timeout,\r\n backoffConfiguration: this.mConfiguration.voltron.backoff\r\n });\r\n const response = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(serviceUrl.href, `{\"email\": \"${userEmail}\", \"locale\": \"${locale}\"}`, { \"idtoken\": `${idToken?.value}`, \"Content-Type\": \"application/json\", ...headers}), {}, \"requestUserTelemetry\", parentSpan);\r\n const ret = await response.json();\r\n if (!response.ok) {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, `Failed to request user's telemetry! Message: ${ret?.message}`);\r\n }\r\n\r\n logger.info(`Telemetry get request returned status: ${ret.status}`);\r\n if (ret.status === \"OTHER_PENDING\") {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, \"Unable to process user data request, only one request may be made every 2 weeks\");\r\n }\r\n if (ret.status !== \"REQUEST_QUEUED\") {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, `Error processing user data request: ${ret?.message}`);\r\n }\r\n logger.info(`Telemetry get request id: ${ret.requestId}`);\r\n\r\n return ret.requestId;\r\n }\r\n\r\n /** @internal **/\r\n public async deleteUserTelemetry(userEmail: string, locale: string, idToken: Nullable, parentSpan?: ParentSpan) {\r\n if (!idToken) {\r\n throw new APIError(APIErrorCode.AuthError, \"User is not logged in! Unable to delete user telemetry\");\r\n }\r\n\r\n const serviceUrl: URL = Utils.url.create(this.mConfiguration.voltron.serverUrl, this.mConfiguration.voltron.version!, \"gdpr\", \"partners\", \"delete\", \"request\");\r\n const http = this.createHttpClient({\r\n name: ServiceName.Voltron,\r\n useCase: ServiceUseCase.UserDataDelete\r\n }, {\r\n timeout: this.mConfiguration.voltron.timeout,\r\n backoffConfiguration: this.mConfiguration.voltron.backoff\r\n });\r\n const response = await this.mDistributedTracing.handleHttpEndpointSpan((headers) => http.post(serviceUrl.href, `{\"email\": \"${userEmail}\", \"locale\": \"${locale}\"}`, { \"idtoken\": `${idToken?.value}`, \"Content-Type\": \"application/json\", ...headers}), {}, \"deleteUserTelemetry\", parentSpan);\r\n const ret = await response.json();\r\n if (!response.ok) {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, `Failed to delete user's telemetry! Message: ${ret?.message}`);\r\n }\r\n\r\n logger.info(`Telemetry delete request returned status: ${ret.status}`);\r\n if (ret.status === \"OTHER_PENDING\") {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, \"Unable to process user data request, likely due to multiple requests in a short time\");\r\n }\r\n if (ret.status !== \"REQUEST_QUEUED\") {\r\n throw new RestClientError(ret.code, serviceUrl.href, response.status, `Error processing user data request: Message: ${ret.message}`);\r\n }\r\n logger.info(`Telemetry delete request id: ${ret.requestId}`);\r\n\r\n return ret.requestId;\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { IStorage } from \"./storage.types\";\r\n\r\ninterface KVP {\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Reads and writes key/value pairs using the Web Storage API's localStorage.\r\n */\r\nexport class LocalStorage implements IStorage, IterableIterator {\r\n private mIteratorPosition = 0;\r\n\r\n /**\r\n * Returns true if local storage is available to use; otherwise, false.\r\n */\r\n public readonly available: boolean;\r\n\r\n /**\r\n * The default iterator.\r\n *\r\n * @returns\r\n * an iterator of key/value pairs.\r\n */\r\n [Symbol.iterator](): IterableIterator {\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the number of keys available in local storage.\r\n */\r\n public get size(): number {\r\n if (!this.available) {\r\n return 0;\r\n }\r\n\r\n return window.localStorage.length;\r\n }\r\n\r\n /**\r\n * Gets an iterator that can be used to get all\r\n * the keys in local storage.\r\n */\r\n private* internalkeys(): IterableIterator {\r\n this.throwWhenStorageNotAvailable();\r\n\r\n for (let i: number = 0, len: number = window.localStorage.length; i < len; ++i) {\r\n const k: string | null = window.localStorage.key(i);\r\n\r\n if (k !== null) {\r\n yield k;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Asyncronously gets an iterator that can be used to get all the keys in local storage\r\n */\r\n public async keys(): Promise> {\r\n this.throwWhenStorageNotAvailable();\r\n\r\n return new Promise((resolve, reject) => resolve(this.internalkeys()));\r\n }\r\n\r\n /** @internal **/\r\n constructor() {\r\n // if the storage isn't available when this is created then it won't become\r\n // available at runtime (e.g. disabled via webview setting), so we can just\r\n // store the result of whether we have storage or not\r\n this.available = (\"localStorage\" in window && !!window.localStorage);\r\n }\r\n\r\n /**\r\n * Iterates the key/value pairs in local storage.\r\n *\r\n * @returns\r\n * The next item, or null if the end has been reached.\r\n */\r\n public next(): IteratorResult {\r\n if (this.mIteratorPosition < this.size) {\r\n const k: string = window.localStorage.key(this.mIteratorPosition++);\r\n const v: any = window.localStorage.getItem(k);\r\n const kvp: KVP = {};\r\n kvp[k] = v;\r\n\r\n return {\r\n done: false,\r\n value: kvp\r\n };\r\n }\r\n\r\n return {\r\n done: true,\r\n value: null\r\n }\r\n }\r\n\r\n /**\r\n * Gets a value from local storage with the specified key.\r\n *\r\n * @param key\r\n * The key\r\n *\r\n * @returns\r\n * The value for the specified key; or null if the key does not exist.\r\n */\r\n public async get(key: string): Promise {\r\n this.throwWhenStorageNotAvailable();\r\n return window.localStorage.getItem(key);\r\n }\r\n\r\n /**\r\n * Sets a value for the specified key in local storage.\r\n *\r\n * @param key\r\n * The key used to identify the value.\r\n *\r\n * @param value\r\n * The value to associate with the key.\r\n */\r\n public async set(key: string, value: any): Promise {\r\n this.throwWhenStorageNotAvailable();\r\n window.localStorage.setItem(key, value);\r\n }\r\n\r\n /**\r\n * Removes the key/value from local storage.\r\n *\r\n * @param key\r\n * The key to remove.\r\n */\r\n public async remove(key: string): Promise {\r\n this.throwWhenStorageNotAvailable();\r\n window.localStorage.removeItem(key);\r\n }\r\n\r\n /**\r\n * Clears all entries from local storage.\r\n */\r\n public async clear(): Promise {\r\n this.throwWhenStorageNotAvailable();\r\n window.localStorage.clear();\r\n }\r\n\r\n private throwWhenStorageNotAvailable(): void {\r\n if (!this.available) {\r\n throw new APIError(APIErrorCode.StorageUnavailable, \"The localStorage API is not available.\");\r\n }\r\n }\r\n}","/* Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { LocalStorage } from \"./local-storage\";\r\nimport { IStorage } from \"./storage.types\";\r\n\r\n/**\r\n * Factory class used to create an {@link IStorage} instance that\r\n * will be used for default storage operations.\r\n *\r\n * The default storage is an {@link LocalStorage}.\r\n */\r\nexport class StorageFactory {\r\n\r\n /**\r\n * Override to create an instance of an {@link IStorage}.\r\n *\r\n * @returns An instance of an {@link IStorage} that will handle\r\n * storage operations.\r\n */\r\n public create(): IStorage {\r\n return new LocalStorage();\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { IStorage } from \"./storage.types\";\r\n\r\nconst logger = Logging.getLogger(\"storage/idb-storage\");\r\nconst READ = \"readonly\";\r\nconst WRITE = \"readwrite\";\r\n\r\n/** @internal **/\r\nexport class IDBStorage implements IStorage {\r\n private mDbVersion: number = 1;\r\n private mDbConnection: Nullable;\r\n\r\n public readonly name: string;\r\n public readonly storeName: string;\r\n public readonly available: boolean;\r\n\r\n public get version(): number {\r\n return this.mDbVersion;\r\n }\r\n\r\n public get size(): number {\r\n throw new APIError(APIErrorCode.NotSupported);\r\n }\r\n\r\n constructor(dbName: string, dbStoreName: string, version?: number) {\r\n IDBStorage.EnsureIndexedDB();\r\n\r\n this.name = dbName;\r\n this.storeName = dbStoreName;\r\n this.available = !!window.indexedDB;\r\n this.mDbConnection = null;\r\n\r\n if (version) {\r\n this.mDbVersion = version;\r\n }\r\n }\r\n\r\n public async init(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const dbOpenRequest = window.indexedDB.open(this.name, this.mDbVersion);\r\n dbOpenRequest.onsuccess = (event: Event) => {\r\n this.mDbConnection = dbOpenRequest.result;\r\n resolve();\r\n };\r\n dbOpenRequest.onerror = (event: Event) => {\r\n const msg = `Failed to open indexedDB: ${dbOpenRequest.error}`;\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n };\r\n dbOpenRequest.onupgradeneeded = (event: IDBVersionChangeEvent) => {\r\n this.mDbConnection = dbOpenRequest.result;\r\n\r\n this.mDbConnection.onerror = (event) => {\r\n const msg = `Error loading database ${this.name}.`\r\n logger.warn(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n };\r\n\r\n const objStoreCreateReq = this.mDbConnection.createObjectStore(this.storeName);\r\n objStoreCreateReq.transaction.oncomplete = () => {\r\n logger.verbose(`Object store \"${this.storeName}\" created.`);\r\n }\r\n\r\n objStoreCreateReq.transaction.onerror = () => {\r\n const msg = `Unable to create object store \"${this.storeName}\" due to \"${objStoreCreateReq.transaction.error}\".`\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n }\r\n }\r\n });\r\n }\r\n\r\n public async keys(): Promise> {\r\n this.throwOnUnInit();\r\n const transaction = this.mDbConnection!.transaction(this.storeName, READ);\r\n transaction.onerror = () => {\r\n logger.error(`Key transaction failed: ${transaction.error}`);\r\n };\r\n const objStore = transaction.objectStore(this.storeName);\r\n const resultPromise: Promise> = new Promise((resolve, reject) => {\r\n const keysRequest = objStore.getAllKeys();\r\n keysRequest.onsuccess = () => {\r\n resolve(keysRequest.result.values() as IterableIterator);\r\n };\r\n keysRequest.onerror = () => {\r\n reject(new APIError(APIErrorCode.StorageError, `Unable to fetch keys from db: ${keysRequest.error}`));\r\n };\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n public async get(key: string): Promise {\r\n this.throwOnUnInit();\r\n const transaction = this.mDbConnection!.transaction(this.storeName, READ);\r\n transaction.onerror = () => {\r\n logger.error(`Get transaction failed: ${transaction.error}`);\r\n };\r\n const objStore = transaction.objectStore(this.storeName);\r\n const resultPromise = new Promise((resolve, reject) => {\r\n const getRequest = objStore.get(key);\r\n getRequest.onsuccess = () => {\r\n resolve(getRequest.result || null);\r\n }\r\n getRequest.onerror = () => {\r\n const msg = `Database get requestion failed: ${getRequest.error}`;\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n public async set(key: string, value: any): Promise {\r\n this.throwOnUnInit();\r\n const transaction = this.mDbConnection!.transaction(this.storeName, WRITE);\r\n transaction.onerror = () => {\r\n logger.error(`Set transaction failed: ${transaction.error}`);\r\n };\r\n const objStore = transaction.objectStore(this.storeName);\r\n const resultPromise = new Promise((resolve, reject) => {\r\n const setRequest = objStore.put(value, key);\r\n setRequest.onsuccess = () => {\r\n resolve();\r\n }\r\n setRequest.onerror = () => {\r\n const msg = `Database set request failed: ${setRequest.error}`;\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n public async remove(key: string): Promise {\r\n this.throwOnUnInit();\r\n const transaction = this.mDbConnection!.transaction(this.storeName, WRITE);\r\n transaction.onerror = () => {\r\n logger.error(`Delete transaction failed: ${transaction.error}`);\r\n };\r\n const objStore = transaction.objectStore(this.storeName);\r\n const resultPromise = new Promise((resolve, reject) => {\r\n const deleteRequest = objStore.delete(key);\r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n }\r\n deleteRequest.onerror = () => {\r\n const msg = `Database Delete request failed: ${deleteRequest.error}`;\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n public async clear(): Promise {\r\n this.throwOnUnInit();\r\n\r\n const transaction = this.mDbConnection!.transaction(this.storeName, WRITE);\r\n transaction.onerror = () => {\r\n logger.error(`Clear transaction failed: ${transaction.error}`);\r\n };\r\n const objStore = transaction.objectStore(this.storeName);\r\n const resultPromise = new Promise((resolve, reject) => {\r\n const clearRequest = objStore.clear();\r\n clearRequest.onsuccess = () => {\r\n resolve();\r\n }\r\n clearRequest.onerror = () => {\r\n const msg = `Database clear request failed: ${clearRequest.error}`;\r\n logger.error(msg);\r\n reject(new APIError(APIErrorCode.StorageError, msg));\r\n }\r\n });\r\n\r\n return resultPromise;\r\n }\r\n\r\n private static EnsureIndexedDB(): void {\r\n const winObj: any = window;\r\n Object.defineProperty(window, \"indexedDB\", {\r\n value: winObj.indexedDB || winObj.mozIndexedDB || winObj.webkitIndexedDB || winObj.msIndexedDB\r\n });\r\n }\r\n\r\n private throwOnUnInit() {\r\n if (!this.mDbConnection) {\r\n throw new APIError(APIErrorCode.StorageError, \"The IDBStorage has not been initialized.\");\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IInitializable } from \"../core/util.types\";\r\nimport { Auth } from \"../idm/auth\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { RequestStatusCode, ServerInfo } from \"../server/server.types\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { EntitledStreamParam, ProductEntity, ProductsResponseEntity, StreamingQualityResponseEntity, SubscriptionResolution, SubscriptionResponseEntity } from \"./entitlement.entities\";\r\nimport { UserSubscriptionInfo } from \"./entitlement.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { MonitorSettingsEntity } from \"../server/server.entities\";\r\n\r\nconst logger = Logging.getLogger(\"entitlement\");\r\n\r\n\r\n/**\r\n * Represents a users membership information and library management.\r\n */\r\nexport class Entitlement implements IInitializable {\r\n private readonly mAuth: Auth;\r\n private readonly mRestClient: RestClient;\r\n private mSettings!: Settings;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(auth: Auth, restClient: RestClient) {\r\n this.mAuth = auth;\r\n this.mRestClient = restClient;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mSettings = context.settings;\r\n }\r\n\r\n /**\r\n * Add an app to the authenticated users library.\r\n *\r\n * See the [Library Example](../guides/user-library-example.html) for more information.\r\n *\r\n * @param appId\r\n * The identifier for the app you wish to add. This value\r\n * can be taken from a variants id. {@link CoreAppData#id}\r\n *\r\n * @throws {@link MissingTokenError}\r\n * when no user has been authenticated.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async addToLibrary(appId: number): Promise {\r\n return this.mAuth.authenticatedRestCall((token:string) => {\r\n return this.mRestClient.addAppToLibrary(token, appId, this.mSettings.vpcId);\r\n });\r\n }\r\n\r\n /**\r\n * Remove an app from the authenticated users library.\r\n *\r\n * See the [Library Example](../guides/user-library-example.html) for more information.\r\n *\r\n * @param appId\r\n * The identifier for the app you wish to remove. This value\r\n * can be taken from a variants id. {@link CoreAppData#id}\r\n *\r\n * @throws {@link MissingTokenError}\r\n * when no user has been authenticated.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async removeFromLibrary(appId: number): Promise {\r\n return this.mAuth.authenticatedRestCall((token:string) => {\r\n return this.mRestClient.removeAppFromLibrary(token, appId, this.mSettings.vpcId);\r\n });\r\n }\r\n\r\n /**\r\n * Gets the available streaming qualities that the client can provide. This does\r\n * not imply that the user is entitled to all of these streaming qualities.\r\n *\r\n * @returns\r\n * {@link StreamingQualityResponseEntity} object.\r\n *\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async getClientStreamingQuality(): Promise{\r\n return this.mRestClient.getClientStreamingQuality(this.mSettings.vpcId);\r\n }\r\n\r\n /**\r\n * Gets the list of products associated with the authenticated user.\r\n *\r\n * @returns\r\n * One or more {@link ProductEntity} objects.\r\n *\r\n * @throws {@link MissingTokenError}\r\n * when no user has been authenticated.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async getUserProducts(): Promise {\r\n const productsResponse: ProductsResponseEntity = await this.mAuth.authenticatedRestCall((token: string) => {\r\n return this.mRestClient.getUserProducts(token, this.mSettings.vpcId, this.mSettings.languageCode);\r\n })\r\n\r\n return productsResponse.products ?? [];\r\n }\r\n\r\n /**\r\n * Gets the subscription associated with the authenticated user; Otherwise, a {@link SubscriptionError} is\r\n * thrown if the user does not have an active subscription.\r\n *\r\n * @throws {@link MissingTokenError}\r\n * when no user has been authenticated.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidSubscription}. The user does not have an active subscription.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async getUserSubscription(): Promise {\r\n const subscriptionResponse: SubscriptionResponseEntity = await this.mAuth.authenticatedRestCall((token:string) => {\r\n return this.mRestClient.getUserSubscription(token, this.mSettings.vpcId, this.mSettings.languageCode);\r\n });\r\n\r\n // requestStatus will always be available here, if it doesn't exist then the\r\n // REST call above would have thrown\r\n const statusCode: RequestStatusCode = subscriptionResponse.requestStatus!.statusCode as RequestStatusCode;\r\n\r\n if (subscriptionResponse.subscription) {\r\n switch (statusCode) {\r\n case RequestStatusCode.InvitationOnlyRegistration:\r\n case RequestStatusCode.RegionBanned:\r\n case RequestStatusCode.RegionNotSupportedIndefinitely:\r\n case RequestStatusCode.RegionNotSupportedForRegistration:\r\n case RequestStatusCode.RegionOnHoldForFree:\r\n case RequestStatusCode.RegionOnHoldForPaid:\r\n case RequestStatusCode.ForwardingZoneOutOfCapacity:\r\n case RequestStatusCode.Success:\r\n const userSubscription: UserSubscriptionInfo = {\r\n subscription: subscriptionResponse.subscription,\r\n product: null\r\n };\r\n\r\n if (subscriptionResponse.subscription.productUri) {\r\n try {\r\n userSubscription.product = await this.mRestClient.getLocalizedProduct(subscriptionResponse.subscription.productUri);\r\n } catch (e) {\r\n logger.error(`Unable to get the localized product info from ${subscriptionResponse.subscription.productUri}`);\r\n }\r\n }\r\n\r\n return userSubscription;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n throw new APIError(APIErrorCode.InvalidSubscription);\r\n }\r\n\r\n /**\r\n * Utility to filter out Streaming Parameters that are not entitled to the user or are not supported by server\r\n *\r\n * @param subscriptionInfo\r\n * User Subscription Info as got from {@link getUserSubscription} API\r\n * @param serverInfo\r\n * Server Info as got from {@link Server.getServerInfo} API\r\n *\r\n * @returns\r\n * One or more {@link EntitledStreamParam} objects.\r\n */\r\n public static GetAvailableStreamParams(subscriptionInfo: UserSubscriptionInfo, serverInfo: ServerInfo): EntitledStreamParam[] {\r\n const subscribedStreamParams: SubscriptionResolution[] = subscriptionInfo.subscription.features?.resolutions ?? [];\r\n const monitorSettings: MonitorSettingsEntity[] = serverInfo.monitorSettings;\r\n let entitledStreamParams: EntitledStreamParam[] = [];\r\n\r\n subscribedStreamParams.forEach(subscription => {\r\n if (subscription.isEntitled) {\r\n if (monitorSettings.some(server => {\r\n return server.widthInPixels === subscription.widthInPixels &&\r\n server.heightInPixels === subscription.heightInPixels &&\r\n server.framesPerSecond === subscription.framesPerSecond;\r\n })) {\r\n entitledStreamParams.push({\r\n height: subscription.heightInPixels,\r\n width: subscription.widthInPixels,\r\n fps: subscription.framesPerSecond\r\n });\r\n }\r\n }\r\n });\r\n return entitledStreamParams;\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpClientFactory } from \"../core/http-client-factory\";\r\nimport { StorageFactory } from \"../storage/storage-factory\";\r\nimport { Config } from \"../configuration/configuration.types\";\r\nimport { RecursivePartial } from \"../core/util.types\";\r\n\r\n/**\r\n * Represents settings that can be set at runtime.\r\n */\r\nexport class Settings {\r\n\r\n /**\r\n * The Client ID of your application. This will be the Client ID given to you by NVIDIA.\r\n */\r\n public clientId: string = \"\";\r\n\r\n /**\r\n * The Catalog Client ID of your application. This will be the Catalog Client ID given to you by NVIDIA.\r\n */\r\n public catalogClientId: string = \"\";\r\n\r\n /**\r\n * The Partner ID. This will be the partner ID given to you by NVIDIA.\r\n */\r\n public partnerId: string = \"\";\r\n\r\n /**\r\n * The language code to use when returning localized content.\r\n */\r\n public languageCode: string = \"en-US\";\r\n\r\n /**\r\n * Overrides some or all of the built-in SDK Configuration\r\n */\r\n public configOverrides: RecursivePartial = {};\r\n\r\n /**\r\n * Path to folder containing localization overrides (I18N)\r\n */\r\n public stringOverridesUrl: string = \"\";\r\n\r\n /**\r\n * Path to Custom CSS for overriding the default Streamer UI\r\n */\r\n public streamerCssSrc: string = \"\";\r\n\r\n /**\r\n * The virtual machine identifier used for allocating a streaming session. This should be set to the value\r\n * returned from the {@link Server.getServerInfo} API.\r\n */\r\n public vpcId: string = \"\";\r\n\r\n /**\r\n * Overrides a logged-in users streamingServiceUrl.\r\n */\r\n public serviceUrl: string = \"\";\r\n\r\n /**\r\n * Enable Browser Tools.\r\n */\r\n public enableBrowserTools: boolean = false;\r\n\r\n /**\r\n * Disable support check to try streaming on an unsupported platform\r\n */\r\n public enableSupportCheck: boolean = true;\r\n\r\n /**\r\n * Application Name Override.\r\n */\r\n public appName: string = \"\";\r\n\r\n /**\r\n * Application Version.\r\n */\r\n public appVersion: string = \"\";\r\n\r\n /** @internal **/\r\n public httpClientFactory?: HttpClientFactory;\r\n\r\n /** @internal **/\r\n public storageFactory: StorageFactory = new StorageFactory();\r\n\r\n /** @internal **/\r\n public enableIntroAnimation: boolean = true;\r\n\r\n /**\r\n * Constructs a new instance using all or some of the Settings object.\r\n *\r\n * @param descriptor An object that contains one or more settings.\r\n */\r\n public constructor(descriptor?: Partial) {\r\n Object.assign(this, descriptor);\r\n }\r\n}","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { FilterClauseType, QueryFilter, QueryFilterVariant, QueryFilterGfn, IQueryFilter, QueryFilterClauseBoolean, QueryFilterClauseDate, QueryFilterClauseInt, QueryFilterClauseString, QueryFilterClauseStringList } from \"./catalog-filters.types\";\r\n\r\n/**\r\n * Base class providing common functionality to the different query builders.\r\n */\r\nexport class QueryFilterBuilderBase {\r\n /** @internal */\r\n protected readonly mRoot: QueryFilterBuilderBase;\r\n /** @internal */\r\n protected mFilterBuilders: { [key: string]: QueryFilterBuilderBase } = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n this.mRoot = root ?? this;\r\n }\r\n\r\n /**\r\n * Builds the query definition after all filters have been defined.\r\n */\r\n public build(): IQueryFilter {\r\n const base: IQueryFilter = {} as IQueryFilter;\r\n\r\n for (const [k, v] of Object.entries(this.mFilterBuilders)) {\r\n (base as any)[k] = v.build();\r\n }\r\n\r\n return base;\r\n }\r\n\r\n /** @internal */\r\n protected getBuilder(type: { new(root: Nullable): BuilderType; }, key: string): QueryFilterBuilderBase {\r\n this.mFilterBuilders[key] = this.mFilterBuilders[key] ?? new type(this);\r\n return this.mFilterBuilders[key];\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilter} for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterBuilder extends QueryFilterBuilderBase {\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root);\r\n }\r\n\r\n /**\r\n * Returns the developer name filter query builder.\r\n */\r\n public get developerName(): QueryFilterClauseStringBuilder {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"developerName\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the genres filter query builder.\r\n */\r\n public get genres(): QueryFilterClauseStringListBuilder {\r\n return this.getBuilder(QueryFilterClauseStringListBuilder, \"genres\") as QueryFilterClauseStringListBuilder;\r\n }\r\n\r\n /**\r\n * Returns the keywords filter query builder.\r\n */\r\n public get keywords(): QueryFilterClauseStringListBuilder {\r\n return this.getBuilder(QueryFilterClauseStringListBuilder, \"keywords\") as QueryFilterClauseStringListBuilder;\r\n }\r\n\r\n /**\r\n * Returns the max local players filter query builder.\r\n */\r\n public get maxLocalPlayers(): QueryFilterClauseIntBuilder {\r\n return this.getBuilder(QueryFilterClauseIntBuilder, \"maxLocalPlayers\") as QueryFilterClauseIntBuilder;\r\n }\r\n\r\n /**\r\n * Returns the max online players filter query builder.\r\n */\r\n public get maxOnlinePlayers(): QueryFilterClauseIntBuilder {\r\n return this.getBuilder(QueryFilterClauseIntBuilder, \"maxOnlinePlayers\") as QueryFilterClauseIntBuilder;\r\n }\r\n\r\n /**\r\n * Returns the number of fake controllers filter query builder.\r\n */\r\n public get numberOfFakeControllers(): QueryFilterClauseIntBuilder {\r\n return this.getBuilder(QueryFilterClauseIntBuilder, \"numberOfFakeControllers\") as QueryFilterClauseIntBuilder;\r\n }\r\n\r\n /**\r\n * Returns the os type filter query builder.\r\n */\r\n public get osType() {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"osType\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the publisher name filter query builder.\r\n */\r\n public get publisherName() {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"publisherName\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the short name filter query builder.\r\n */\r\n public get shortName() {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"shortName\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the sort name filter query builder.\r\n */\r\n public get sortName() {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"sortName\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the supported controls filter query builder.\r\n */\r\n public get supportedControls(): QueryFilterClauseStringListBuilder {\r\n return this.getBuilder(QueryFilterClauseStringListBuilder, \"supportedControls\") as QueryFilterClauseStringListBuilder;\r\n }\r\n\r\n /**\r\n * Returns the supported gameplay modes filter query builder.\r\n */\r\n public get supportedGamePlayModes(): QueryFilterClauseStringListBuilder {\r\n return this.getBuilder(QueryFilterClauseStringListBuilder, \"supportedGamePlayModes\") as QueryFilterClauseStringListBuilder;\r\n }\r\n\r\n /**\r\n * Returns the type filter query builder.\r\n */\r\n public get type() {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"type\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the variants filter query builder.\r\n */\r\n public get variants(): QueryFilterVariantBuilder {\r\n return this.getBuilder(QueryFilterVariantBuilder, \"variants\") as QueryFilterVariantBuilder;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterVariant} for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterVariantBuilder extends QueryFilterBuilderBase {\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root);\r\n }\r\n\r\n /**\r\n * Returns the appstore filter query builder.\r\n */\r\n public get appStore(): QueryFilterClauseStringBuilder {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"appStore\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the id filter query builder.\r\n */\r\n public get id(): QueryFilterClauseStringBuilder {\r\n return this.getBuilder(QueryFilterClauseStringBuilder, \"id\") as QueryFilterClauseStringBuilder;\r\n }\r\n\r\n /**\r\n * Returns the filter query builder for whether the game displays its own rating.\r\n */\r\n public get displaysOwnRatingDuringGameplay(): QueryFilterClauseBooleanBuilder {\r\n return this.getBuilder(QueryFilterClauseBooleanBuilder, \"displaysOwnRatingDuringGameplay\") as QueryFilterClauseBooleanBuilder;\r\n }\r\n\r\n /**\r\n * Returns the gfn specific data filter query builder.\r\n */\r\n public get gfn(): QueryFilterGfnBuilder {\r\n return this.getBuilder(QueryFilterGfnBuilder, \"gfn\") as QueryFilterGfnBuilder;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterGfn} for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterGfnBuilder extends QueryFilterBuilderBase {\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root);\r\n }\r\n\r\n /**\r\n * Returns the marketing date query builder.\r\n */\r\n public get marketingDate(): QueryFilterClauseDateBuilder {\r\n return this.getBuilder(QueryFilterClauseDateBuilder, \"marketingDate\") as QueryFilterClauseDateBuilder;\r\n }\r\n\r\n /**\r\n * Returns the release date filter query builder.\r\n */\r\n public get releaseDate(): QueryFilterClauseDateBuilder {\r\n return this.getBuilder(QueryFilterClauseDateBuilder, \"releaseDate\") as QueryFilterClauseDateBuilder;\r\n }\r\n\r\n public get isInLibrary(): QueryFilterClauseBooleanBuilder {\r\n return this.getBuilder(QueryFilterClauseBooleanBuilder, \"isInLibrary\") as QueryFilterClauseBooleanBuilder;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a query filter clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseBuilderBase extends QueryFilterBuilderBase {\r\n /** @internal */\r\n public readonly type: FilterClauseType;\r\n\r\n /** @internal */\r\n constructor(root: Nullable, type: FilterClauseType) {\r\n super(root);\r\n this.type = type;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterClauseString} clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseStringBuilder extends QueryFilterClauseBuilderBase {\r\n /** @internal */\r\n public readonly clause: QueryFilterClauseString = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root, \"FilterClauseString\");\r\n }\r\n\r\n /**\r\n * Builds the filter clause query definition.\r\n */\r\n public build(): IQueryFilter {\r\n return this.clause;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseString.equals} clause.\r\n */\r\n public equalTo(v: string): QueryFilterBuilderBase {\r\n this.clause.equals = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseString.notEquals} clause.\r\n */\r\n public notEqualTo(v: string): QueryFilterBuilderBase {\r\n this.clause.notEquals = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseString.in} clause.\r\n */\r\n public in(v: string[]): QueryFilterBuilderBase {\r\n this.clause.in = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseString.notIn} clause.\r\n */\r\n public notIn(v: string[]): QueryFilterBuilderBase {\r\n this.clause.notIn = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseString.has} clause.\r\n */\r\n public has(v: string): QueryFilterBuilderBase {\r\n this.clause.has = v;\r\n return this.mRoot;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterClauseStringList} clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseStringListBuilder extends QueryFilterClauseBuilderBase {\r\n /** @internal */\r\n public readonly clause: QueryFilterClauseStringList = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root, \"FilterClauseStringList\");\r\n }\r\n\r\n /**\r\n * Builds the filter clause query definition.\r\n */\r\n public build(): IQueryFilter {\r\n return this.clause;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseStringList.has} clause.\r\n */\r\n public has(v: string): QueryFilterBuilderBase {\r\n this.clause.has = v;\r\n return this.mRoot;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterClauseBoolean} clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseBooleanBuilder extends QueryFilterClauseBuilderBase {\r\n /** @internal */\r\n public readonly clause: QueryFilterClauseBoolean = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root, \"FilterClauseBoolean\");\r\n }\r\n\r\n /**\r\n * Builds the filter clause query definition.\r\n */\r\n public build(): IQueryFilter {\r\n return this.clause;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseBoolean.equals} clause.\r\n */\r\n public equalTo(v: boolean): QueryFilterBuilderBase {\r\n this.clause.equals = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseBoolean.notEquals} clause.\r\n */\r\n public notEqualTo(v: boolean): QueryFilterBuilderBase {\r\n this.clause.notEquals = v;\r\n return this.mRoot;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterClauseInt} clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseIntBuilder extends QueryFilterClauseBuilderBase {\r\n /** @internal */\r\n public readonly clause: QueryFilterClauseInt = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root, \"FilterClauseInt\");\r\n }\r\n\r\n /**\r\n * Builds the filter clause query definition.\r\n */\r\n public build(): IQueryFilter {\r\n return this.clause;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.equals} clause.\r\n */\r\n public equalTo(v: number): QueryFilterBuilderBase {\r\n this.clause.equals = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.notEquals} clause.\r\n */\r\n public notEqualTo(v: number): QueryFilterBuilderBase {\r\n this.clause.notEquals = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.ge} clause.\r\n */\r\n public greaterThanOrEqualTo(v: number): QueryFilterBuilderBase {\r\n this.clause.ge = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.gt} clause.\r\n */\r\n public greaterThan(v: number): QueryFilterBuilderBase {\r\n this.clause.gt = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.le} clause.\r\n */\r\n public lessThanOrEqualTo(v: number): QueryFilterBuilderBase {\r\n this.clause.le = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.lt} clause.\r\n */\r\n public lessThan(v: number): QueryFilterBuilderBase {\r\n this.clause.lt = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.in} clause.\r\n */\r\n public in(v: number[]): QueryFilterBuilderBase {\r\n this.clause.in = v;\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseInt.notIn} clause.\r\n */\r\n public notIn(v: number[]): QueryFilterBuilderBase {\r\n this.clause.notIn = v;\r\n return this.mRoot;\r\n }\r\n}\r\n\r\n/**\r\n * Assists in building a {@link QueryFilterClauseDate} clause for calls that use {@link AppsQueryConfiguration}\r\n */\r\nexport class QueryFilterClauseDateBuilder extends QueryFilterClauseBuilderBase {\r\n /** @internal */\r\n public readonly clause: QueryFilterClauseDate = {};\r\n\r\n /** @internal */\r\n constructor(root: Nullable = null) {\r\n super(root, \"FilterClauseDate\");\r\n }\r\n\r\n /**\r\n * Builds the filter clause query definition.\r\n */\r\n public build(): IQueryFilter {\r\n return this.clause;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseDate.between} clause.\r\n */\r\n public between(v1: Date, v2: Date): QueryFilterBuilderBase {\r\n this.clause.between = {\r\n start: v1.toUTCString(),\r\n end: v2.toUTCString(),\r\n }\r\n return this.mRoot;\r\n }\r\n\r\n /**\r\n * Defines the {@link QueryFilterClauseDate.has} clause.\r\n */\r\n public has(v: Date): QueryFilterBuilderBase {\r\n this.clause.has = v.toUTCString();\r\n return this.mRoot;\r\n }\r\n}\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpServerConfiguration } from \"../core/http-client.types\";\r\nimport { RecursivePartial } from \"../core/util.types\";\r\nimport { QueryFilter } from \"./catalog-filters.types\";\r\n\r\nexport const DoNotSendVpcId: string = \"DO_NOT_SEND\";\r\n\r\n/** @internal **/\r\nexport interface CatalogConfiguration extends HttpServerConfiguration {\r\n}\r\n\r\n/** @internal **/\r\nexport enum AppDataKind {\r\n App,\r\n Variant\r\n}\r\n\r\n/** @internal **/\r\nexport interface PageInfo {\r\n hasNextPage: boolean;\r\n endCursor: string;\r\n}\r\n\r\n/**\r\n * Represents an app store.\r\n */\r\nexport interface AppStoreDefinition {\r\n /**\r\n * The name of the app store.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The display title of the app store.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * A url to an app store icon.\r\n *\r\n * @deprecated This url is deprecated. Use and scale the imageUrl instead.\r\n */\r\n iconUrl?: string;\r\n\r\n /**\r\n * A url to an app store image.\r\n */\r\n imageUrl?: string;\r\n\r\n /**\r\n * @internal\r\n */\r\n features?: Features[];\r\n\r\n /**\r\n * @internal\r\n */\r\n accountLinkingMetadata?: AccountLinkingMetadata;\r\n\r\n /**\r\n * The sorting order to use when displayed\r\n * in a list.\r\n */\r\n sortOrder: number;\r\n}\r\n\r\n/**\r\n * Represents a genre.\r\n */\r\nexport interface GenreDefinition {\r\n /**\r\n * The name of the genre.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The display title of the genre.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * A url to an icon that represents the genre.\r\n */\r\n iconUrl?: string;\r\n\r\n /**\r\n * The sorting order to use when displayed\r\n * in a list.\r\n */\r\n sortOrder: number;\r\n}\r\n\r\n/**\r\n * Represents a rating system name.\r\n */\r\nexport enum RatingSystem {\r\n /**\r\n * The content rating system in the United States.\r\n *\r\n * {@link https://www.esrb.org | Entertainment Software Rating Board}\r\n */\r\n ESRB = \"ESRB\",\r\n\r\n /**\r\n * The content rating system for much of Europe.\r\n *\r\n * {@link https://pegi.info | Pan European Game Information}\r\n */\r\n PEGI = \"PEGI\",\r\n\r\n /**\r\n * The content rating system in Germany.\r\n *\r\n * {@link https://usk.de | Unterhaltungssoftware Selbstkontrolle}\r\n */\r\n USK = \"USK\",\r\n\r\n /**\r\n * The content rating system in Japan.\r\n *\r\n * {@link http://www.cero.gr.jp | Computer Entertainment Rating Organization}\r\n */\r\n CERO = \"CERO\",\r\n\r\n /**\r\n * The content rating system in South Korea.\r\n *\r\n * {@link http://www.grac.or.kr | Game Rating and Administration Committee}\r\n */\r\n GRAC = \"GRAC\",\r\n\r\n /**\r\n * The content is not rated.\r\n */\r\n Unrated = \"Unrated\"\r\n}\r\n\r\n/**\r\n * Represents the content rating of the app.\r\n */\r\nexport interface ContentRating {\r\n /**\r\n * The kind of the rating system used.\r\n */\r\n kind: RatingSystem;\r\n\r\n /**\r\n * The key used for lookup or identification.\r\n */\r\n key: string;\r\n\r\n /**\r\n * List of content descriptors used in the\r\n * app to trigger this rating.\r\n *\r\n * *NOTE*: use the key to lookup the full descriptor\r\n * in the rating system.\r\n */\r\n contentDescriptorKeys: string[];\r\n\r\n /**\r\n * List of interactive elements use in the\r\n * app to trigger this rating.\r\n *\r\n * *NOTE*: use the key to lookup the full element\r\n * in the rating system.\r\n */\r\n interactiveElementKeys?: string[];\r\n}\r\n\r\nconst defaultContentRating: ContentRating = {\r\n kind: RatingSystem.Unrated,\r\n key: \"\",\r\n contentDescriptorKeys: []\r\n}\r\n\r\n/**\r\n * Represents a descriptor used in a rating system.\r\n */\r\nexport interface ContentRatingDescriptor {\r\n /**\r\n * The key used for lookup or identification.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The title used for display.\r\n */\r\n title: string;\r\n\r\n /**\r\n * The sorting order when displayed in a list.\r\n */\r\n sortOrder: number;\r\n}\r\n\r\n/**\r\n * Represents an individual rating within a rating system.\r\n */\r\nexport interface ContentRatingsDefinition {\r\n /**\r\n * An indicator key for the rating.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The rating display title.\r\n */\r\n title: string;\r\n\r\n /**\r\n * The rating description.\r\n */\r\n description: string;\r\n\r\n /**\r\n * The minimum age required to view or interact\r\n * with a piece of content.\r\n */\r\n minimumAge: number;\r\n\r\n /**\r\n * A url to a small image.\r\n */\r\n smallImageUrl: string;\r\n\r\n /**\r\n * A url to a large image.\r\n */\r\n largeImageUrl: string;\r\n}\r\n\r\n/**\r\n * Represents a standard content rating system.\r\n */\r\nexport interface ContentRatingSystemDefinition {\r\n /**\r\n * The name of the rating system.\r\n */\r\n name: RatingSystem;\r\n\r\n /**\r\n * The list of ratings in this system.\r\n */\r\n ratings: ContentRatingsDefinition[];\r\n\r\n /**\r\n * The list of content descriptors available in this rating system.\r\n */\r\n contentDescriptors: ContentRatingDescriptor[];\r\n\r\n /**\r\n * The list of interactive elements available in this rating system.\r\n */\r\n interactiveElements: ContentRatingDescriptor[];\r\n\r\n /**\r\n * @internal\r\n *\r\n * TODO: find out what this field is and used for.\r\n */\r\n displayInterval: number;\r\n}\r\n\r\n\r\n/**\r\n * Represents supported features provided by NVIDIA.\r\n */\r\nexport interface NvidiaFeatures {\r\n /**\r\n * The game supports {@link https://developer.nvidia.com/ansel | NVIDIA Ansel}.\r\n */\r\n ansel: boolean;\r\n\r\n /**\r\n * The game supports NVIDIA Freestyle.\r\n *\r\n * NVIDIA Freestyle allows a user to apply post-processing filters\r\n * on a game while they play.\r\n */\r\n freestyle: boolean;\r\n\r\n /**\r\n * The game supports High Dynamic Range rendering.\r\n */\r\n hdr: boolean;\r\n\r\n /**\r\n * The game supports {@link https://developer.nvidia.com/highlights | NVIDIA Highlights}.\r\n */\r\n highlights: boolean;\r\n\r\n /**\r\n * The game supports {@link https://developer.nvidia.com/rtx/ngx | NVIDIA NGX} (Neural Graphics eXperience).\r\n */\r\n ngx: boolean;\r\n}\r\n\r\nconst defaultNvidiaFeatures: NvidiaFeatures = {\r\n ansel: false,\r\n freestyle: false,\r\n hdr: false,\r\n highlights: false,\r\n ngx: false\r\n};\r\n\r\n/**\r\n * Represents an app store.\r\n */\r\nexport interface Store {\r\n /**\r\n * The app store identifier.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The name of the app store.\r\n */\r\n name: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ApkInfo {\r\n type: string;\r\n version: string;\r\n url: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface MarqueeScrim {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\n/**\r\n * Represents a supported streaming mode.\r\n */\r\nexport interface StreamingMode {\r\n /**\r\n * The number of frames per second.\r\n */\r\n fps: number;\r\n\r\n /**\r\n * The maximum resolution width of the stream, in pixels.\r\n */\r\n widthInPixels: number;\r\n\r\n /**\r\n * The maximum resolution height of the stream, in pixels.\r\n */\r\n heightInPixels: number;\r\n}\r\n\r\n/**\r\n * Represents a type of controller.\r\n */\r\nexport enum InputControllerType {\r\n /**\r\n * The game supports a mouse.\r\n */\r\n Mouse = \"MOUSE\",\r\n\r\n /**\r\n * The game supports a mouse and keyboard.\r\n */\r\n MouseKeyboard = \"MOUSE_KEYBOARD\",\r\n\r\n /**\r\n * The game supports a keyboard.\r\n */\r\n Keyboard = \"KEYBOARD\",\r\n\r\n /**\r\n * The game supports a gamepad.\r\n */\r\n Gamepad = \"GAMEPAD\",\r\n\r\n /**\r\n * The game has partial gamepad support.\r\n */\r\n PartialGamepad = \"GAMEPAD_PARTIAL\",\r\n\r\n /**\r\n * The game supports XInput type gamepads.\r\n */\r\n XInputGamepad = \"X_INPUT_GAMEPAD\",\r\n\r\n /**\r\n * The game supports partial XInput type gamepads\r\n */\r\n XInputGamepadPartial = \"X_INPUT_GAMEPAD_PARTIAL\",\r\n\r\n /**\r\n * The game supports Direct Input type gamepads.\r\n */\r\n DirectInputGamepad = \"DIRECT_INPUT_GAMEPAD\",\r\n\r\n /**\r\n * The game supports partial Direct Input type gamepads.\r\n */\r\n DirectInputGamepadPartial = \"DIRECT_INPUT_GAMEPAD_PARTIAL\",\r\n\r\n /**\r\n * The game supports DualSense gamepads.\r\n */\r\n DualSenseGamepad = \"DUALSENSE_GAMEPAD\",\r\n\r\n /**\r\n * The game supports DualShock4 gamepads.\r\n */\r\n DualShock4Gamepad = \"DUALSHOCK4_GAMEPAD\",\r\n\r\n /**\r\n * The game supports touch inputs.\r\n */\r\n Touch = \"TOUCHSCREEN\",\r\n\r\n /**\r\n * The game supports a Joystick.\r\n */\r\n Joystick = \"JOYSTICK\",\r\n\r\n /**\r\n * The game supports a Wheel controller.\r\n */\r\n Wheel = \"WHEEL\",\r\n\r\n /**\r\n * The game supports a Wii controller.\r\n */\r\n WiiController = \"WII_CONTROLLER\",\r\n\r\n /**\r\n * The game supports a Kinect controller.\r\n */\r\n KinectController = \"KINECT_CONTROLLER\"\r\n}\r\n\r\n/**\r\n * Represents a game play mode.\r\n */\r\nexport enum GameplayMode {\r\n /**\r\n * The game is single player.\r\n */\r\n SinglePlayer = \"SINGLE_PLAYER\",\r\n\r\n /**\r\n * The game is online multiplayer.\r\n */\r\n MultiPlayerOnline = \"MULTI_PLAYER_ONLINE\",\r\n\r\n /**\r\n * The game is split-screen multiplayer.\r\n */\r\n MultiPlayerSplitScreen = \"MULTI_PLAYER_SPLIT_SCREEN\"\r\n}\r\n\r\n/**\r\n * Represents the type of app.\r\n */\r\nexport enum AppType {\r\n /**\r\n * The app is an executable application.\r\n */\r\n Application = \"APPLICATION\",\r\n\r\n /**\r\n * The app is downloadable content.\r\n */\r\n DLC = \"DLC\",\r\n\r\n /**\r\n * The app is a game.\r\n */\r\n Game = \"GAME\",\r\n\r\n /**\r\n * The app is a variant.\r\n */\r\n Variant = \"VARIANT\",\r\n\r\n /** @internal **/\r\n PlatformClient = \"PLATFORM_CLIENT\",\r\n /** @internal **/\r\n Prerequisite = \"PREREQUISITE\",\r\n}\r\n\r\n/**\r\n * Represents the current availability status\r\n * of a title.\r\n */\r\nexport enum GfnStatus {\r\n /**\r\n * The title is available.\r\n */\r\n Available = \"AVAILABLE\",\r\n\r\n /**\r\n * The title is having patches applied.\r\n */\r\n Patching = \"PATCHING\",\r\n\r\n /**\r\n * The server is under maintenance.\r\n */\r\n ServerMaintenance = \"SERVER_MAINTENANCE\",\r\n\r\n /**\r\n * The status is unknown.\r\n */\r\n Unknown = \"UNKNOWN\"\r\n}\r\n\r\n/**\r\n * Provides additional information about a game status.\r\n */\r\nexport interface GfnStatusInfo {\r\n /**\r\n * Enumeration of the status\r\n */\r\n status: GfnStatus;\r\n\r\n /**\r\n * Optional localization of the status. This is not provided when the game is available.\r\n */\r\n displayText?: string;\r\n\r\n /**\r\n * Optional additional localized info. This is not provided when the game is available.\r\n */\r\n supplementalDisplayText?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport enum GfnFeature {\r\n RTX = \"RTX_ENABLED\",\r\n HDR = \"HDR_ENABLED\",\r\n OverrideTouch = \"OVERRIDE_TOUCH_ENABLED\"\r\n}\r\n\r\n/**\r\n * Represents a key/value pair that contains information\r\n * about what GFN features the title supports.\r\n */\r\nexport interface GfnFeatureItem {\r\n key: string;\r\n value: string;\r\n}\r\n\r\n/**\r\n * Represents GeForce NOW specific attributes.\r\n */\r\nexport interface GfnInfo {\r\n /**\r\n * The current status of the title on the\r\n * GFN service.\r\n */\r\n status: GfnStatus;\r\n\r\n /**\r\n * The date the title was published on GFN.\r\n */\r\n releaseDate: Date;\r\n\r\n /**\r\n * True if the title is in the users library; otherwise, false.\r\n * The value is only available when the user is logged in.\r\n */\r\n isInLibrary: boolean;\r\n\r\n /**\r\n * When the title was added to the users library.\r\n */\r\n timeAddedToLibrary: string;\r\n\r\n /**\r\n * One or more GFN features that the title supports.\r\n */\r\n features: GfnFeatureItem | GfnFeatureItem[]\r\n}\r\n\r\n/**\r\n * Represents a set of values created from\r\n * other values.\r\n */\r\nexport interface ComputedValues {\r\n /**\r\n * The earliest date the title was released.\r\n */\r\n earliestReleaseDate: string;\r\n\r\n /**\r\n * The earliest date the title was released\r\n * to the general public.\r\n */\r\n earliestStreetDate: string;\r\n\r\n /**\r\n * All the keywords that represent the title.\r\n */\r\n allKeywords: string[];\r\n}\r\n\r\n/**\r\n * Represents the type of section.\r\n */\r\nexport enum SectionType {\r\n /**\r\n * The section is the users library.\r\n */\r\n MyLibrary = \"MY_LIBRARY\",\r\n\r\n /** @internal **/\r\n Default = \"DEFAULT\",\r\n /** @internal **/\r\n Generic = \"GENERIC\",\r\n /** @internal **/\r\n RecentlyPlayed = \"RECENTLY_PLAYED\",\r\n /** @internal **/\r\n Recommendations = \"RECOMMENDATIONS\",\r\n /** @internal **/\r\n Settings = \"SETTINGS\",\r\n /** @internal **/\r\n SteamLibrary = \"STEAM_LIBRARY\",\r\n /** @internal **/\r\n BlizzardLibrary = \"BLIZZARD_LIBRARY\",\r\n /** @internal **/\r\n Featured = \"FEATURED\",\r\n /** @internal **/\r\n Wide = \"WIDE\"\r\n}\r\n\r\n/**\r\n * Represents the available flags defined on a section.\r\n */\r\nexport type SectionFlags = \"HIDDEN\";\r\n\r\n/** @internal **/\r\nexport interface Item {\r\n id: string;\r\n}\r\n\r\n\r\n/** @internal **/\r\nexport interface ActionData {\r\n title: string;\r\n text: string;\r\n url: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface MarketingItem extends Item {\r\n title: string;\r\n body: string;\r\n imageUrl: string;\r\n action: ActionData;\r\n}\r\n\r\n/** @internal **/\r\nexport interface FilterItem extends Item {\r\n title: string;\r\n imageUrl: string;\r\n section: SectionType;\r\n}\r\n\r\n/**\r\n * Represents an apps media assets.\r\n */\r\nexport interface AppImageTable {\r\n keyIconUrl: string;\r\n keyArtworkUrl: string;\r\n keyImageUrl: string;\r\n gameIconUrl: string;\r\n gameLogoUrl: string;\r\n gameBoxArtworkUrl: string;\r\n featureImageUrl: string;\r\n heroImageUrl: string;\r\n heroMarqueeImageUrl: string;\r\n tvBannerUrl: string;\r\n videoTrailerUrl: string;\r\n screenshotThumbnailUrl: string;\r\n screenshotUrls: string[];\r\n anselImageUrls: string[];\r\n}\r\n\r\nconst defaultAppImageTable: AppImageTable = {\r\n keyIconUrl: \"\",\r\n keyArtworkUrl: \"\",\r\n keyImageUrl: \"\",\r\n gameIconUrl: \"\",\r\n gameLogoUrl: \"\",\r\n gameBoxArtworkUrl: \"\",\r\n featureImageUrl: \"\",\r\n heroImageUrl: \"\",\r\n heroMarqueeImageUrl: \"\",\r\n tvBannerUrl: \"\",\r\n videoTrailerUrl: \"\",\r\n screenshotThumbnailUrl: \"\",\r\n screenshotUrls: [],\r\n anselImageUrls: []\r\n}\r\n/**\r\n * Represents common app metadata that is shared\r\n * between both parent app and the app variants.\r\n */\r\nexport interface CoreAppData {\r\n /**\r\n * The unique identifier.\r\n */\r\n uid: string;\r\n\r\n /**\r\n * The app's CMS id.\r\n */\r\n id: number;\r\n\r\n /**\r\n * The name of the app.\r\n */\r\n title: string;\r\n\r\n /**\r\n * A short description about the app.\r\n */\r\n shortDescription: string;\r\n\r\n /**\r\n * A long description about the app.\r\n */\r\n longDescription: string;\r\n\r\n /** @internal **/\r\n androidPackageName?: string;\r\n /** @internal **/\r\n apks?: ApkInfo[];\r\n\r\n /**\r\n * The store where the app is listed.\r\n */\r\n appStore: string;\r\n\r\n /**\r\n * The content ratings.\r\n */\r\n contentRatings: ContentRating;\r\n\r\n /**\r\n * A set of computed values.\r\n */\r\n computedValues?: ComputedValues;\r\n\r\n /**\r\n * The name of the app's developer.\r\n */\r\n developerName: string;\r\n\r\n /**\r\n * Indicates if the game will display its own rating\r\n * during game play or not.\r\n */\r\n displaysOwnRatingDuringGameplay: boolean;\r\n\r\n /**\r\n * The url of the application in GFN.\r\n */\r\n gfnUrl: string;\r\n\r\n /**\r\n * The genres which the app is classified in.\r\n */\r\n genres: string[];\r\n\r\n /**\r\n * The set of image and other media urls.\r\n */\r\n images: AppImageTable;\r\n\r\n /**\r\n * The keywords that represent the app for it\r\n * to be searchable.\r\n */\r\n keywords: string[];\r\n\r\n /** @internal **/\r\n marqueeScrimPrimaryRGB?: MarqueeScrim;\r\n\r\n /**\r\n * The maximum number of local players allowed.\r\n */\r\n maxLocalPlayers: number;\r\n\r\n /**\r\n * The maximum number of online players allowed.\r\n */\r\n maxOnlinePlayers: number;\r\n\r\n /**\r\n * The number of fake controllers.\r\n */\r\n numberOfFakeControllers: number;\r\n\r\n /**\r\n * The set of NVIDIA features that the\r\n * game supports.\r\n */\r\n nvidiaFeatures: NvidiaFeatures;\r\n\r\n /**\r\n * The supported operating system.\r\n */\r\n osType: string;\r\n\r\n /**\r\n * The name of the publisher.\r\n */\r\n publisherName: string;\r\n\r\n /**\r\n * The generated short name for the app.\r\n */\r\n shortName: string;\r\n\r\n /**\r\n * The name used for sorting in a visual display list.\r\n */\r\n sortName: string;\r\n\r\n /**\r\n * The primary app store.\r\n */\r\n storeId?: string;\r\n\r\n /**\r\n * The streaming modes that are available.\r\n */\r\n streamingModes?: StreamingMode[];\r\n\r\n /**\r\n * The list of controls that the app supports.\r\n */\r\n supportedControls?: InputControllerType[];\r\n\r\n /**\r\n * The list of supported game play modes.\r\n */\r\n supportedGamePlayModes?: GameplayMode[];\r\n\r\n /**\r\n * The type of app.\r\n */\r\n type: AppType;\r\n\r\n /**\r\n * Various GeForce NOW attributes.\r\n */\r\n gfn: Partial;\r\n\r\n /**\r\n * The list of app variants.\r\n */\r\n variants: Omit[];\r\n}\r\n\r\ntype AppDataVariantOnly = \"id\" | \"appStore\" | \"displaysOwnRatingDuringGameplay\" | \"gfn\";\r\ntype AppDataVariantOverride = \"developerName\" | \"publisherName\" | \"sortName\" | \"supportedControls\"\r\ntype AppDataUnused = \"androidPackageName\" | \"apks\" | \"osType\" | \"shortName\" | \"storeId\" | \"type\" | \"supportedGamePlayModes\"\r\n\r\n/**\r\n * Represents the app metadata.\r\n */\r\nexport type AppData = Omit\r\n\r\n/**\r\n * Represents the variant metadata in an app.\r\n */\r\nexport type VariantData = Pick\r\n\r\ntype LayoutListAppDataFields = \"uid\" | \"title\" | \"contentRatings\" | \"genres\" | \"developerName\" | \"publisherName\" | \"nvidiaFeatures\" | \"sortName\" | \"images\";\r\ntype LayoutListVariantDataFields = \"id\" | \"appStore\" | \"gfn\" | \"publisherName\" | \"sortName\";\r\n\r\n/**\r\n * Represents app metadata for a layout list (or panel section).\r\n */\r\nexport interface LayoutListAppData extends Partial, LayoutListAppDataFields>> {\r\n /**\r\n * The list of app variants.\r\n */\r\n variants: Partial>[];\r\n}\r\n\r\n/**\r\n * Represents a section item that contains a game.\r\n */\r\nexport interface LayoutListGameItem extends Item {\r\n /**\r\n * The games app metadata.\r\n */\r\n app: LayoutListAppData;\r\n}\r\n\r\n/**\r\n * Represents an item in a section.\r\n */\r\nexport type ItemResult = LayoutListGameItem | MarketingItem | FilterItem;\r\n\r\n/**\r\n * Represents a section in a panel.\r\n */\r\nexport interface Section {\r\n /**\r\n * The unique section identifier.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The section title, this value can be used to render\r\n * a heading on-screen, for example.\r\n */\r\n title: string;\r\n\r\n /**\r\n * The type of section.\r\n */\r\n type: SectionType;\r\n\r\n /**\r\n * List of flags to hint to clients how to render the section.\r\n */\r\n flags: SectionFlags[];\r\n\r\n /**\r\n * List of items in the section.\r\n */\r\n items: ItemResult[];\r\n\r\n /**\r\n * The name to use when collecting telemetry.\r\n * @internal\r\n */\r\n telemetryName?: string;\r\n}\r\n\r\n/**\r\n * Represents the base panel type that has common\r\n * properties that all panels require.\r\n */\r\nexport interface Panel {\r\n /**\r\n * The panel identifier.\r\n */\r\n id: string;\r\n\r\n /**\r\n * The name of the panel.\r\n */\r\n name: string;\r\n\r\n /**\r\n * An array of sections.\r\n */\r\n sections: Section[];\r\n}\r\n\r\n/**\r\n * Represents a panel section that contains an\r\n * array of items of type T.\r\n */\r\nexport interface GenericSection extends Omit {\r\n /**\r\n * The list of items in the section.\r\n */\r\n items: T[];\r\n}\r\n\r\n/**\r\n * Represents a panel that contains an\r\n * array of generic sections with type T.\r\n */\r\nexport interface GenericPanel extends Omit {\r\n /**\r\n * The list of sections.\r\n */\r\n sections: GenericSection[];\r\n}\r\n\r\n/**\r\n * Represents a section in a panel that contains a list of game items.\r\n */\r\nexport type LayoutListSection = GenericSection;\r\n\r\n/**\r\n * Represents a panel that contains a section with a list of game items.\r\n */\r\nexport type LayoutListPanel = GenericPanel;\r\n\r\n/**\r\n * Represents a layout list.\r\n */\r\nexport interface LayoutList {\r\n /**\r\n * The value used as a key in a map. This value\r\n * should be alphanumeric and not contain any spaces.\r\n */\r\n key: string;\r\n\r\n /**\r\n * The title to give to this list, this value can be used to render\r\n * a heading on-screen, for example.\r\n */\r\n title: string;\r\n\r\n /**\r\n * The list of items in this list.\r\n */\r\n items: T[];\r\n}\r\n\r\n/**\r\n * Represents a collection of layout lists.\r\n */\r\nexport interface LayoutListCollection {\r\n /**\r\n * Contains one or more layout list.\r\n */\r\n lists: LayoutList[];\r\n}\r\n\r\n/**\r\n * Represents a collection of layout lists after\r\n * content population.\r\n */\r\nexport type LayoutListResultCollection = LayoutListCollection & { [key: string]: any; };\r\n\r\n/**\r\n * The configuration required to create the query that will be used\r\n * to generate the layout lists result.\r\n */\r\nexport interface LayoutListQueryConfiguration {\r\n /**\r\n * The local server id from server info, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. One or the other is required.\r\n */\r\n vpcId?: string;\r\n\r\n /**\r\n * The level of detail that should be included in the apps result set.\r\n */\r\n levelOfDetail: AppDataLevelOfDetail;\r\n\r\n /**\r\n * If specified, the set of media assets to return in the result set; Otherwise, if no value provided\r\n * or the value is{@link MediaAssetFlags.None}, then no media assets will be included.\r\n */\r\n mediaFlags?: MediaAssetFlags;\r\n}\r\n\r\n/**\r\n * Represents a set of flags for controlling\r\n * which media assets should be included in\r\n * a query result.\r\n */\r\nexport enum MediaAssetFlags {\r\n /**\r\n * Do not include any assets.\r\n */\r\n None = 0,\r\n\r\n /**\r\n * Include the key artwork.\r\n */\r\n Key = (1 << 0),\r\n\r\n /**\r\n * Include game artwork.\r\n */\r\n GameArtwork = (1 << 1),\r\n\r\n /**\r\n * Include screenshots.\r\n */\r\n Screenshots = (1 << 2),\r\n\r\n /**\r\n * Include feature artwork.\r\n */\r\n Feature = (1 << 3),\r\n\r\n /**\r\n * Include NVIDIA Ansel artwork.\r\n */\r\n Ansel = (1 << 4),\r\n\r\n /**\r\n * Include video trailers.\r\n */\r\n VideoTrailer = (1 << 5),\r\n\r\n /**\r\n * Include all available media assets.\r\n */\r\n All = Key | GameArtwork | Screenshots | Feature | Ansel | VideoTrailer\r\n}\r\n\r\n\r\n/**\r\n * The amount of data that should be included\r\n * in the app data.\r\n */\r\nexport enum AppDataLevelOfDetail {\r\n /**\r\n * Includes only the essential information required to\r\n * identify the app.\r\n */\r\n Bare,\r\n\r\n /**\r\n * Includes {@link AppDataLevelOfDetail.Bare} plus a short description\r\n * of the app, the developer, publisher and the ratings.\r\n */\r\n Minimal,\r\n\r\n /**\r\n * Includes {@link AppDataLevelOfDetail.Minimal} plus genres, supported\r\n * controls, game play modes and other useful metadata.\r\n */\r\n Default,\r\n\r\n /**\r\n * Includes all available fields.\r\n */\r\n Full\r\n}\r\n\r\n// TODO: because there are multiple levels of detail that can be returned, we\r\n// need to create types with just the fields being returned, to JS, this\r\n// doesn't matter, but when/if we decide to release a TS library or use\r\n// this in another TS project, it would be nice to have the appropriate\r\n// type checking; conditional types, however, can be quite complex so will\r\n// make this a P2 effort.\r\n//\r\n// Already started work on it but decided to back off and just use `any` types.\r\n// see Justin (juthomas@nvidia.com) for this initial work.\r\n\r\n/**\r\n * Represents the result returned from a {@link Catalog.getApps} call.\r\n */\r\nexport interface AppsResult {\r\n /**\r\n * True if there are more pages; otherwise, false.\r\n */\r\n hasMorePages: boolean;\r\n\r\n /**\r\n * The number of items in the current page.\r\n */\r\n itemCount: number;\r\n\r\n /**\r\n * The total number of items across all pages.\r\n */\r\n totalItemCount: number;\r\n\r\n /**\r\n * The list of items. The type will always be\r\n * a partial or full {@link AppData} object.\r\n */\r\n items: any[];\r\n}\r\n\r\n/**\r\n * The configuration required to create the query used to return\r\n * one or more apps.\r\n */\r\nexport interface AppsQueryConfiguration {\r\n /**\r\n * The local server id from server info, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. One or the other is required.\r\n */\r\n vpcId?: string;\r\n\r\n /**\r\n * One or more app uid's that should be included in the query. If not specified, then all\r\n * apps will be included.\r\n */\r\n apps?: string[],\r\n\r\n /**\r\n * One or more variant id's that should be included in the query. If not specified, then all\r\n * variants will be included.\r\n *\r\n * NOTE: Cannot be combined with the {@link AppsQueryConfiguration.apps} field.\r\n * NOTE: Limiting the variants that are returned could affect the validity of the parent fields.\r\n * Don't use the resulting data to display the parent application without an app store variant selected\r\n */\r\n variants?: number[],\r\n\r\n /**\r\n * If specified, will only include results from this store; Otherwise, all stores will be searched.\r\n * See {@link Catalog.getAppStores} for a list of possible values.\r\n */\r\n store?: string;\r\n\r\n /**\r\n * @deprecated\r\n * If specified, will only include results from this genre; Otherwise, all genres will be searched.\r\n * See {@link Catalog.getGenres} for a list of possible values.\r\n */\r\n genre?: string;\r\n\r\n /**\r\n * The level of detail that should be included in the apps result set.\r\n */\r\n levelOfDetail: AppDataLevelOfDetail;\r\n\r\n /**\r\n * If specified, the set of media assets to return in the result set; Otherwise, if no value provided\r\n * or the value is {@link MediaAssetFlags.None}, then no media assets will be included.\r\n */\r\n mediaFlags?: MediaAssetFlags;\r\n\r\n /**\r\n * If specified, the zero-based index of the page to return; Otherwise, the results will start\r\n * from the first page or item.\r\n */\r\n pageIndex?: number;\r\n\r\n /**\r\n * If specified, the number of items that should be returned; Otherwise, all items will be returned.\r\n */\r\n pageSize?: number;\r\n\r\n /**\r\n * If specified, the zero-based index of the item to return; Otherwise, the results will start\r\n * from the first page or item. If pageIndex and pageSize are both set, they take precedence.\r\n */\r\n startIndex?: number;\r\n\r\n /**\r\n * Filters the results of the query based on available criteria. See {@link QueryFilterBuilder}.\r\n */\r\n filters?: RecursivePartial;\r\n}\r\n\r\n/** @internal **/\r\nconst defaultCoreAppData: Omit = {\r\n uid: \"\",\r\n title: \"\",\r\n shortDescription: \"\",\r\n longDescription: \"\",\r\n contentRatings: defaultContentRating,\r\n developerName: \"\",\r\n gfnUrl: \"\",\r\n genres: [],\r\n images: defaultAppImageTable,\r\n keywords: [],\r\n maxLocalPlayers: 1,\r\n supportedControls: [],\r\n maxOnlinePlayers: 1,\r\n numberOfFakeControllers: 0,\r\n nvidiaFeatures: defaultNvidiaFeatures,\r\n osType: \"\",\r\n publisherName: \"\",\r\n shortName: \"\",\r\n sortName: \"\",\r\n type: AppType.Application,\r\n}\r\n\r\n/** @internal **/\r\nexport const GuestModeDefaultAppData: AppData = {\r\n ...defaultCoreAppData,\r\n variants: [{\r\n id: 0,\r\n appStore: \"\",\r\n displaysOwnRatingDuringGameplay: false,\r\n gfn: {},\r\n ...defaultCoreAppData\r\n }]\r\n};\r\n\r\n/** @internal **/\r\nexport interface Features {\r\n __typename: ConnectionTypeName;\r\n supported: boolean;\r\n displayProposition: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface AccountLinkingMetadata {\r\n supportedVariantIds: string[];\r\n connectValueProposition: string;\r\n isSupported: boolean;\r\n isRequired: boolean;\r\n label: string;\r\n}\r\n\r\n/** @internal **/\r\nexport enum OwnershipSyncStatus {\r\n Unknown = \"UNKNOWN\",\r\n SyncFailed = \"SYNC_FAILED\",\r\n SyncDenied = \"SYNC_DENIED\",\r\n SyncSuccess = \"SYNC_SUCCESS\",\r\n ProfileNotCreated = \"PROFILE_NOT_CREATED\"\r\n}\r\n\r\n/** @internal **/\r\nexport interface UserAccountStoreData {\r\n userAccount: UserAccountData;\r\n}\r\n\r\n/** @internal **/\r\nexport interface UserAccountData {\r\n storesData: StoresData[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface StoresData {\r\n store: string;\r\n accountLinkingData?: AccountLinkingData;\r\n}\r\n\r\n/** @internal **/\r\nexport interface AccountLinkingData {\r\n userDisplayName?: string;\r\n expiresIn?: string;\r\n userIdentifier?: string;\r\n accountSyncingData?: AccountSyncingData;\r\n}\r\n\r\n/** @internal **/\r\nexport interface AccountSyncingData {\r\n totalNumberOfSyncedGfnGames: number;\r\n syncState: OwnershipSyncStatus;\r\n syncDate: string;\r\n}\r\n\r\n/** @internal **/\r\nexport const OwnershipProviderIgnoreList: string[] = [\"UNKNOWN\", \"NONE\"];\r\n\r\n/** @internal **/\r\nexport const NoExpiryFlag = -1;\r\n\r\n/** @internal **/\r\nexport enum ConnectionTypeName {\r\n AccountGamesSyncing = \"AccountGamesSyncing\",\r\n AccountLinkingSso = \"AccountLinkingSso\"\r\n}\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Utils } from \"../core/utils\";\r\nimport { QueryFilterBuilder } from \"./catalog-filters\";\r\nimport { IQueryFilter } from \"./catalog-filters.types\";\r\nimport {\r\n AppDataKind,\r\n AppDataLevelOfDetail,\r\n AppsQueryConfiguration,\r\n MediaAssetFlags,\r\n LayoutListCollection,\r\n LayoutListQueryConfiguration,\r\n DoNotSendVpcId\r\n} from \"./catalog.types\";\r\n\r\n// This is used for introspection to determine if a given filter field corresponds\r\n// to an LCARS query clause type e.g. \"FilterClauseString\"\r\nconst gBuilder = new QueryFilterBuilder();\r\n\r\n/** @internal **/\r\nexport namespace CatalogQueries {\r\n\r\n interface FragmentDescriptor {\r\n name: string;\r\n text: string;\r\n include?: FragmentDescriptor[];\r\n }\r\n\r\n export namespace fragments {\r\n //=====================================================================\r\n // General Fragments\r\n //=====================================================================\r\n const GFN_FEATURES_NAME: string = \"GfnFeaturesFragment\";\r\n\r\n export const GFN_FEATURES: FragmentDescriptor = {\r\n name: GFN_FEATURES_NAME,\r\n text:\r\n `\r\n fragment ${GFN_FEATURES_NAME} on GfnSubscriptionFeature {\r\n __typename\r\n ... on GfnSubscriptionFeatureValue {\r\n key\r\n value\r\n }\r\n ... on GfnSubscriptionFeatureValueList {\r\n key\r\n values\r\n }\r\n }\r\n `\r\n }\r\n\r\n //=====================================================================\r\n // Image Fragments\r\n //=====================================================================\r\n const KEY_IMAGE_ASSETS_NAME: string = \"KeyImagesFragment\";\r\n const GAME_ARTWORK_IMAGE_ASSETS_NAME: string = \"GameArtworkImagesFragment\";\r\n const SCREENSHOT_IMAGE_ASSETS_NAME: string = \"ScreenshotImagesFragment\";\r\n const FEATURE_IMAGE_ASSETS_NAME: string = \"FeatureImagesFragment\";\r\n const ANSEL_IMAGE_ASSETS_NAME: string = \"AnselImagesFragment\";\r\n const VIDEO_TRAILER_ASSETS_NAME: string = \"VideoTrailerFragment\";\r\n\r\n export const KEY_IMAGE_ASSETS: FragmentDescriptor = {\r\n name: KEY_IMAGE_ASSETS_NAME,\r\n text:\r\n `fragment ${KEY_IMAGE_ASSETS_NAME} on AppImageTypeMap {\r\n keyIconUrl:KEY_ICON\r\n keyArtworkUrl:KEY_ART\r\n keyImageUrl:KEY_IMAGE\r\n }`\r\n };\r\n\r\n export const GAME_ARTWORK_IMAGE_ASSETS: FragmentDescriptor = {\r\n name: GAME_ARTWORK_IMAGE_ASSETS_NAME,\r\n text:\r\n `fragment ${GAME_ARTWORK_IMAGE_ASSETS_NAME} on AppImageTypeMap {\r\n gameIconUrl:GAME_ICON\r\n gameLogoUrl:GAME_LOGO\r\n gameBoxArtworkUrl:GAME_BOX_ART\r\n }`\r\n };\r\n\r\n export const SCREENSHOT_IMAGE_ASSETS: FragmentDescriptor = {\r\n name: SCREENSHOT_IMAGE_ASSETS_NAME,\r\n text:\r\n `fragment ${SCREENSHOT_IMAGE_ASSETS_NAME} on AppImageTypeMap {\r\n screenshotUrls:SCREENSHOTS\r\n screenshotThumbnailUrl:SCREENSHOT_THUMB\r\n }`\r\n };\r\n\r\n export const FEATURE_IMAGE_ASSETS: FragmentDescriptor = {\r\n name: FEATURE_IMAGE_ASSETS_NAME,\r\n text:\r\n `fragment ${FEATURE_IMAGE_ASSETS_NAME} on AppImageTypeMap {\r\n featureImageUrl:FEATURE_IMAGE\r\n heroImageUrl:HERO_IMAGE\r\n heroMarqueeImageUrl:MARQUEE_HERO_IMAGE\r\n tvBannerUrl:TV_BANNER\r\n }`\r\n };\r\n\r\n export const ANSEL_IMAGE_ASSETS: FragmentDescriptor = {\r\n name: ANSEL_IMAGE_ASSETS_NAME,\r\n text:\r\n `fragment ${ANSEL_IMAGE_ASSETS_NAME} on AppImageTypeMap {\r\n anselImageUrls:ANSEL_360_IMAGES\r\n }`\r\n };\r\n\r\n export const VIDEO_TRAILER_ASSETS: FragmentDescriptor = {\r\n name: VIDEO_TRAILER_ASSETS_NAME,\r\n text:\r\n `fragment ${VIDEO_TRAILER_ASSETS_NAME} on AppImageTypeMap {\r\n videoTrailerUrl:ANSEL_360_IMAGES\r\n }`\r\n };\r\n\r\n\r\n //=====================================================================\r\n // AppData Fragments\r\n //=====================================================================\r\n const BARE_APP_DATA_NAME: string = \"BareAppDataFragment\";\r\n const MINIMAL_APP_DATA_NAME: string = \"MinimalAppDataFragment\";\r\n const DEFAULT_APP_DATA_NAME: string = \"DefaultAppDataFragment\";\r\n const FULL_APP_DATA_NAME: string = \"FullAppDataFragment\";\r\n\r\n export const BARE_APP_DATA: FragmentDescriptor = {\r\n name: BARE_APP_DATA_NAME,\r\n text:\r\n `fragment ${BARE_APP_DATA_NAME} on AppDataType {\r\n uid:id\r\n title\r\n sortName\r\n }`\r\n };\r\n\r\n export const MINIMAL_APP_DATA: FragmentDescriptor = {\r\n name: MINIMAL_APP_DATA_NAME,\r\n include: [BARE_APP_DATA],\r\n text:\r\n `fragment ${MINIMAL_APP_DATA_NAME} on AppDataType {\r\n ...${BARE_APP_DATA.name}\r\n shortDescription\r\n developerName\r\n publisherName\r\n contentRatings {\r\n type\r\n categoryKey\r\n }\r\n }`\r\n };\r\n\r\n export const DEFAULT_APP_DATA: FragmentDescriptor = {\r\n name: DEFAULT_APP_DATA_NAME,\r\n include: [BARE_APP_DATA],\r\n text:\r\n `fragment ${DEFAULT_APP_DATA_NAME} on AppDataType {\r\n ...${BARE_APP_DATA.name}\r\n shortDescription\r\n longDescription\r\n contentRatings {\r\n type\r\n categoryKey\r\n contentDescriptorKeys\r\n interactiveElementKeys\r\n }\r\n developerName\r\n genres\r\n maxLocalPlayers\r\n maxOnlinePlayers\r\n nvidiaFeatures: nvidiaTech {\r\n ansel:ANSEL\r\n freestyle:FREESTYLE\r\n hdr:HDR\r\n highlights:HIGHLIGHTS\r\n ngx:NGX\r\n }\r\n publisherName\r\n supportedControls\r\n }`\r\n };\r\n\r\n export const FULL_APP_DATA: FragmentDescriptor = {\r\n name: FULL_APP_DATA_NAME,\r\n include: [DEFAULT_APP_DATA, MINIMAL_APP_DATA],\r\n text:\r\n `fragment ${FULL_APP_DATA_NAME} on AppDataType {\r\n ...${DEFAULT_APP_DATA.name}\r\n ...${MINIMAL_APP_DATA.name}\r\n numberOfFakeControllers\r\n gfnUrl: geForceUrl\r\n marqueeScrimPrimaryRGB {\r\n r\r\n g\r\n b\r\n }\r\n computedValues {\r\n allKeywords\r\n earliestReleaseDate\r\n earliestStreetDate\r\n }\r\n }`\r\n };\r\n\r\n //=====================================================================\r\n // VariantAppData Fragments\r\n //=====================================================================\r\n const BARE_VARIANT_APP_DATA_NAME: string = \"BareVariantAppDataFragment\";\r\n const MINIMAL_VARIANT_APP_DATA_NAME: string = \"MinimalVariantAppDataFragment\";\r\n const DEFAULT_VARIANT_APP_DATA_NAME: string = \"DefaultVariantAppDataFragment\";\r\n const FULL_VARIANT_APP_DATA_NAME: string = \"FullVariantAppDataFragment\";\r\n\r\n export const BARE_VARIANT_APP_DATA: FragmentDescriptor = {\r\n name: BARE_VARIANT_APP_DATA_NAME,\r\n include: [GFN_FEATURES],\r\n text:\r\n `fragment ${BARE_VARIANT_APP_DATA_NAME} on VariantDataType {\r\n id\r\n sortName\r\n gfn {\r\n status\r\n releaseDate\r\n isInLibrary\r\n timeAddedToLibrary\r\n features {\r\n ...${GFN_FEATURES.name}\r\n }\r\n }\r\n }`\r\n };\r\n\r\n export const MINIMAL_VARIANT_APP_DATA: FragmentDescriptor = {\r\n name: MINIMAL_VARIANT_APP_DATA_NAME,\r\n include: [BARE_VARIANT_APP_DATA],\r\n text:\r\n `fragment ${MINIMAL_VARIANT_APP_DATA_NAME} on VariantDataType {\r\n ...${BARE_VARIANT_APP_DATA.name}\r\n appStore\r\n developerName\r\n publisherName\r\n }`\r\n };\r\n\r\n export const DEFAULT_VARIANT_APP_DATA: FragmentDescriptor = {\r\n name: DEFAULT_VARIANT_APP_DATA_NAME,\r\n include: [BARE_VARIANT_APP_DATA],\r\n text:\r\n `fragment ${DEFAULT_VARIANT_APP_DATA_NAME} on VariantDataType {\r\n ...${BARE_VARIANT_APP_DATA.name}\r\n appStore\r\n developerName\r\n nvidiaFeatures: nvidiaTech {\r\n ansel:ANSEL\r\n freestyle:FREESTYLE\r\n hdr:HDR\r\n highlights:HIGHLIGHTS\r\n ngx:NGX\r\n }\r\n publisherName\r\n supportedControls\r\n }`\r\n };\r\n\r\n export const FULL_VARIANT_APP_DATA: FragmentDescriptor = {\r\n name: FULL_VARIANT_APP_DATA_NAME,\r\n include: [DEFAULT_VARIANT_APP_DATA, MINIMAL_VARIANT_APP_DATA],\r\n text:\r\n `fragment ${FULL_VARIANT_APP_DATA_NAME} on VariantDataType {\r\n ...${DEFAULT_VARIANT_APP_DATA.name}\r\n ...${MINIMAL_VARIANT_APP_DATA.name}\r\n displaysOwnRatingDuringGameplay\r\n }`\r\n };\r\n }\r\n\r\n /**\r\n * The GraphQL query to return all the app stores.\r\n *\r\n * @param $lang The language used to localize text. Default is en-US.\r\n */\r\n export const APP_STORE_ALL: string = `query ($lang:String!) {\r\n appStoreDefinitions (language:$lang) {\r\n name: store\r\n title: label\r\n iconUrl: smallImageUrl\r\n imageUrl: smallImageUrl\r\n features {\r\n __typename\r\n ... on AccountLinkingSso {\r\n displayProposition\r\n supported\r\n }\r\n ... on AccountGamesSyncing {\r\n displayProposition\r\n supported\r\n }\r\n }\r\n accountLinkingMetadata {\r\n supportedVariantIds\r\n isSupported\r\n isRequired\r\n }\r\n sortOrder\r\n }\r\n }`;\r\n\r\n\r\n /**\r\n * The GraphQL query to return all the genres.\r\n *\r\n * @param $lang The language used to localize text. Default is en-US.\r\n */\r\n export const GENRE_ALL: string = `query ($lang:String!) {\r\n genreDefinitions (language:$lang) {\r\n name: genre\r\n title: label\r\n iconUrl: smallImageUrl\r\n sortOrder\r\n }\r\n }`;\r\n\r\n\r\n /**\r\n * The GraphQL query to return zero or more of the rating systems\r\n * that are available.\r\n *\r\n * @param $lang The language used to localize text. Default is en-US.\r\n * @param $names An array of rating system names (e.g. ESRB, PEGI, etc..) or null\r\n * to return all rating systems; the default is null.\r\n */\r\n export const RATING_SYSTEM_SOME: string = `query ($lang:String! $names: [String!]) {\r\n ratingDefinitions(language:$lang systems:$names) {\r\n name: ratingSystem\r\n displayInterval\r\n ratings {\r\n key: categoryKey\r\n title: label\r\n description\r\n minimumAge\r\n smallImageUrl\r\n largeImageUrl\r\n }\r\n contentDescriptors {\r\n key\r\n title: label\r\n sortOrder\r\n }\r\n interactiveElements {\r\n name: key\r\n title: label\r\n sortOrder\r\n }\r\n }\r\n }`;\r\n\r\n\r\n /**\r\n * The GraphQL query to return zero or more of the layout list panels that\r\n * have been created.\r\n *\r\n * @param $lang The language used to localize text. Default is en-US.\r\n * @param $vpcId The server id\r\n * @param $names An array of panel names (e.g. MAIN, MARQUEE, etc..) or null\r\n * to return all panels; the default is null.\r\n */\r\n export const LAYOUT_LIST_PANEL_SOME: string = `query ($lang:String! $vpcId:String! $names:[String!]) {\r\n panels (language:$lang vpcId:$vpcId names:$names) {\r\n id\r\n name\r\n sections {\r\n id\r\n type\r\n title\r\n items {\r\n ...CommonItemFragment\r\n ...MarketingItemFragment\r\n ...GameItemFragment\r\n }\r\n }\r\n }\r\n }\r\n\r\n fragment CommonItemFragment on Item {\r\n type: __typename\r\n id\r\n }\r\n\r\n fragment MarketingItemFragment on MarketingItem {\r\n title\r\n body\r\n imageUrl: image\r\n action {\r\n title: label\r\n text: infoText\r\n url: uri\r\n }\r\n }\r\n\r\n fragment GameItemFragment on GameItem {\r\n app {\r\n ...AppDataFragment\r\n }\r\n }\r\n\r\n fragment ContentRatingFragment on ContentRating {\r\n kind: type\r\n key: categoryKey\r\n contentDescriptorKeys\r\n interactiveElementKeys\r\n }\r\n\r\n fragment ImagesFragment on AppImageTypeMap {\r\n keyIconUrl:KEY_ICON\r\n keyArtworkUrl:KEY_ART\r\n keyImageUrl:KEY_IMAGE\r\n gameIconUrl:GAME_ICON\r\n gameLogoUrl:GAME_LOGO\r\n gameBoxArtworkUrl:GAME_BOX_ART\r\n heroImageUrl:HERO_IMAGE\r\n featureImageUrl:FEATURE_IMAGE\r\n screenshotUrls:SCREENSHOTS\r\n screenshotThumbnailUrl:SCREENSHOT_THUMB\r\n videoTrailerUrl:VIDEO_TRAILER\r\n tvBannerUrl:TV_BANNER\r\n anselImageUrls:ANSEL_360_IMAGES\r\n heroMarqueeImageUrl:MARQUEE_HERO_IMAGE\r\n }\r\n\r\n fragment AppDataFragment on AppDataType {\r\n uid:id\r\n id:cmsId\r\n title\r\n contentRatings {\r\n ...ContentRatingFragment\r\n }\r\n genres\r\n developerName\r\n publisherName\r\n nvidiaFeatures: nvidiaTech {\r\n ansel:ANSEL\r\n freestyle:FREESTYLE\r\n hdr:HDR\r\n highlights:HIGHLIGHTS\r\n ngx:NGX\r\n }\r\n osType\r\n sortName\r\n shortName\r\n type\r\n images {\r\n ...ImagesFragment\r\n }\r\n variants {\r\n id\r\n title\r\n appStore\r\n type\r\n gfn {\r\n status\r\n releaseDate\r\n isInLibrary\r\n timeAddedToLibrary\r\n }\r\n publisherName\r\n sortName\r\n shortName\r\n osType\r\n }\r\n }`;\r\n\r\n /**\r\n * The GraphQL query to return User Account Store Info\r\n *\r\n */\r\n export const USER_ACCOUNT_STORE_DATA: string = `query {\r\n userAccount {\r\n storesData {\r\n store\r\n accountLinkingData {\r\n userDisplayName\r\n expiresIn\r\n userIdentifier\r\n accountSyncingData {\r\n totalNumberOfSyncedGfnGames\r\n syncState\r\n syncDate\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n\r\n\r\n function getFragmentText(descriptor: FragmentDescriptor): string {\r\n return getFragmentTextRecursive(descriptor, []);\r\n }\r\n\r\n function getFragmentTextRecursive(descriptor: FragmentDescriptor, trackIncludeList: string[]): string {\r\n // fragment must only be included once\r\n if (trackIncludeList.indexOf(descriptor.name) !== -1) {\r\n return \"\";\r\n }\r\n\r\n trackIncludeList.push(descriptor.name);\r\n\r\n let text: string = descriptor.text;\r\n\r\n // prepend other fragments that this one uses\r\n if (descriptor.include) {\r\n for (const dep of descriptor.include) {\r\n text = getFragmentTextRecursive(dep, trackIncludeList) + \"\\n\" + text;\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n function getFragmentDescriptor(lod: AppDataLevelOfDetail, kind: AppDataKind): FragmentDescriptor {\r\n switch (lod) {\r\n case AppDataLevelOfDetail.Bare:\r\n return (kind === AppDataKind.App ? fragments.BARE_APP_DATA : fragments.BARE_VARIANT_APP_DATA);\r\n case AppDataLevelOfDetail.Minimal:\r\n return (kind === AppDataKind.App ? fragments.MINIMAL_APP_DATA : fragments.MINIMAL_VARIANT_APP_DATA);\r\n case AppDataLevelOfDetail.Default:\r\n return (kind === AppDataKind.App ? fragments.DEFAULT_APP_DATA : fragments.DEFAULT_VARIANT_APP_DATA);\r\n case AppDataLevelOfDetail.Full:\r\n return (kind === AppDataKind.App ? fragments.FULL_APP_DATA : fragments.FULL_VARIANT_APP_DATA);\r\n }\r\n }\r\n\r\n function getMediaAssetFragments(flags: MediaAssetFlags): FragmentDescriptor[] {\r\n const descriptors: FragmentDescriptor[] = [];\r\n\r\n if (flags & MediaAssetFlags.Key) {\r\n descriptors.push(fragments.KEY_IMAGE_ASSETS);\r\n }\r\n\r\n if (flags & MediaAssetFlags.GameArtwork) {\r\n descriptors.push(fragments.GAME_ARTWORK_IMAGE_ASSETS);\r\n }\r\n\r\n if (flags & MediaAssetFlags.Screenshots) {\r\n descriptors.push(fragments.SCREENSHOT_IMAGE_ASSETS);\r\n }\r\n\r\n if (flags & MediaAssetFlags.Feature) {\r\n descriptors.push(fragments.FEATURE_IMAGE_ASSETS);\r\n }\r\n\r\n if (flags & MediaAssetFlags.Ansel) {\r\n descriptors.push(fragments.ANSEL_IMAGE_ASSETS);\r\n }\r\n\r\n if (flags & MediaAssetFlags.VideoTrailer) {\r\n descriptors.push(fragments.VIDEO_TRAILER_ASSETS);\r\n }\r\n\r\n return descriptors;\r\n }\r\n\r\n function createAppsQueryStatement(config: AppsQueryConfiguration, extraVars: Record): string {\r\n let query: string = \"query($lang:String!\";\r\n\r\n if (config.vpcId && config.vpcId != DoNotSendVpcId) {\r\n query += \" $vpcId:String\";\r\n }\r\n\r\n if (config.startIndex) {\r\n query += \" $pageCursor:String!\";\r\n }\r\n\r\n if (config.pageSize) {\r\n query += \" $pageSize:Int!\";\r\n }\r\n\r\n if (config.store) {\r\n query += \" $store:String!\"\r\n }\r\n\r\n if (config.variants && config.variants.length > 0) {\r\n query += \" $ids:[Int!]!\";\r\n } else if (config.apps && config.apps.length > 0) {\r\n query += \" $ids:[String!]!\";\r\n }\r\n\r\n for (const [variableName, variableData] of Object.entries(extraVars)) {\r\n query += ` \\$${variableName}:${variableData.type}!`;\r\n }\r\n\r\n query += \")\";\r\n return query;\r\n }\r\n\r\n function createFilterClauseStatement(key: string, clause: Record, keyPath: string, filterClauseType: string, bindVars: boolean, varsOut: Record = {}): string {\r\n if (bindVars) {\r\n return `${key}: ${JSON.stringify(clause)}`;\r\n } else {\r\n varsOut[keyPath] = {\r\n type: filterClauseType,\r\n value: clause,\r\n };\r\n return `${key}: \\$${keyPath}`;\r\n }\r\n }\r\n\r\n function createFiltersStatements(path: string, filters: any, bindVars: boolean, varsOut: Record = {}): string {\r\n let statements: string[] = [];\r\n\r\n const entries = Object.entries(filters);\r\n for (const [key, value] of entries) {\r\n if (typeof value !== \"object\" || Object.keys(value ?? {}).length == 0) {\r\n continue;\r\n }\r\n\r\n const keyPath = path ? `${path}_${key}` : key;\r\n\r\n const keyPathDotNotation = (keyPath.replace(new RegExp(\"_\", \"g\"), \".\"));\r\n const filter: IQueryFilter = value as IQueryFilter;\r\n const filterClauseType = Utils.object.dereference(gBuilder, keyPathDotNotation)?.type\r\n\r\n if (filterClauseType) {\r\n delete (filter as any)._type;\r\n if (Object.keys(filter).length > 0) {\r\n statements.push(createFilterClauseStatement(key, filter, keyPath, filterClauseType, bindVars, varsOut));\r\n }\r\n } else {\r\n statements.push(`${key}: { ${createFiltersStatements(`${keyPath}`, filter, bindVars, varsOut)} }`)\r\n }\r\n }\r\n\r\n if (statements.length > 0) {\r\n return statements.join(\", \");\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n function createAppsStatement(config: AppsQueryConfiguration, bindVars: boolean, parentFragment: FragmentDescriptor, variantFragment?: FragmentDescriptor, imageFragments?: FragmentDescriptor[]): [string, { [key: string]: any }] {\r\n let text: string = \"apps(language:$lang\";\r\n let newVars: Record = {};\r\n\r\n if (config.vpcId && config.vpcId !== DoNotSendVpcId) {\r\n text = text + \" vpcId:$vpcId\";\r\n }\r\n\r\n if (config.startIndex) {\r\n\r\n if (bindVars) {\r\n if (config.startIndex) {\r\n const cursor: string = Utils.base64.encode(config.startIndex.toString());\r\n text += ` after:\\\"${cursor}\\\"`;\r\n }\r\n }\r\n else {\r\n text += \" after:$pageCursor\";\r\n }\r\n }\r\n\r\n if (config.pageSize) {\r\n text += ` first:${bindVars ? config.pageSize : \"$pageSize\"}`;\r\n }\r\n\r\n if (config.store) {\r\n text += ` appStore:${bindVars ? \"\\\"\" + config.store + \"\\\"\" : \"$store\"}`;\r\n }\r\n\r\n if (config.filters) {\r\n const filterStatement = createFiltersStatements(\"\", config.filters, false, newVars);\r\n if (filterStatement) {\r\n text += ` filters: { ${filterStatement} }`\r\n }\r\n }\r\n\r\n if (config.variants && config.variants.length > 0) {\r\n text += ` variantIds:${bindVars ? \"[\" + config.variants.join(\",\") + \"]\" : \"$ids\"}`;\r\n } else if (config.apps && config.apps.length > 0) {\r\n text += ` appIds:${bindVars ? \"[\" + config.apps.map((v) => \"\\\"\" + v + \"\\\"\").join(\",\") + \"]\" : \"$ids\"}`;\r\n }\r\n\r\n text += \") {\";\r\n\r\n text += \" pageInfo { hasNextPage }\";\r\n text += \" numberReturned\";\r\n\r\n // add the items collection and if needed, the variants collection\r\n text += ` items { ...${parentFragment.name}`;\r\n\r\n if (imageFragments && imageFragments.length > 0) {\r\n text += \" images {\"\r\n\r\n for (const frag of imageFragments) {\r\n text += ` ...${frag.name}`;\r\n }\r\n\r\n text += \" }\";\r\n }\r\n\r\n if (variantFragment) {\r\n text += ` variants { ...${variantFragment.name} }`\r\n }\r\n text += \" }}\";\r\n\r\n return [text, newVars];\r\n }\r\n\r\n /*\r\n The `buildAppsQuery` creates a query resulting in the following (pseudo-ish GraphQL)\r\n query ($lang:String! $vpcId:String $ids:[String | Int!] $store:String $pageSize:Int $pageCursor:String) {\r\n apps (language:$lang vpcId:$vpcId (appIds|variantIds):$ids appStore:$store first:$pageSize after:$pageCursor) {\r\n pageInfo {\r\n hasNextPage\r\n }\r\n numberReturned\r\n items {\r\n ...APP_DATA_FRAGMENT_NAME\r\n\r\n # the variants field is only included if level of detail for it is provided\r\n variants {\r\n ...VARIANT_DATA_FRAGMENT_NAME\r\n }\r\n }\r\n }\r\n }\r\n */\r\n\r\n export function buildAppsQuery(config: AppsQueryConfiguration): [string, Record] {\r\n const includeMedia: boolean = (config.mediaFlags !== undefined && config.mediaFlags !== MediaAssetFlags.None);\r\n const parentFragment: FragmentDescriptor = getFragmentDescriptor(config.levelOfDetail, AppDataKind.App);\r\n const variantFragment: FragmentDescriptor = getFragmentDescriptor(config.levelOfDetail, AppDataKind.Variant);\r\n const mediaFragments: FragmentDescriptor[] = includeMedia ? getMediaAssetFragments(config.mediaFlags!) : [];\r\n\r\n // create the `query` and `apps` statments (e.g. the variable defs and argument inputs)\r\n const [appsStatement, newVars]: [string, { [key: string]: any }] = createAppsStatement(config, false, parentFragment, variantFragment, mediaFragments);\r\n const queryStatement: string = createAppsQueryStatement(config, newVars);\r\n\r\n // create the full query text\r\n let query: string = `${queryStatement}{ ${appsStatement} } `;\r\n query += getFragmentText(variantFragment);\r\n\r\n // finally, include the fragments\r\n query += getFragmentText(parentFragment);\r\n\r\n if (includeMedia) {\r\n query += getFragmentText({\r\n name: \"\", text: \"\", // dummy fragment\r\n include: mediaFragments\r\n })\r\n }\r\n\r\n return [query, newVars];\r\n }\r\n\r\n export function buildLayoutListQuery(listCollection: LayoutListCollection, config: LayoutListQueryConfiguration): string {\r\n const appsConfig: AppsQueryConfiguration = {\r\n levelOfDetail: config.levelOfDetail,\r\n mediaFlags: config.mediaFlags\r\n };\r\n\r\n if (config.vpcId && config.vpcId !== DoNotSendVpcId) {\r\n appsConfig[\"vpcId\"] = config.vpcId;\r\n }\r\n\r\n const includeMedia: boolean = (appsConfig.mediaFlags !== undefined && appsConfig.mediaFlags !== MediaAssetFlags.None);\r\n const parentFragment: FragmentDescriptor = getFragmentDescriptor(appsConfig.levelOfDetail, AppDataKind.App);\r\n const variantFragment: FragmentDescriptor = getFragmentDescriptor(appsConfig.levelOfDetail, AppDataKind.Variant);\r\n const mediaFragments: FragmentDescriptor[] = includeMedia ? getMediaAssetFragments(appsConfig.mediaFlags!) : [];\r\n const queryStatement: string = createAppsQueryStatement(appsConfig, {});\r\n let appsStatements: string = \"\";\r\n\r\n for (const list of listCollection.lists) {\r\n // update the configuration app id's\r\n appsConfig.apps = list.items;\r\n\r\n // generate the apps statement for this list\r\n const [appsStatement, _] = createAppsStatement(appsConfig, true, parentFragment, variantFragment, mediaFragments);\r\n\r\n // append the statement to the list (e.g. : )\r\n appsStatements += `${list.key}: ${appsStatement} `;\r\n }\r\n\r\n // create the full query text\r\n let query: string = `${queryStatement}{ ${appsStatements} } `;\r\n query += getFragmentText(variantFragment);\r\n\r\n // finally, include the fragments\r\n query += getFragmentText(parentFragment);\r\n\r\n if (includeMedia) {\r\n query += getFragmentText({\r\n name: \"\", text: \"\", // dummy fragment\r\n include: mediaFragments\r\n })\r\n }\r\n\r\n return query;\r\n }\r\n}","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { AppStoreDefinition, ConnectionTypeName, NoExpiryFlag, StoresData } from \"./catalog.types\";\r\n\r\n/** @internal */\r\nexport class AccountProvider {\r\n private mStoreName: string;\r\n private mAccountLinkedTime: Nullable = null;\r\n private mEnabledGamesList: string[] = [];\r\n private mDigitalStoreMetadata: AppStoreDefinition;\r\n private mUserAccountData: StoresData;\r\n\r\n private get expirationTime(): Nullable {\r\n let expiration: Nullable = null;\r\n if (this.mUserAccountData && this.mUserAccountData.accountLinkingData && this.mUserAccountData.accountLinkingData.expiresIn) {\r\n const expiresIn: number = parseInt(this.mUserAccountData.accountLinkingData.expiresIn, 10);\r\n expiration = (expiresIn !== NoExpiryFlag) ? this.getExpirationFromNow(expiresIn * 1000) : null;\r\n if (!expiration || parseInt(expiration as any, 10) === NoExpiryFlag) {\r\n expiration = null;\r\n }\r\n }\r\n return expiration;\r\n }\r\n\r\n public get gamesList(): string[] {\r\n return this.mEnabledGamesList;\r\n }\r\n\r\n public get digitalStoreInfo(): AppStoreDefinition {\r\n return this.mDigitalStoreMetadata;\r\n }\r\n\r\n public get storeData(): StoresData {\r\n return this.mUserAccountData;\r\n }\r\n\r\n public get isAccountSyncingSupported(): boolean {\r\n if (!this.digitalStoreInfo?.features) {\r\n return false;\r\n }\r\n return this.digitalStoreInfo.features\r\n .filter(feature => feature.__typename === ConnectionTypeName.AccountGamesSyncing)\r\n .some(feature => feature.supported === true);\r\n }\r\n\r\n public get isAccountLinkingSupported(): boolean {\r\n if (!this.digitalStoreInfo?.features) {\r\n return false;\r\n }\r\n return this.digitalStoreInfo?.features\r\n .filter(feature => feature.__typename === ConnectionTypeName.AccountLinkingSso)\r\n .some(feature => feature.supported === true);\r\n }\r\n\r\n public set userAccountInfo(userAcountData: StoresData) {\r\n this.mUserAccountData = userAcountData;\r\n this.updateLinkTime();\r\n }\r\n\r\n public get isExpired(): boolean {\r\n if (!this.isAccountLinkingSupported || this.expirationTime === null) {\r\n // Ownership sync and certain account links don't expire\r\n return false;\r\n }\r\n const expirationTime: number = this.expirationTime.getTime();\r\n return expirationTime === 0 ? true : expirationTime < Date.now();\r\n }\r\n\r\n public get isConnected(): boolean {\r\n return (this.storeData?.store.length ?? 0) > 0 ;\r\n }\r\n\r\n public get isAccountLinkingSsoAvailable(): boolean {\r\n return this.isAccountLinkingSupported;\r\n }\r\n\r\n public get isAccountLinked(): boolean {\r\n return this.isAccountLinkingSsoAvailable && this.isConnected;\r\n }\r\n\r\n constructor(\r\n storeName: string,\r\n enabledGamesList: string[] = [],\r\n digitalStoreMetadata: AppStoreDefinition,\r\n userAccountData: StoresData\r\n ) {\r\n this.updateLinkTime();\r\n this.mStoreName = storeName;\r\n this.mEnabledGamesList = Object.assign([], enabledGamesList);\r\n this.mDigitalStoreMetadata = digitalStoreMetadata;\r\n this.mUserAccountData = userAccountData;\r\n }\r\n\r\n public updateLinkTime(): void {\r\n this.mAccountLinkedTime = Date.now();\r\n }\r\n\r\n private getExpirationFromNow(expiration: number): Nullable {\r\n if (typeof expiration !== \"number\" || expiration === NoExpiryFlag) {\r\n return null;\r\n }\r\n const expires: Date = Utils.date.add(this.mAccountLinkedTime ?? Date.now(), expiration);\r\n return expires;\r\n }\r\n}\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { I18N } from \"../i18n/i18n\";\r\nimport { Auth } from \"../idm/auth\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { ServiceUseCase } from \"../rest/rest-client.types\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { CatalogQueries } from \"./catalog-queries\";\r\nimport {\r\n AppDataLevelOfDetail,\r\n AppsQueryConfiguration,\r\n AppsResult,\r\n AppStoreDefinition,\r\n ConnectionTypeName,\r\n ContentRatingSystemDefinition,\r\n GenreDefinition,\r\n MediaAssetFlags,\r\n LayoutListPanel,\r\n LayoutListSection,\r\n LayoutListCollection,\r\n LayoutListQueryConfiguration,\r\n LayoutListResultCollection,\r\n LayoutList,\r\n OwnershipProviderIgnoreList,\r\n StoresData,\r\n SectionType,\r\n AppData,\r\n LayoutListGameItem,\r\n GfnStatusInfo,\r\n GfnStatus,\r\n DoNotSendVpcId,\r\n Features,\r\n UserAccountStoreData\r\n} from \"./catalog.types\";\r\nimport { QueryFilterBuilder } from \"./catalog-filters\";\r\nimport { AccountProvider } from \"./account-provider\";\r\n\r\nconst logger = Logging.getLogger(\"catalog/catalog\");\r\n\r\n// For apps that return a single variant at runtime, client MUST display certain\r\n// variant fields, not the parent fields.\r\n// See https://docs.google.com/spreadsheets/d/1tQAAhVyaNkKX9WMAjeSqiF4lS4i8RgaivJt3lkVvSyU/edit#gid=0\r\nconst SINGLE_CHILD_FIELD_OVERRIDES = [\"developerName\", \"publisherName\", \"sortName\", \"supportedControls\", \"nvidiaFeatures\"];\r\n\r\nconst DEFAULT_APPS_CONFIGURATION: AppsQueryConfiguration = {\r\n levelOfDetail: AppDataLevelOfDetail.Default,\r\n mediaFlags: MediaAssetFlags.Key,\r\n filters: {},\r\n pageSize: 50\r\n};\r\n\r\nconst DEFAULT_LAYOUT_LIST_CONFIGURATIOJN: LayoutListQueryConfiguration = {\r\n levelOfDetail: AppDataLevelOfDetail.Minimal,\r\n mediaFlags: MediaAssetFlags.Key | MediaAssetFlags.Feature\r\n};\r\n\r\n/**\r\n * Access to the game catalog and users library.\r\n *\r\n * See the [Catalog Example](../guides/catalog-example.html) for more information.\r\n */\r\nexport class Catalog implements IInitializable {\r\n\r\n /**\r\n * Gets a default query configuration that can be used when making a call to the {@link getApps} API.\r\n */\r\n public static get DefaultAppsQueryConfiguration(): AppsQueryConfiguration {\r\n // return a clone so the default is not modified\r\n return Utils.object.clone(DEFAULT_APPS_CONFIGURATION);\r\n }\r\n\r\n /**\r\n * Gets a default query configuration that can be used when making a call to the {@link populateLayoutLists} API.\r\n */\r\n public static get DefaultLayoutListQueryConfiguration(): LayoutListQueryConfiguration {\r\n // return a clone so the default is not modified\r\n return Utils.object.clone(DEFAULT_LAYOUT_LIST_CONFIGURATIOJN);\r\n }\r\n\r\n private readonly mAuth: Auth;\r\n private readonly mRestClient: RestClient;\r\n private readonly mI18N: I18N;\r\n private mConfiguration!: Configuration;\r\n private mSettings!: Settings;\r\n private mAccountConnectionsInitialized: boolean = false;\r\n private mAccountLinkedVariants: Map = new Map();\r\n private mAccountProviders: Map = new Map();\r\n\r\n /** @internal **/\r\n constructor(auth: Auth, restClient: RestClient, i18n: I18N) {\r\n this.mAuth = auth;\r\n this.mRestClient = restClient;\r\n this.mI18N = i18n;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mConfiguration = context.configuration;\r\n this.mSettings = context.settings;\r\n }\r\n\r\n /**\r\n * Gets a list of the supported app stores.\r\n *\r\n * @returns\r\n * An array that contains app store information.\r\n *\r\n * @async\r\n */\r\n public async getAppStores(): Promise {\r\n const result: any = await this.runQuery(CatalogQueries.APP_STORE_ALL, ServiceUseCase.LCARSGetAppStores);\r\n return result.appStoreDefinitions as AppStoreDefinition[];\r\n }\r\n\r\n /**\r\n * Gets a list of available genres.\r\n *\r\n * See the [Metadata Example](../guides/metadata-example.html) for more information.\r\n *\r\n * @returns\r\n * An array that contains genre information.\r\n *\r\n * @async\r\n */\r\n public async getGenres(): Promise {\r\n const result: any = await this.runQuery(CatalogQueries.GENRE_ALL, ServiceUseCase.LCARSGetGenres);\r\n return result.genreDefinitions as GenreDefinition[];\r\n }\r\n\r\n /**\r\n * Gets a list of possible statuses that the game can be in.\r\n *\r\n * @returns\r\n * An array that contains GFN status information\r\n *\r\n * @async\r\n */\r\n public async getGfnStatuses(): Promise {\r\n return [{\r\n status: GfnStatus.Available\r\n }, {\r\n status: GfnStatus.Patching,\r\n displayText: await this.mI18N.translate(\"streamer.fencedStatus.patchingStatus\"),\r\n supplementalDisplayText: await this.mI18N.translate(\"streamer.fencedStatus.patchingSupplementalText\")\r\n }, {\r\n status: GfnStatus.ServerMaintenance,\r\n displayText: await this.mI18N.translate(\"streamer.fencedStatus.offlineStatus\"),\r\n supplementalDisplayText: await this.mI18N.translate(\"streamer.fencedStatus.offlineSupplementalText\")\r\n }, {\r\n status: GfnStatus.Unknown\r\n }];\r\n }\r\n\r\n /**\r\n * Gets a list of supported rating systems.\r\n *\r\n * See the [Metadata Example](../guides/metadata-example.html) for more information.\r\n *\r\n * @param names\r\n * One or more rating system names to include. Omit to return all rating systems.\r\n *\r\n * @returns\r\n * An array of rating system information.\r\n *\r\n * @async\r\n */\r\n public async getRatingSystems(names?: string[]): Promise {\r\n const result: any = await this.runQuery(CatalogQueries.RATING_SYSTEM_SOME, ServiceUseCase.LCARSGetRatingsInfo, {\r\n names: names || null\r\n });\r\n return result.ratingDefinitions as ContentRatingSystemDefinition[];\r\n }\r\n\r\n /**\r\n * Gets a layout list (or Panel) that can be used to render a dynamic section (e.g. Marquee).\r\n *\r\n * @param name\r\n * The name of the panel to return.\r\n *\r\n * @param vpcId\r\n * The zone vpcId, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. The vpcId is required.\r\n *\r\n * @returns\r\n * The panel if found; otherwise, null.\r\n *\r\n * @internal\r\n * @async\r\n */\r\n public async getLayoutList(name: string, vpcId?: string): Promise> {\r\n const result: any[] = await this.getLayoutLists([name], vpcId);\r\n\r\n if (result.length > 0) {\r\n return result[0];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets a list of available layout lists (or panels).\r\n *\r\n * @param names\r\n * One or more names that should be included in the list.\r\n *\r\n * @param vpcId\r\n * The zone vpcId, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. The vpcId is required.\r\n *\r\n * @returns\r\n * An array of panels.\r\n *\r\n * @internal\r\n * @async\r\n */\r\n public async getLayoutLists(names?: string[], vpcId?: string): Promise {\r\n vpcId = vpcId || this.mSettings.vpcId;\r\n\r\n if (!vpcId) {\r\n throw new APIError(APIErrorCode.MissingVpcId);\r\n }\r\n\r\n const variables: Record = {\r\n vpcId: vpcId\r\n };\r\n\r\n if (names) {\r\n variables[\"names\"] = names;\r\n }\r\n\r\n const result: any = await this.runQuery(CatalogQueries.LAYOUT_LIST_PANEL_SOME, ServiceUseCase.LCARSLayoutGetSections, variables);\r\n\r\n const panels = result.panels as LayoutListPanel[];\r\n for (const panel of panels) {\r\n for (const section of panel.sections) {\r\n for (const item of section.items) {\r\n if (item[\"app\"]) {\r\n item[\"app\"] = this.transformAppData(item[\"app\"]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return panels;\r\n }\r\n\r\n /**\r\n * Gets the layout list (panel) that is defined as MAIN.\r\n *\r\n * @param vpcId\r\n * The zone vpcId, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. The vpcId is required.\r\n *\r\n * @returns\r\n * The main panel, if found; otherwise, null.\r\n *\r\n * @internal\r\n * @async\r\n */\r\n public async getMainLayoutList(vpcId?: string): Promise> {\r\n return this.getLayoutList(\"MAIN\", vpcId);\r\n }\r\n\r\n /**\r\n * Gets the users library.\r\n *\r\n * See the [Library Example](../guides/user-library-example.html) for more information.\r\n *\r\n * @param vpcId\r\n * The zone vpcId, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. The vpcId is required.\r\n *\r\n * @returns\r\n * If the user has a library, returns the library section; otherwise, null if\r\n * there is no items in the library yet.\r\n *\r\n * @async\r\n */\r\n public async getMyLibrary(vpcId?: string): Promise> {\r\n const myLibraryQuery: AppsQueryConfiguration = {\r\n mediaFlags: MediaAssetFlags.All,\r\n levelOfDetail: AppDataLevelOfDetail.Full,\r\n filters: {\r\n variants: {\r\n gfn: {\r\n isInLibrary: { equals: true }\r\n }\r\n }\r\n }\r\n };\r\n\r\n const response = await this.getAppsInternal(myLibraryQuery);\r\n const mappedItems: LayoutListGameItem[] = response.items.map((item: AppData): LayoutListGameItem => {\r\n return {\r\n id: item.uid,\r\n app: this.transformAppData(item)\r\n };\r\n });\r\n\r\n return {\r\n id: \"my-library\",\r\n title: \"My Library\",\r\n type: SectionType.MyLibrary,\r\n items: mappedItems,\r\n flags: []\r\n };\r\n }\r\n\r\n /**\r\n * Gets a list of newly released games. This returns a list of games released on\r\n * GFN since the previous Thursday.\r\n *\r\n * @param config\r\n * The query configuration used to determine which apps should be returned.\r\n *\r\n * @returns\r\n * An {@link AppsResult} that contains the list of items returned.\r\n *\r\n * @async\r\n */\r\n public async getNewReleases(config: AppsQueryConfiguration = DEFAULT_APPS_CONFIGURATION): Promise {\r\n const queryConfig: any = Utils.object.clone(config);\r\n const startDate: Date = Utils.date.getLastDay(Utils.date.DayOfWeek.Monday);\r\n const endDate: Date = Utils.date.getNextDay(Utils.date.DayOfWeek.Friday);\r\n\r\n queryConfig.filters = queryConfig.filters ?? {};\r\n queryConfig.filters.variants = queryConfig.filters.variants ?? {};\r\n queryConfig.filters.variants.gfn = queryConfig.filters.variants.gfn ?? {};\r\n queryConfig.filters.variants.gfn.marketingDate = {\r\n between: {\r\n start: Utils.date.toUTC(startDate),\r\n end: Utils.date.toUTC(endDate)\r\n }\r\n }\r\n\r\n logger.info(`New releases range (utc): ${startDate} to ${endDate}`);\r\n\r\n return this.getAppsInternal(queryConfig);\r\n }\r\n\r\n /**\r\n * Gets a list of apps (games) available.\r\n *\r\n * @param config\r\n * The query configuration used to determine which apps should be returned.\r\n *\r\n * @returns\r\n * An {@link AppsResult} that contains the list of items returned.\r\n *\r\n * @async\r\n */\r\n public async getApps(config: AppsQueryConfiguration = DEFAULT_APPS_CONFIGURATION): Promise {\r\n return this.getAppsInternal(config);\r\n }\r\n\r\n /**\r\n * Populates a layout list with app metadata based on the query configuration.\r\n *\r\n * See [Layout Lists](../guides/layout-lists.html) for\r\n * more information.\r\n *\r\n * @param layoutList\r\n * The layout list that should be used to populate the result.\r\n *\r\n * @param config\r\n * The query configuration.\r\n *\r\n * @returns\r\n * A {@link LayoutListResultCollection} that is also a map with the results.\r\n *\r\n * @async\r\n */\r\n public async populateLayoutLists(layoutList: LayoutListCollection, config: LayoutListQueryConfiguration = DEFAULT_LAYOUT_LIST_CONFIGURATIOJN): Promise {\r\n if (!layoutList || layoutList.lists.length === 0) {\r\n throw new APIError(APIErrorCode.MissingLayoutList, \"Must provide at least one layout list.\");\r\n }\r\n\r\n const vpcId: string = config.vpcId || this.mSettings.vpcId;\r\n\r\n if (!vpcId) {\r\n throw new APIError(APIErrorCode.MissingVpcId);\r\n }\r\n\r\n // use a copy of the configuration so we don't update the original one\r\n const configCopy: LayoutListQueryConfiguration = Utils.object.clone(config);\r\n configCopy.vpcId = vpcId;\r\n\r\n if (!configCopy.levelOfDetail) {\r\n configCopy.levelOfDetail = DEFAULT_LAYOUT_LIST_CONFIGURATIOJN.levelOfDetail;\r\n }\r\n\r\n const query: string = CatalogQueries.buildLayoutListQuery(layoutList, configCopy);\r\n const variables: Record = {\r\n vpcId: configCopy.vpcId\r\n };\r\n\r\n const result: any = await this.runQuery(query, ServiceUseCase.LCARSGetLayout, variables);\r\n const populatedLists: LayoutListResultCollection = {\r\n lists: []\r\n };\r\n\r\n for (const ll of layoutList.lists) {\r\n if (ll.key in result) {\r\n const resultItem: any = result[ll.key];\r\n const layoutList: LayoutList = {\r\n key: ll.key,\r\n title: ll.title,\r\n items: resultItem.items.map((app: any) => this.transformAppData(app))\r\n };\r\n\r\n // allow access to the list via array lookup and by key\r\n populatedLists.lists.push(layoutList);\r\n populatedLists[ll.key] = layoutList;\r\n }\r\n }\r\n\r\n return populatedLists;\r\n }\r\n\r\n /**\r\n * Creates a query filter builder, which can be used to fill out app query filters.\r\n *\r\n * See {@link QueryFilterBuilder} and {@link AppsQueryConfiguration.filters}\r\n *\r\n * @returns\r\n */\r\n public createFilterBuilder(): QueryFilterBuilder {\r\n return new QueryFilterBuilder();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Checks if Account Linking is enabled for given app and store.\r\n *\r\n * @returns\r\n * true: App requires account linking and is connected\r\n * UserAccountNotLinked Exception is thrown if user account is not linked to app (or expired)\r\n * that requires account linking\r\n * InvalidState exception is thrown if account info isn't first updated using initializeAccountConnections API.\r\n *\r\n * false: App does not require account linking\r\n */\r\n public getAccountLinkStatus(appStore: string, cmsId: number): boolean {\r\n if (!this.mAccountConnectionsInitialized) {\r\n throw new APIError(APIErrorCode.InvalidState, \"User Account Connections not initialized\");\r\n }\r\n const cmsIdString: string = cmsId.toString();\r\n const accountProvider: AccountProvider | undefined = this.mAccountProviders.get(appStore);\r\n if (!accountProvider || !accountProvider.isAccountLinkingSupported) {\r\n if (this.doesRequireAccountLinking(appStore, cmsIdString)) {\r\n throw new APIError(APIErrorCode.UserAccountNotLinked, `app ${cmsId} requires ${appStore} account linking`);\r\n }\r\n return false;\r\n }\r\n if (!accountProvider.gamesList?.length || accountProvider.gamesList.includes(cmsIdString))\r\n {\r\n logger.info(`Account linking was enabled for ${cmsIdString}, connected:${accountProvider.isConnected} expired:${accountProvider.isExpired}`);\r\n if (!accountProvider.isConnected || accountProvider.isExpired) {\r\n throw new APIError(APIErrorCode.UserAccountNotLinked, `User Account not Linked for ${cmsId} (${appStore})`);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private doesRequireAccountLinking(appStore: string, cmsIdString: string): boolean {\r\n return this.mAccountLinkedVariants.has(appStore) && (this.mAccountLinkedVariants.get(appStore)?.includes(cmsIdString) ?? false);\r\n }\r\n\r\n private async getUserAccountStoreData(): Promise {\r\n const result: any = await this.runQuery(CatalogQueries.USER_ACCOUNT_STORE_DATA, ServiceUseCase.LCARSGetUserAccountStores);\r\n return result as UserAccountStoreData;\r\n }\r\n\r\n private async getAppsInternal(config: AppsQueryConfiguration): Promise {\r\n const vpcId: string = config.vpcId || this.mSettings.vpcId;\r\n\r\n if (!vpcId) {\r\n throw new APIError(APIErrorCode.MissingVpcId);\r\n }\r\n\r\n if (config.apps && config.variants) {\r\n throw new APIError(APIErrorCode.InvalidParameter, \"Must provide either an apps or variants in the configuration; not both.\");\r\n }\r\n\r\n if (!Utils.isDefined(config.levelOfDetail)) {\r\n config.levelOfDetail = DEFAULT_APPS_CONFIGURATION.levelOfDetail;\r\n }\r\n\r\n if (Utils.isDefined(config.pageIndex) && Utils.isDefined(config.pageSize)) {\r\n if (Utils.isDefined(config.startIndex)) {\r\n logger.warn(\"getApps: AppsQueryConfiguration has both startIndex and pageIndex set. pageIndex takes precedence\");\r\n }\r\n config.startIndex = config.pageIndex! * config.pageSize!;\r\n }\r\n\r\n if (config.genre) {\r\n config.filters = Utils.object.deepmerge(config.filters ?? {}, {\r\n genres: {\r\n has: config.genre\r\n }\r\n })\r\n };\r\n\r\n // must provide the vpcid in the config object so that the variable is\r\n // included in the query statement\r\n config.vpcId = vpcId;\r\n\r\n const [query, additionalVariables]: [string, Record] = CatalogQueries.buildAppsQuery(config);\r\n const variables: Record = {\r\n ...Utils.object.map(additionalVariables, (v: Record) => v.value)\r\n };\r\n\r\n if (config.apps || config.variants) {\r\n variables[\"ids\"] = config.apps || config.variants;\r\n }\r\n\r\n if (config.store) {\r\n variables[\"store\"] = config.store;\r\n }\r\n\r\n if (config.pageSize) {\r\n variables[\"pageSize\"] = config.pageSize;\r\n }\r\n\r\n if (vpcId !== DoNotSendVpcId) {\r\n variables[\"vpcId\"] = vpcId;\r\n }\r\n\r\n // the cursor is an base64 encoded index of the item just before the first item\r\n // that should be returned\r\n //\r\n // e.g. assuming zero-based indices, to return items 6 - 10 inclusive, the cursor\r\n // value would need to be 5 or `NQ==` in base64.\r\n //\r\n // e.g. for a page size of 5, each page index would be MA==, NQ==, MTA=, MTU=, and so on...\r\n // which equal 0, 5, 10, 15, and so on...\r\n if (Utils.isDefined(config.startIndex)) {\r\n variables.pageCursor = Utils.base64.encode((config.startIndex!).toString());\r\n }\r\n\r\n const result: any = await this.runQuery(query, ServiceUseCase.LCARSGetAppData, variables);\r\n\r\n return {\r\n hasMorePages: result.apps.pageInfo.hasNextPage,\r\n itemCount: result.apps.numberReturned,\r\n totalItemCount: 0, // TODO: this has net yet been added to LCARS; but needs to be.\r\n items: result.apps.items.map((app: any) => this.transformAppData(app))\r\n };\r\n }\r\n\r\n // If the response to get all apps returns hasMorePages, continue making the calls\r\n // until we roll all of it up.\r\n private async getAllApps(config: AppsQueryConfiguration) {\r\n let apps: Partial[] = [];\r\n\r\n config = Utils.object.clone(config);\r\n config.startIndex = 0;\r\n\r\n while (true) {\r\n const response = await this.getAppsInternal(config);\r\n\r\n apps = apps.concat(response.items);\r\n if (!response.hasMorePages) {\r\n break;\r\n }\r\n config.startIndex! += response.itemCount;\r\n }\r\n\r\n return apps;\r\n }\r\n\r\n private runQuery(query: string, useCase: ServiceUseCase, extraVariables?: Record): Promise {\r\n const variables: Record = this.getCommonVariables();\r\n\r\n if (extraVariables) {\r\n for (const v in extraVariables) {\r\n variables[v] = extraVariables[v];\r\n }\r\n }\r\n\r\n // token is optional\r\n return this.mAuth.authenticatedRestCall((token: string) => {\r\n return this.mRestClient.executeGraphQL(\r\n this.mConfiguration.catalog.serverUrl, token, query, useCase, variables);\r\n }, true)\r\n }\r\n\r\n private getCommonVariables(): Record {\r\n return {\r\n \"lang\": this.mSettings.languageCode\r\n }\r\n }\r\n\r\n // Makes transformations to the app data before returning to the user\r\n // 1. For apps that return a single variant at runtime, client MUST display certain\r\n // variant fields, not the parent fields.\r\n // 2. The variant.id field is a string. This is the cmsId, and everywhere else in the\r\n // gfn-client-sdk and LCARS, this is a number. Transform to a number\r\n private transformAppData(app: any): any {\r\n if (app.variants.length === 1) {\r\n for (const field of SINGLE_CHILD_FIELD_OVERRIDES) {\r\n if (app.variants[0][field]) {\r\n app[field] = app.variants[0][field];\r\n }\r\n }\r\n }\r\n\r\n for (const variant of app.variants) {\r\n if (typeof variant.id === \"string\") {\r\n variant.id = parseInt(variant.id);\r\n }\r\n }\r\n\r\n return app;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Initializes Account Connections\r\n */\r\n public async initializeAccountConnections(): Promise {\r\n logger.info(\"Initializing account connections\");\r\n try {\r\n const userAccountData: UserAccountStoreData = await this.getUserAccountStoreData();\r\n const appStoreDefinitions: AppStoreDefinition[] = await this.getAppStores();\r\n this.updateAccountProviders(appStoreDefinitions, userAccountData.userAccount.storesData);\r\n this.mAccountConnectionsInitialized = true;\r\n } catch (e) {\r\n console.error(\"ERROR: \" + e);\r\n }\r\n }\r\n\r\n private getStoreSpecificUserAccountData(store: string, storesData: StoresData[]): Nullable {\r\n return storesData.find(storeData => storeData.store === store) ?? null;\r\n }\r\n\r\n private sortFeaturesData(features: Features[]): Features[] {\r\n const featuresData: Features[] = [];\r\n if (features.length > 0) {\r\n Object.values(ConnectionTypeName).forEach(featureType => {\r\n const index: number = features.findIndex(ft => ft.__typename === featureType);\r\n if (index !== -1) {\r\n featuresData.push(features[index]);\r\n }\r\n });\r\n }\r\n return featuresData;\r\n }\r\n\r\n private updateAccountProviders(digitalStores: AppStoreDefinition[], storesData: StoresData[]): void {\r\n if (digitalStores?.length) {\r\n digitalStores\r\n .filter(digitalStore => !OwnershipProviderIgnoreList.includes(digitalStore.name))\r\n .forEach(digitalStore => {\r\n const storeName: string = digitalStore.name;\r\n digitalStore.features = this.sortFeaturesData(digitalStore.features ?? []);\r\n digitalStore.features?.forEach((featureData: Features) => {\r\n const supportedVariants: string[] = digitalStore.accountLinkingMetadata?.supportedVariantIds || [];\r\n if (\r\n Object.values(ConnectionTypeName).includes(featureData.__typename) &&\r\n featureData.supported\r\n ) {\r\n if (supportedVariants.length > 0 && digitalStore.accountLinkingMetadata?.isRequired) {\r\n this.mAccountLinkedVariants.set(storeName, supportedVariants);\r\n }\r\n const userAccountInfo: Nullable = this.getStoreSpecificUserAccountData(digitalStore.name, storesData);\r\n if (!userAccountInfo) {\r\n return;\r\n }\r\n if (!this.mAccountProviders.has(storeName)) {\r\n logger.info(`Setting provider: ${storeName}`);\r\n this.mAccountProviders.set(\r\n storeName,\r\n new AccountProvider(\r\n storeName,\r\n supportedVariants,\r\n digitalStore,\r\n userAccountInfo\r\n )\r\n );\r\n } else {\r\n logger.info(`Existing provider, updating userAccount info for ${storeName}`);\r\n this.mAccountProviders.get(storeName)!.userAccountInfo = userAccountInfo;\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"../core/util.types\";\r\n\r\n/**\r\n * Contains the object representations (entities) of the data\r\n * returned by the /serviceUrls, /serverInfo and /session REST api calls.\r\n */\r\n\r\n /** @internal **/\r\nexport interface RequestStatusEntity {\r\n statusCode?: number;\r\n unifiedErrorCode?: number;\r\n requestId?: string;\r\n serverId?: string;\r\n statusDescription?: string;\r\n countryCode?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServiceEndpointEntity {\r\n idpId?: string;\r\n loginProvider?: string;\r\n loginProviderCode?: string;\r\n loginProviderDisplayName?: string;\r\n loginProviderPriority?: number;\r\n streamingServiceUrl?: string;\r\n redeemRedirectUrl?: string;\r\n redeemRedirectShortUrl?: string;\r\n mobileNetworkCode?: string[];\r\n restrictedDevicesWithSIM?: string[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServiceInfoEntity {\r\n defaultProvider?: string;\r\n isSupportedCountry?: boolean;\r\n loginRequired?: boolean;\r\n loginPreferredProviders?: string[];\r\n clientCountryCode?: string;\r\n gfnServiceEndpoints?: ServiceEndpointEntity[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServerVersionEntity {\r\n name?: string;\r\n buildVersion?: string;\r\n buildDateTime?: string;\r\n zoneVersion?: string;\r\n protocolMinorVersion?: number;\r\n protocolMajorVersion?: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface MetadataEntity {\r\n key?: string;\r\n value?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface MonitorSettingsEntity {\r\n monitorId?: number;\r\n positionX?: number;\r\n positionY?: number;\r\n widthInPixels?: number;\r\n heightInPixels?: number;\r\n dpi?: number;\r\n framesPerSecond?: number;\r\n sdrHdrMode?: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServerEncodingCapabilitiesEntity {\r\n maxLumaPixelsH264?: number;\r\n maxLumaPixelsHEVC?: number;\r\n serverColorSpaceSupport?: number;\r\n serverCodecModeSupport?: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ExtraServiceInfoEntity {\r\n serviceName?: string;\r\n serviceCode?: number;\r\n version?: string;\r\n serviceUri?: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServerInfoResponseEntity {\r\n version?: ServerVersionEntity;\r\n metaData?: MetadataEntity[];\r\n authType?: number[];\r\n serverType?: number;\r\n serverInstanceId?: string;\r\n monitorSettings?: MonitorSettingsEntity[];\r\n serverEncodeCapability?: ServerEncodingCapabilitiesEntity;\r\n serviceExtras?: ExtraServiceInfoEntity[];\r\n notificationTopicId?: string[];\r\n requestStatus?: RequestStatusEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ServiceInfoResponseEntity {\r\n gfnServiceInfo?: ServiceInfoEntity;\r\n requestStatus?: RequestStatusEntity;\r\n}\r\n\r\n/**\r\n * Represents country information.\r\n */\r\nexport interface CountryEntity {\r\n /**\r\n * The name of the country.\r\n */\r\n countryName?: string;\r\n\r\n /**\r\n * The two-letter country code.\r\n */\r\n countryCode?: string;\r\n\r\n /**\r\n * True if the country is supported by GeForce NOW; otherwise, false.\r\n */\r\n supported?: boolean;\r\n}\r\n\r\n/**\r\n * Represents an underlying connection protocol.\r\n */\r\nexport enum ConnectionProtocol {\r\n /**\r\n * The protocol is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The connection is TCP.\r\n */\r\n TCP,\r\n\r\n /**\r\n * The connection is UDP.\r\n */\r\n UDP\r\n}\r\n\r\n/**\r\n * Represents the application level protocol\r\n * of a connection.\r\n */\r\nexport enum AppLevelConnectionProtocol {\r\n /**\r\n * The protocol is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * Connection supports RTSP.\r\n */\r\n RTSP,\r\n\r\n /**\r\n * Connection supports HTTP\r\n */\r\n HTTP,\r\n\r\n /**\r\n * Connection supports RTSP over Reliable UDP.\r\n */\r\n RTSPRU,\r\n\r\n /**\r\n * Connection supports socket communication.\r\n */\r\n Socket,\r\n\r\n /**\r\n * Connection supports secure HTTP.\r\n */\r\n HTTPS,\r\n\r\n /**\r\n * Connection supports secure RTSP.\r\n */\r\n RTSPS\r\n}\r\n\r\n/**\r\n * Represents what a connection should be used for.\r\n */\r\nexport enum ConnectionUsage {\r\n /**\r\n * The usage is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The connection should be used to control\r\n * a stream.\r\n */\r\n Control,\r\n\r\n /**\r\n * The connection is used for video data.\r\n */\r\n Video,\r\n\r\n /**\r\n * The connection is used for audio data.\r\n */\r\n Audio,\r\n\r\n /**\r\n * The connection is used for input data.\r\n */\r\n Input,\r\n\r\n /**\r\n * The connection is custom.\r\n */\r\n Custom,\r\n\r\n /**\r\n * The connection is used for USB data.\r\n */\r\n USB,\r\n\r\n /**\r\n * The connection is used to transmit RTSP data.\r\n */\r\n RTSP,\r\n\r\n /** @internal **/\r\n GameStreamControl,\r\n /** @internal **/\r\n GameStreamSecureControl,\r\n\r\n /**\r\n * The connection should be used to control\r\n * the session.\r\n */\r\n SessionControl,\r\n\r\n /**\r\n * The connection should be used to control\r\n * the network test server.\r\n */\r\n NetworkTestControl,\r\n\r\n /**\r\n * The connection is used to transmit RTSP data\r\n * over Reliable UDP.\r\n */\r\n RTSPRU,\r\n\r\n /**\r\n * The connection is used to transmit microphone\r\n * audio.\r\n */\r\n AudioInput,\r\n\r\n /**\r\n * The connection is used for signaling.\r\n */\r\n Signaling,\r\n\r\n /**\r\n * The connection is used for media.\r\n */\r\n Media,\r\n\r\n /**\r\n * The connection is used for secure RTSP.\r\n */\r\n RTSPS,\r\n\r\n /**\r\n * The connection is used for bundles.\r\n */\r\n Bundle\r\n}\r\n\r\n/**\r\n * Represents connection information to a server.\r\n */\r\nexport interface ConnectionInfoEntity {\r\n /**\r\n * The ip or host of the server.\r\n */\r\n ip?: string;\r\n\r\n /**\r\n * The server port number.\r\n */\r\n port: number;\r\n\r\n /**\r\n * The underlying protocol supported.\r\n */\r\n protocol: ConnectionProtocol;\r\n\r\n /**\r\n * The connection protocol supported.\r\n */\r\n appLevelProtocol: AppLevelConnectionProtocol;\r\n\r\n /**\r\n * The path to the resource.\r\n */\r\n resourcePath?: string;\r\n\r\n /**\r\n * Indicates what this connection is used for.\r\n */\r\n usage: ConnectionUsage;\r\n}\r\n\r\n/** @internal **/\r\nexport interface DisplayDataInfoEntity {\r\n displayPrimaryX0: number;\r\n displayPrimaryY0: number;\r\n displayPrimaryX1: number;\r\n displayPrimaryY1: number;\r\n displayPrimaryX2: number;\r\n displayPrimaryY2: number;\r\n displayWhitePointX: number;\r\n displayWhitePointY: number;\r\n desiredContentMaxLuminance: number;\r\n desiredContentMinLuminance: number;\r\n desiredContentMaxFrameAverageLuminance: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ClientHdrCapabilitiesEntity {\r\n version: number;\r\n hdrEdrSupportedFlagsInUint32: number;\r\n static_metadata_descriptor_id: number;\r\n display_data: DisplayDataInfoEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport enum AppLaunchMode {\r\n Default = 0,\r\n GamepadFriendly,\r\n TouchFriendly\r\n}\r\n\r\n/** @internal **/\r\nexport enum AudioMode {\r\n Unknown = 0,\r\n Local,\r\n Remote\r\n}\r\n\r\n/** @internal **/\r\nexport enum DynamicRangeMode {\r\n Standard = 0,\r\n High,\r\n Extended\r\n}\r\n\r\n/**\r\n * Enhanced streaming mode setting.\r\n */\r\nexport enum EnhancedStreamMode {\r\n /**\r\n * The mode is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The session is in normal streaming mode.\r\n */\r\n Default,\r\n\r\n /**\r\n * The session is in turbo mode.\r\n */\r\n Turbo\r\n}\r\n\r\n/**\r\n * Represents the data required to create a new session.\r\n */\r\nexport interface SessionRequestDataEntity {\r\n accountLinked: boolean;\r\n appId: number;\r\n appLaunchMode: AppLaunchMode;\r\n networkTestSessionId?: Nullable;\r\n parentSessionId?: Nullable;\r\n deviceHashId: string;\r\n secureRTSPSupported: boolean;\r\n internalTitle?: Nullable;\r\n clientIdentification: string;\r\n clientVersion: string;\r\n clientPlatformName: string;\r\n clientTimezoneOffset: number;\r\n clientRequestMonitorSettings: MonitorSettingsEntity[];\r\n clientDisplayHdrCapabilities?: Nullable;\r\n sdkVersion: string;\r\n streamerVersion: string;\r\n useOps: boolean;\r\n audioMode: AudioMode;\r\n sdrHdrMode: DynamicRangeMode;\r\n enhancedStreamMode: EnhancedStreamMode;\r\n surroundAudioInfo: number;\r\n partnerCustomData?: Nullable;\r\n metaData: MetadataEntity[];\r\n}\r\n\r\n/**\r\n * Represents the current step of the game\r\n * seat setup.\r\n */\r\nexport enum SeatSetupStep {\r\n /**\r\n * The current setup step is not yet known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * Waiting for an available game seat.\r\n */\r\n WaitingForResource,\r\n\r\n /**\r\n * The game seat is being configured.\r\n */\r\n Configuring,\r\n\r\n /**\r\n * The game has been launched on the game seat\r\n * and is starting up.\r\n */\r\n StartingGame,\r\n\r\n /**\r\n * The game is in a play state.\r\n */\r\n Playing,\r\n\r\n /**\r\n * The game seat is in the middle of cleaning up\r\n * a session.\r\n */\r\n WaitingForPreviousSessionCleanup\r\n}\r\n\r\n/**\r\n * Represents the current setup status of\r\n * the game seat.\r\n */\r\nexport interface SeatSetupInfoEntity {\r\n /**\r\n * The users position in the pending game seat queue.\r\n */\r\n queuePosition: number;\r\n\r\n /**\r\n * The current setup step.\r\n */\r\n seatSetupStep: SeatSetupStep;\r\n seatSetupEta: number;\r\n}\r\n\r\n/**\r\n * Represents the status of a session.\r\n */\r\nexport enum SessionStatus {\r\n /**\r\n * The status is not yet known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The session is being created.\r\n */\r\n Initializing,\r\n\r\n /**\r\n * The session is ready for streaming.\r\n */\r\n Ready,\r\n\r\n /**\r\n * The session has an active connection and is playing.\r\n */\r\n Playing,\r\n\r\n /**\r\n * The session has been paused.\r\n */\r\n PausedByUser,\r\n\r\n /**\r\n * The session has been paused.\r\n */\r\n PausedBySystem,\r\n\r\n /**\r\n * The session is coming out of a paused state.\r\n */\r\n Resuming,\r\n\r\n /**\r\n * The session has been terminated.\r\n */\r\n Finished\r\n}\r\n\r\n/**\r\n * Represents a session error.\r\n */\r\nexport enum SessionErrorCode {\r\n Unknown = 0,\r\n OK,\r\n UnknownError,\r\n QueueFailure,\r\n SeatAssignmentFailure,\r\n ExecutableNotFound,\r\n AppFailedToStart,\r\n StreamerCrashed,\r\n StreamerConnectionTimeout,\r\n StreamerFailedToStart,\r\n KeyFrameDetectionFailed,\r\n Cancelled,\r\n KeyFrameNotFound,\r\n InvalidKeyFrameTimeout,\r\n ExecuteSetupCommandFailed,\r\n MissingEnvironmentVariable,\r\n ClientConnectionTimeout,\r\n ResolutionChangeFailed,\r\n InvalidPerfClass,\r\n InvalidPerRes,\r\n ClientReconnectionTimeout,\r\n StreamerReconnectionTimeout,\r\n FailedToUpdateUserStateFile,\r\n UserStateSaveFailed,\r\n UserStateRestoreFailed,\r\n LibraryNotFound,\r\n SeatSetupFailed,\r\n DynamicNatSetupFailed,\r\n AllSeatClassesFenced,\r\n ClientError,\r\n InvalidExpectedState,\r\n StaleSession,\r\n ConnectionFailedDispose,\r\n InvalidUsernameHash,\r\n StateMachineException,\r\n UnspecifiedTimeout,\r\n StreamHandlerException,\r\n StreamAttemptFailed,\r\n WindowFocusViolation,\r\n StreamerError,\r\n GFEError,\r\n GameNotRunning,\r\n GameNotFound,\r\n GameMinimized,\r\n GameStartedLocally,\r\n GameLauncherFailed,\r\n PrimaryDisplayError,\r\n NVFBCError,\r\n NoActiveUser,\r\n SteamUserIsNotLoggedIn,\r\n ServerLocked\r\n}\r\n\r\n/**\r\n * Represents a game session.\r\n */\r\nexport interface SessionEntity {\r\n /**\r\n * The unique identifier of the session.\r\n */\r\n sessionId: string;\r\n\r\n /**\r\n * The ip address of the client where the session originated.\r\n */\r\n clientIp: string;\r\n\r\n /**\r\n * The current status of the session.\r\n */\r\n status: SessionStatus;\r\n\r\n /**\r\n * The error code if there was a failure.\r\n */\r\n errorCode: SessionErrorCode;\r\n\r\n /**\r\n * The current status of the game seat.\r\n */\r\n seatSetupInfo?: SeatSetupInfoEntity;\r\n\r\n /**\r\n * The original data used when requesting a new session.\r\n */\r\n sessionRequestData?: SessionRequestDataEntity;\r\n\r\n /**\r\n * The connection information required to control the session.\r\n */\r\n sessionControlInfo?: ConnectionInfoEntity;\r\n\r\n /**\r\n * The connection information required to stream the session.\r\n */\r\n connectionInfo?: ConnectionInfoEntity[];\r\n\r\n /**\r\n * Indicates whether the session is in an enhanced streaming mode.\r\n */\r\n enhancedStreamMode?: EnhancedStreamMode;\r\n\r\n /**\r\n * The supported streaming modes.\r\n */\r\n monitorSettings?: MonitorSettingsEntity[];\r\n\r\n /**\r\n * The type of GPU being used to serve the session.\r\n */\r\n gpuType?: string;\r\n\r\n /**\r\n * The amount of time (in milliseconds) to wait for no\r\n * activity before showing a warning.\r\n */\r\n userIdleWarningTimeoutInMs?: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface SessionResponseEntity {\r\n session?: SessionEntity;\r\n requestStatus?: RequestStatusEntity;\r\n otherUserSessions?: SessionEntity[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface SessionsResponseEntity {\r\n sessions?: SessionEntity[];\r\n requestStatus?: RequestStatusEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport interface DeleteSessionResponseEntity {\r\n requestStatus?: RequestStatusEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport interface CreateSessionRequestEntity {\r\n sessionRequestData: SessionRequestDataEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport enum ModifySessionAction {\r\n Unknown = 0,\r\n Pause,\r\n Resume,\r\n SessionRating,\r\n Join,\r\n Forward\r\n}\r\n\r\n/** @internal **/\r\nexport interface ModifySessionRequestEntity {\r\n action: ModifySessionAction;\r\n data: string;\r\n sessionRequestData: SessionRequestDataEntity;\r\n metaData: MetadataEntity[];\r\n}","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Zone } from \"../server/server.types\";\r\nimport { AppLaunchMode, SessionStatus } from \"../server/server.entities\";\r\nimport { AndroidStreamerConfiguration } from \"./android/android-streamer.types\";\r\nimport { WebStreamerConfiguration } from \"./web/web-streamer.types\";\r\nimport { MockStreamerStartParams } from \"./mock/mock-streamer.types\";\r\nimport { NetworkType } from \"../shared-types\";\r\n\r\n/**\r\n * Represents the StreamProfile quality presets that may be passed to\r\n * {@link GFN.streamer.detectStreamingResolution}.\r\n */\r\nexport enum StreamProfilePreset {\r\n /**\r\n * Preset that favors a balanced streaming experience.\r\n */\r\n Balanced,\r\n\r\n /**\r\n * Preset that favors a lower bandwidth streaming experience.\r\n */\r\n DataSaver,\r\n\r\n /**\r\n * Preset that favors a high performance streaming experience.\r\n */\r\n Competitive\r\n}\r\n\r\n/**\r\n * Provides additional data about a {@link StreamProfilePreset}.\r\n */\r\nexport interface StreamProfilePresetData {\r\n /**\r\n * The stream profile preset value.\r\n */\r\n preset: StreamProfilePreset;\r\n\r\n /**\r\n * The localized description of this preset.\r\n */\r\n description: string;\r\n}\r\n\r\n/**\r\n * Represents the various modes a streamer can be put in.\r\n * These may or may not be supported across platforms.\r\n *\r\n * @internal\r\n */\r\nexport enum StreamerMode {\r\n /**\r\n * The default mode, all standard streamer features enabled.\r\n *\r\n * @webrtc\r\n */\r\n Default = \"default\",\r\n\r\n /**\r\n * Disables most features; the streamer has minimal functionality.\r\n * Individual features will need to be configured instead.\r\n *\r\n * @webrtc\r\n */\r\n Lean = \"lean\",\r\n\r\n /**\r\n * Enables internal development tools.\r\n *\r\n * @webrtc\r\n */\r\n Development = \"dev\",\r\n}\r\n\r\n/** @internal **/\r\nexport interface SessionPollingConfiguration {\r\n minIntervalMs: number;\r\n maxIntervalMs: number;\r\n stepInterval: number;\r\n queueSizePerStep: number;\r\n}\r\n\r\n/** @internal **/\r\nexport interface StreamerConfiguration {\r\n android: AndroidStreamerConfiguration;\r\n web: WebStreamerConfiguration;\r\n helpUrl: string;\r\n defaultCursorTypeInWindowedMode?: string;\r\n mockParams?: MockStreamerStartParams;\r\n}\r\n\r\n/**\r\n * Represents the output stream configuration.\r\n */\r\nexport interface StreamParameters {\r\n /**\r\n * The resolution width of the video stream.\r\n */\r\n width: number;\r\n\r\n /**\r\n * The resolution height of the video stream.\r\n */\r\n height: number;\r\n\r\n /**\r\n * The number of frames that should be rendered, per second.\r\n */\r\n fps: number;\r\n\r\n /**\r\n * The requested bitrate.\r\n */\r\n bitrate?: number;\r\n}\r\n\r\n/**\r\n * Represents the configuration required to start a new streaming session\r\n * or resume an existing streaming session.\r\n */\r\nexport interface StreamerStartParameters {\r\n /**\r\n * The server ip address, url or {@link Zone}.\r\n *\r\n * This is usually set to a {@link Zone} or the result of\r\n * a network test.\r\n */\r\n server: Zone | string;\r\n\r\n /**\r\n * The id of the app or game to launch on the server. This is also known\r\n * as the `cmsId`.\r\n */\r\n appId: number;\r\n\r\n /**\r\n * The local server id from server info, if not provided, the value from {@link GFN.settings.vpcId} will\r\n * be used. One or the other is required.\r\n */\r\n vpcId?: string;\r\n\r\n /**\r\n * The identifier of an existing session. When provided, the session will\r\n * be resumed, if the session cannot be resumed then an error will occur.\r\n */\r\n sessionId?: string;\r\n\r\n /**\r\n * The Streaming Profile Preset to use for configuring stream params.\r\n * For a custom profile, leave undefined and specify streamParams parameter instead.\r\n */\r\n profilePreset?: StreamProfilePreset;\r\n\r\n /**\r\n * The custom streaming profile parameters used to setup the output stream.\r\n * This will be ignored if profilePreset is specified.\r\n */\r\n streamParams?: StreamParameters;\r\n\r\n /**\r\n * The users keyboard layout, this will determine how the server\r\n * handles key events.\r\n */\r\n keyboardLayout?: string;\r\n\r\n /**\r\n * True to allow the keyboard layout to change while streaming; otherwise, false.\r\n */\r\n allowKeyboardLayoutChange?: boolean;\r\n\r\n /**\r\n * @deprecated\r\n * No longer supported - touch support is automatically detected.\r\n */\r\n enableTouch?: boolean;\r\n\r\n /**\r\n * When using a mock streamer, control its startup behavior\r\n */\r\n mockParams?: MockStreamerStartParams;\r\n\r\n /**\r\n * ID of the container element for streaming in windowed mode.\r\n * If not set, game is streamed in Fullscreen.\r\n * Only supported in browsers on Desktop and Laptop devices.\r\n */\r\n windowElementId?: string;\r\n\r\n /**\r\n * Pass in custom data to the application running on the game seat.\r\n * This data can be retreived by applications on the game seat using the GfnGetPartnerData API in the [GFN Runtime SDK](https://developer.nvidia.com/industries/game-development/geforce-now)\r\n */\r\n partnerData?: string;\r\n\r\n /**\r\n * True, to try and render as HDR; otherwise, false.\r\n *\r\n * To render in HDR, the device and app being streamed must both support HDR output,\r\n * in addition, the user must have an HDR enabled subscription.\r\n */\r\n hdr?: boolean;\r\n\r\n /**\r\n * True, to allow streamer to dynamically change resolution; otherwise, false.\r\n *\r\n * Allowing streamer to dynamically change resolution enables it to adjust streaming\r\n * experience for poor network conditions\r\n */\r\n enableDRC?: boolean;\r\n\r\n /**\r\n * When set to true, the streamer won't resume an any existing session that is already\r\n * running the same game on the server. If false (default), resumes a session when possible.\r\n */\r\n disableSessionResume?: boolean;\r\n\r\n /**\r\n * When set to true, the stream will start in a muted state.\r\n *\r\n * By default, streams stream audio on start, potentially asking the user to unmute before continuing.\r\n *\r\n * Only has an effect in supported browsers.\r\n */\r\n enableMutedAutoPlay?: boolean;\r\n\r\n /**\r\n * True, to disable microphone input; otherwise false.\r\n *\r\n * By default, if the platform supports microphone input, the user will be asked whether or not to allow\r\n * access to their microphone. If you know your title does not use the microphone, setting this to true\r\n * will not prompt the user for permission and microphone input will be disabled.\r\n *\r\n *\r\n */\r\n disableMicrophone?: boolean;\r\n\r\n /**\r\n * True, to disable hardware cursor when in windowed mode.\r\n */\r\n disableHwCursorInWindowedMode?: boolean;\r\n\r\n /**\r\n * True, to disable clipboard paste; otherwise false.\r\n *\r\n * By default, clipboard content will be pasted in the stream when ctrl+V keypress is detected\r\n *\r\n */\r\n disableClipboardPaste?: boolean;\r\n}\r\n\r\n/**\r\n * Represents the progress of setting up a streaming session.\r\n */\r\nexport enum SessionSetupProgress {\r\n /**\r\n * The streamer is waiting for session setup to begin.\r\n */\r\n Waiting,\r\n\r\n /**\r\n * The session being setup was cancelled.\r\n */\r\n Cancelled,\r\n\r\n /**\r\n * The session is in a queue waiting for a server to become available.\r\n */\r\n InQueue,\r\n\r\n /**\r\n * The server is being configured for the session.\r\n */\r\n Configuring,\r\n\r\n /**\r\n * There was one or more previous sessions that did not end properly and\r\n * needs to be cleaned up.\r\n */\r\n SessionCleanup,\r\n\r\n /**\r\n * The session is ready and the streamer is connecting to it.\r\n */\r\n Starting,\r\n\r\n /**\r\n * The session setup has failed and a dialog must be displayed to the user.\r\n */\r\n Error,\r\n\r\n /**\r\n * The session has been setup and the streamer has connected to it.\r\n */\r\n Finished\r\n}\r\n\r\nexport interface SessionSetupError {\r\n /**\r\n * Reason for terminating the streamer.\r\n */\r\n reason: StreamerTerminationReason;\r\n\r\n /**\r\n * Code giving more information about the error.\r\n */\r\n code: number;\r\n\r\n /**\r\n * Localized message that must be displayed to the user.\r\n */\r\n message: string;\r\n}\r\n\r\n/**\r\n * The event data that is sent when\r\n * a `sessionSetupProgress` event is dispatched.\r\n */\r\nexport interface SessionSetupProgressEvent {\r\n /**\r\n * Returns the current progress of the setup.\r\n */\r\n progress: SessionSetupProgress;\r\n\r\n /**\r\n * Contains the position the user is at in the queue, exists only when `progress` is {@link SessionSetupProgress.InQueue}.\r\n */\r\n queuePosition?: number;\r\n\r\n /**\r\n * Contains error information when `progress` is {@link SessionSetupProgress.Error}.\r\n */\r\n errorDetails?: SessionSetupError;\r\n\r\n /**\r\n * @deprecated\r\n * @internal\r\n */\r\n estimatedWaitTimeInSecs?: number;\r\n}\r\n\r\n\r\n// TODO: add a PreparingSession state\r\n\r\n/**\r\n * The state of the streamer.\r\n */\r\nexport enum StreamerState {\r\n /**\r\n * The streamer is not active.\r\n */\r\n Unknown,\r\n\r\n /**\r\n * The streamer is being initialized.\r\n */\r\n Initializing,\r\n\r\n /**\r\n * The streamer is waiting to connect to the server.\r\n */\r\n WaitingForConnection,\r\n\r\n /**\r\n * The streamer is streaming.\r\n */\r\n Streaming,\r\n\r\n /**\r\n * The streamer is being paused.\r\n */\r\n Pausing,\r\n\r\n /**\r\n * The streamer has been paused.\r\n */\r\n Paused,\r\n\r\n /**\r\n * The streamer is resuming from a previous session.\r\n */\r\n Resuming,\r\n\r\n /**\r\n * The stream has finished.\r\n */\r\n Finished,\r\n}\r\n\r\n/**\r\n * The event data sent when a `stateChanged`\r\n * event is dispatched.\r\n */\r\nexport interface StreamerStateChangedEvent {\r\n /**\r\n * The state of the streamer.\r\n */\r\n state: StreamerState;\r\n}\r\n\r\n/**\r\n * The type of StreamerWarning\r\n */\r\nexport enum StreamerWarningCode {\r\n /**\r\n * Unknown warning type\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The user is approaching an entitlement timeout\r\n */\r\n ApproachingEntitlementTimeout = 1,\r\n\r\n /**\r\n * The user is approaching an idle timeout and needs to take action\r\n */\r\n ApproachingIdleTimeout = 2,\r\n\r\n /**\r\n * The user is approaching the end of the session time limit\r\n */\r\n ApproachingSessionMaxTimeLimit = 3,\r\n\r\n /**\r\n * The user has taken action and the idle timeout is cleared\r\n */\r\n ClearUserIdleTimeOut = 4\r\n}\r\n\r\n/**\r\n * Represents the severity level of a diagnostic event.\r\n */\r\nexport enum StreamerDiagnosticLevel {\r\n Debug = 0,\r\n Info,\r\n Warning,\r\n Error\r\n}\r\n\r\n/**\r\n * The event data send when a `diagnostic` event\r\n * is dispatched.\r\n */\r\nexport interface StreamerDiagnosticEvent {\r\n /**\r\n * The severity level of the message.\r\n */\r\n level: StreamerDiagnosticLevel;\r\n\r\n /**\r\n * The diagnostic message.\r\n */\r\n message: string;\r\n\r\n /**\r\n * An optional error code.\r\n */\r\n code?: number;\r\n}\r\n\r\n/**\r\n * Possible reasons for the streamer to terminate.\r\n */\r\nexport enum StreamerTerminationReason {\r\n /**\r\n * The session has finished without problem.\r\n */\r\n SessionDone = 0x0000,\r\n\r\n /**\r\n * The user cancelled while the session was being setup.\r\n */\r\n UserCancellation = 0x0001,\r\n\r\n /**\r\n * There was an error while setting up the session.\r\n */\r\n SetupSessionFailure = 0x0002,\r\n\r\n /**\r\n * A general exception has occurred.\r\n */\r\n Exception = 0x0003,\r\n\r\n /**\r\n * An known, unexpected, internal error has occurred.\r\n */\r\n Unexpected = 0x0004,\r\n\r\n /**\r\n * The platform does not support streaming.\r\n */\r\n PlatformNotSupported = 0x0005,\r\n\r\n /**\r\n * There was an error in the platform streamer.\r\n */\r\n PlatformStreamerError = 0x0006,\r\n\r\n /**\r\n * There was a generic network error.\r\n */\r\n NetworkError = 0x0007,\r\n\r\n /**\r\n * There was a network error due to timeout.\r\n */\r\n NetworkErrorTimeout = 0x0008,\r\n\r\n /**\r\n * There was a network error, connection was lost.\r\n */\r\n NetworkErrorConnectionLost = 0x0009,\r\n\r\n /**\r\n * There was an intended network error.\r\n */\r\n NetworkErrorIntended = 0x000a,\r\n\r\n /**\r\n * There was a network error due to bad network strength.\r\n */\r\n NetworkErrorBadQOS = 0x000b,\r\n\r\n /**\r\n * The requested game is currently being updated.\r\n */\r\n AppPatching = 0x000c,\r\n\r\n /**\r\n * The requested game is currently offline for maintenance.\r\n */\r\n AppMaintenanceStatus = 0x000d,\r\n\r\n /**\r\n * GeForce NOW is not active for the user's account.\r\n */\r\n EntitlementFailure = 0x000e,\r\n\r\n /**\r\n * An invalid game ID was provided\r\n */\r\n GameNotFound = 0x000f,\r\n\r\n /**\r\n * The game is not currently available in this region.\r\n */\r\n GameBinariesNotAvailableInRegion = 0x0010,\r\n\r\n /**\r\n * The provided session ID to resume was not found.\r\n */\r\n InvalidSessionIdNotFound = 0x0011,\r\n\r\n /**\r\n * GeForce NOW is not currently available in this region.\r\n */\r\n RegionNotSupportedForStreaming = 0x0012,\r\n\r\n /**\r\n * User has tried to play too many games in a period of time.\r\n */\r\n RequestLimitExceeded = 0x0013,\r\n\r\n /**\r\n * The seat required for this game is not supported in this region.\r\n */\r\n RequiredSeatInstanceTypeNotSupported = 0x0014,\r\n\r\n /**\r\n * User is now playing GeForce NOW on another stream.\r\n */\r\n SessionTerminatedByAnotherClient = 0x0015,\r\n\r\n /**\r\n * This server is going down for scheduled maintenance.\r\n */\r\n SessionRemovedFromQueueMaintenance = 0x0016,\r\n\r\n /**\r\n * There was a problem connecting to GeForce NOW\r\n */\r\n ServiceUnAvailable = 0x0017,\r\n\r\n /**\r\n * The GeForce NOW queue limit has been reached.\r\n */\r\n ServerSessionQueueLengthExceeded = 0x0018,\r\n\r\n /**\r\n * The server has terminated the connection with the client.\r\n */\r\n ServerTerminatedConnection = 0x0019,\r\n\r\n /**\r\n * The server is incompatible with the client.\r\n */\r\n ServerCompatibilityError = 0x001a,\r\n\r\n /**\r\n * The stream closed due to the server pressing a hotkey.\r\n */\r\n ServerDisconnectedHotKey = 0x001b,\r\n\r\n /**\r\n * Game launch failed after the login screen.\r\n */\r\n ServerDisconnectedGameLaunchFailed = 0x001c,\r\n\r\n /**\r\n * The user was changed after remote login.\r\n */\r\n ServerDisconnectedUserChanged = 0x001d,\r\n\r\n /**\r\n * Disconnected due to the game running in windowed mode.\r\n */\r\n ServerDisconnectedWindowedMode = 0x001e,\r\n\r\n /**\r\n * The server terminated the connection after the user was idle too long\r\n */\r\n ServerDisconnectedUserIdle = 0x0020,\r\n\r\n /**\r\n * The server terminated the connection after an unknown provision manager error.\r\n */\r\n ServerDisconnectedUnknownFromPm = 0x0021,\r\n\r\n /**\r\n * The server has terminated the connection after the entitlement has timed out\r\n */\r\n ServerDisconnectedSessionEntitledTimeExceeded = 0x0022,\r\n\r\n /**\r\n * The server has terminated the connection after the user could not reconnect.\r\n */\r\n ServerDisconnectedClientReconnectTimeLimitExceeded = 0x0023,\r\n\r\n /**\r\n * The server has terminated the connection due to operator command.\r\n */\r\n ServerDisconnectedOperatorCommandedTermination = 0x0024,\r\n\r\n /**\r\n * The server has terminated the connection after exceeding the maximum session time limit\r\n */\r\n ServerDisconnectedMaxSessionTimeLimitExceeded = 0x0025,\r\n\r\n /**\r\n * The server has terminated the connection due to provision manager command.\r\n */\r\n ServerDisconnectedSystemCommandTermination = 0x0026,\r\n\r\n /**\r\n * The server has terminated the connection due to multiple logins by the same user.\r\n */\r\n ServerDisconnectedMultipleLogin = 0x0027,\r\n\r\n /**\r\n * The server has terminated the connection due to another client's action.\r\n */\r\n ServerDisconnectedAnotherClient = 0x0028,\r\n\r\n /**\r\n * The server has terminated the connection due to the user not owning the selected game.\r\n */\r\n ServerDisconnectedGameNotOwnedByUser = 0x0029,\r\n\r\n /**\r\n * The server has terminated the connection due to protected content being played.\r\n */\r\n ServerDisconnectedProtectedContent = 0x002a,\r\n\r\n /**\r\n * GFN is offline for scheduled maintenance\r\n */\r\n MaintenanceStatus = 0x002b,\r\n\r\n /**\r\n * The zone is under maintenance.\r\n */\r\n ZoneMaintenanceMode = 0x002c,\r\n\r\n /**\r\n * The client terminated the connection as no video frames are being rendererd\r\n */\r\n StreamerNoVideoFramesLossyNetwork = 0x002d,\r\n\r\n /**\r\n * There was a problem connecting to GeForce NOW.\r\n */\r\n StreamerNetworkError = 0x002e,\r\n\r\n /**\r\n * The client has timed out.\r\n */\r\n ClientTimeout = 0x002f,\r\n}\r\n\r\n/**\r\n * The event data that is sent with the streamer `finished` event.\r\n */\r\nexport interface StreamerTerminatedEvent {\r\n\r\n /**\r\n * Reason for terminating the streamer.\r\n */\r\n reason: StreamerTerminationReason;\r\n\r\n /**\r\n * When the streamer was terminated because of an error, this will contain\r\n * an error code; otherwise; it is undefined.\r\n */\r\n code?: number;\r\n}\r\n\r\n/**\r\n * Streaming Quality indicator.\r\n */\r\nexport enum StreamerNetworkQuality {\r\n /**\r\n * Unknown quality type\r\n */\r\n Unknown,\r\n\r\n /**\r\n * Network quality is normal or good\r\n */\r\n Normal,\r\n\r\n /**\r\n * Network quality has dropped below warning threshold\r\n */\r\n Warning,\r\n\r\n /**\r\n * Network quality has dropped below alert threshold\r\n */\r\n Alert\r\n}\r\n\r\nexport interface StreamerNetworkQualityChangedEvent {\r\n /**\r\n * Indicates the current network quality\r\n */\r\n quality?: StreamerNetworkQuality;\r\n\r\n /**\r\n * Quality score\r\n */\r\n score?: number;\r\n}\r\n\r\n/**\r\n * The state of the microphone.\r\n */\r\nexport enum StreamerMicrophoneState {\r\n /**\r\n * Waiting for the user to grant permission to the microphone.\r\n */\r\n WaitingForPermission,\r\n\r\n /**\r\n * The user has blocked access to the microphone.\r\n */\r\n Blocked,\r\n\r\n /**\r\n * The microphone is muted.\r\n */\r\n Muted,\r\n\r\n /**\r\n * The microphone is receiving audio input, e.g. not muted.\r\n */\r\n Active,\r\n\r\n /**\r\n * No microphone was found.\r\n */\r\n NotFound\r\n}\r\n\r\n/**\r\n * Events that are dispatched from {@link GFN.streamer}.\r\n */\r\nexport interface StreamerEvents {\r\n /**\r\n * Sent when the streamer has established a connection with the\r\n * server.\r\n */\r\n connected: () => void;\r\n\r\n /**\r\n * Sent as soon as the stream has started.\r\n */\r\n started: () => void;\r\n\r\n /**\r\n * Sent when the stream is stopped.\r\n */\r\n stopped: () => void;\r\n\r\n /**\r\n * Sent when the stream has been terminated.\r\n */\r\n terminated: (e: StreamerTerminatedEvent) => void;\r\n\r\n /**\r\n * Sent when the streamer is paused or put into the background.\r\n */\r\n paused: () => void;\r\n\r\n /**\r\n * Sent when the streamer is resumed or brought back into the foreground.\r\n */\r\n resumed: () => void;\r\n\r\n /**\r\n * Sent when a diagnostic message is available.\r\n *\r\n * This event should be used to write to a log file.\r\n */\r\n diagnostic: (e: StreamerDiagnosticEvent) => void;\r\n\r\n /**\r\n * Sent when the session setup progress has changed.\r\n */\r\n sessionSetupProgress: (e: SessionSetupProgressEvent) => void;\r\n\r\n /**\r\n * Sent when the state of the streamer has changed.\r\n */\r\n stateChanged: (e: StreamerStateChangedEvent) => void;\r\n\r\n /**\r\n * Sent when the network qscore goes below the threshold\r\n */\r\n networkQualityChanged: (e: StreamerNetworkQualityChangedEvent) => void;\r\n\r\n /**\r\n * Sent when custom data is received\r\n */\r\n message: (e: string) => void;\r\n\r\n /**\r\n * Sent when the state of the microphone changes. Access the new state using {@link Streamer.toggleMicrophone | GFN.streamer.toggleMicrophone}.\r\n */\r\n microphoneStateChanged: () => void;\r\n}\r\n\r\n/**\r\n * Streaming stats\r\n */\r\nexport interface StreamStats {\r\n /**\r\n * The estimated round trip delay between server & client\r\n */\r\n roundTripDelayMs?: number;\r\n /**\r\n * The streaming frame rate\r\n */\r\n streamingFps?: number;\r\n /**\r\n * The average game frame rate\r\n */\r\n gameEngineFps?: number;\r\n /**\r\n * The number of frames dropped since last Stats update\r\n */\r\n frameLoss?: number;\r\n /**\r\n * Total number of frames dropped\r\n */\r\n totalFrameLoss?: number;\r\n /**\r\n * The number of lost video packets from server to client since last update\r\n */\r\n packetLoss?: number;\r\n /**\r\n * The aggregate number of lost video packets from server to client\r\n */\r\n totalPacketLoss?: number;\r\n /**\r\n * The available bandwidth for streaming in Mbps\r\n * Note: this value doesnt represent the current total network bandwidth\r\n */\r\n totalAvailableBandwidth?: number;\r\n /**\r\n * The video streaming Rate from server to client in Mbps\r\n */\r\n bandwidthUsed?: number;\r\n /**\r\n * The estimated bandwidth utilization from server to client in percentage(0-100) of the available bandwidth for streaming\r\n */\r\n bandwidthPercentage?: number;\r\n /**\r\n * The streaming resolution width\r\n */\r\n resolutionWidth?: number;\r\n /**\r\n * The streaming resolution height\r\n */\r\n resolutionHeight?: number;\r\n /**\r\n * The server location (zone + vpcId)\r\n */\r\n serverLocation?: string;\r\n /**\r\n * WIFI network ID\r\n */\r\n networkName?: string;\r\n /**\r\n * Network type\r\n */\r\n networkType?: NetworkType;\r\n /**\r\n * HDR Streaming Status\r\n */\r\n hdrStatus?: boolean;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport interface StreamerSessionConnection {\r\n ip: string;\r\n port: number;\r\n usage: number;\r\n protocol: number;\r\n appLevelProtocol: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport interface StreamerSessionConnectionInfo {\r\n signal: StreamerSessionConnection;\r\n media: StreamerSessionConnection[];\r\n}\r\n\r\n/**\r\n * Represents the information of a streaming session.\r\n */\r\nexport interface StreamerSession {\r\n /**\r\n * The identifier of the user streaming this session.\r\n */\r\n userId: string;\r\n\r\n /**\r\n * The identifier of the session.\r\n */\r\n sessionId: string;\r\n\r\n /**\r\n * The identifier of a sub-session.\r\n */\r\n subSessionId: string;\r\n\r\n /**\r\n * The current session status.\r\n */\r\n status: SessionStatus;\r\n\r\n /**\r\n * The app or game identifier. This is also\r\n * known as a `cmsId`.\r\n */\r\n appId: number;\r\n\r\n /**\r\n * A list of stream modes available.\r\n */\r\n streamInfo?: {\r\n width: number;\r\n height: number;\r\n fps: number;\r\n bitrate: number;\r\n }[];\r\n\r\n /**\r\n * The name and address of the zone where the session streamed from, if a stream failed\r\n * to start due to setup/resume failures then this will be the zone that handled the\r\n * HTTP requests.\r\n */\r\n zone?: Zone\r\n\r\n /** @internal **/\r\n gpuType?: string;\r\n /** @internal */\r\n appLaunchMode: AppLaunchMode;\r\n /** @internal */\r\n connectionInfo?: StreamerSessionConnectionInfo;\r\n /** @internal */\r\n streamingProfileTelemetryId?: string;\r\n /** @internal */\r\n systemInfoTelemetryId?: string;\r\n /** @internal */\r\n isDynamicResolutionChangeEnabled: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport enum StreamerUsage {\r\n Unknown = 0,\r\n Control = 1,\r\n Video = 2,\r\n Audio = 3,\r\n Input = 4,\r\n Custom = 5,\r\n USB = 6,\r\n RTSP = 7,\r\n GamestreamControl = 8,\r\n GamestreamSecureControl = 9,\r\n SessionControl = 10,\r\n NetworkTestControl = 11,\r\n RTSPRU = 12,\r\n AudioInput = 13,\r\n Signaling = 14,\r\n Media = 15,\r\n RTSPS = 16,\r\n Bundle = 17\r\n}\r\n\r\n/** @internal */\r\nexport enum StreamerProtocol {\r\n Unknown = 0,\r\n TCP = 1,\r\n UDP = 2\r\n}\r\n\r\n/** @internal */\r\nexport enum StreamerAppLevelProtocol {\r\n Unknown = 0,\r\n RTSP = 1,\r\n HTTP = 2,\r\n RTSPRU = 3,\r\n Socket = 4,\r\n HTTPS = 5,\r\n RTSPS = 6,\r\n SocketSecure = 7\r\n}\r\n\r\n/** @internal */\r\nexport enum StreamerVSyncMode {\r\n Adaptive,\r\n Off,\r\n On\r\n}\r\n\r\n/** @internal */\r\nexport const DEFAULT_PROFILE_BALANCED_PARAMS: StreamParameters = {\r\n fps: 60,\r\n height: 1080,\r\n width: 1920\r\n};\r\n\r\n/** @internal */\r\nexport const DEFAULT_PROFILE_COMPETITIVE_PARAMS: StreamParameters = {\r\n fps: 60,\r\n height: 720,\r\n width: 1280\r\n};\r\n\r\n/** @internal */\r\nexport const DEFAULT_PROFILE_DATASAVER_PARAMS: StreamParameters = {\r\n fps: 60,\r\n bitrate: 12,\r\n height: 720,\r\n width: 1280\r\n};\r\n\r\n/** @internal */\r\nexport enum EditBoxTextType {\r\n \"Default\",\r\n \"Url\",\r\n \"Email\",\r\n \"Number\",\r\n \"Phone\",\r\n \"Decimal\",\r\n \"Chat\",\r\n \"Search\",\r\n \"Password\"\r\n};\r\n\r\n/** @internal */\r\nexport enum EditBoxFlags {\r\n LongPressOverride = \"LONG_PRESS_OVERRIDE\"\r\n}\r\n\r\n/** @internal */\r\nexport interface EditBoxZone {\r\n id: number;\r\n rect: {\r\n bottom:number;\r\n left:number;\r\n right:number;\r\n top:number;\r\n },\r\n flags?: EditBoxFlags[],\r\n textType?: EditBoxTextType\r\n}\r\n\r\n/** @internal **/\r\nexport interface VideoBounds {\r\n videoWidth: number;\r\n videoHeight: number;\r\n boundingWidth: number;\r\n boundingHeight: number;\r\n boundingTop: number;\r\n boundingLeft: number;\r\n}\r\n","/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Represents a streaming profile to use when testing the network.\r\n */\r\nexport interface NetworkTestProfile {\r\n /**\r\n * The width of the video resolution to test with.\r\n */\r\n width: number;\r\n\r\n /**\r\n * The height of the video resolution to test with.\r\n */\r\n height: number;\r\n\r\n /**\r\n * The number of frames per second to test with.\r\n */\r\n fps: number;\r\n}\r\n\r\n/**\r\n * Represents an error that occurred while performing a network test.\r\n */\r\nexport interface NetworkTestError {\r\n /**\r\n * The error message.\r\n */\r\n error: string;\r\n}\r\n\r\n/**\r\n * Represents the type of network being tested.\r\n */\r\nexport enum NetworkType {\r\n /**\r\n * The network type is unknown\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * There is not an active network.\r\n */\r\n None = 1,\r\n\r\n /**\r\n * There is an active network but the type is not\r\n * of one of the known network types.\r\n */\r\n Other = 2,\r\n\r\n /**\r\n * Wireless network.\r\n */\r\n Wifi = 3,\r\n\r\n /**\r\n * Cellular network.\r\n */\r\n Cellular = 4,\r\n\r\n /**\r\n * Ethernet network.\r\n */\r\n Ethernet = 5,\r\n\r\n /**\r\n * VPN network.\r\n */\r\n VPN = 6\r\n}\r\n\r\n/**\r\n * Represents the streaming capability of the network.\r\n */\r\nexport enum NetworkCapability {\r\n /**\r\n * The network is fully capable of streaming.\r\n */\r\n Capable = 1,\r\n\r\n /**\r\n * The network is capable of streaming but might experience\r\n * a loss of quality or lag.\r\n */\r\n Minimum = 2,\r\n\r\n /**\r\n * The network is not capable of streaming and would experience\r\n * significant loss of quality and lag.\r\n */\r\n Insufficient = 3\r\n}\r\n\r\n/**\r\n * The result code of a network test.\r\n */\r\nexport enum NetworkTestResultCode {\r\n /**\r\n * The result is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The test was successful.\r\n */\r\n Success = 1,\r\n\r\n /**\r\n * One of the parameters is invalid.\r\n */\r\n InvalidParameter = 2,\r\n\r\n /**\r\n * A network error occurred while performing a test.\r\n */\r\n NetworkError = 3,\r\n\r\n /**\r\n * The token has expired or is no longer valid.\r\n */\r\n AuthError = 4,\r\n\r\n /**\r\n * The network test service is currently unavailable.\r\n */\r\n ServiceUnavailable = 5,\r\n\r\n /**\r\n * The maximum number of network test sessions has been reached.\r\n */\r\n SessionLimitExceeded = 6,\r\n\r\n /**\r\n * The network test was cancelled before it could be completed.\r\n */\r\n Cancelled = 7,\r\n\r\n /**\r\n * There are no more servers available to perform the test.\r\n */\r\n InsufficientResources = 8,\r\n\r\n /**\r\n * The measurement data is invalid.\r\n */\r\n InvalidData = 9,\r\n\r\n /**\r\n * The network test could not be initialized.\r\n */\r\n InitializationFailure = 10\r\n}\r\n\r\n/**\r\n * Represents information of the network being tested.\r\n */\r\nexport interface NetworkTestNetworkInfo {\r\n /**\r\n * The type of network.\r\n */\r\n type: NetworkType;\r\n\r\n /**\r\n * A network identifier.\r\n *\r\n * Available only when the network type is {@link NetworkType.Wifi}.\r\n */\r\n id: number;\r\n\r\n /**\r\n * The frequency of the network (MHz).\r\n *\r\n * Available only when the network type is {@link NetworkType.Wifi}.\r\n */\r\n frequency: number;\r\n\r\n /**\r\n * The link speed of the network (Mbps).\r\n *\r\n * Available only when the network type is {@link NetworkType.Wifi}.\r\n */\r\n linkSpeed: number;\r\n\r\n /**\r\n * The received signal strength indicator of the network (dBm).\r\n *\r\n * Available only when the network type is {@link NetworkType.Wifi}.\r\n */\r\n signalStrength: number;\r\n}\r\n\r\n/**\r\n * The raw data from a network test.\r\n */\r\nexport interface NetworkTestResultData {\r\n /**\r\n * The measured downlink bandwidth (bps).\r\n */\r\n downlinkBandwidth: number;\r\n\r\n /**\r\n * The measured uplink bandwidth (bps).\r\n */\r\n uplinkBandwidth: number;\r\n\r\n /**\r\n * Measured latency (UDP RTT) with stream packets (ms).\r\n */\r\n latencyWithStream: number;\r\n\r\n /**\r\n * Measured Peak Bandwidth\r\n */\r\n maxTestBandwidthMbps: number;\r\n\r\n /**\r\n * Measured latency (UDP RTT) without stream packets (ms).\r\n */\r\n latencyWithoutStream: number;\r\n\r\n /**\r\n * Measured how many packets were lost/dropped (%).\r\n */\r\n packetLoss: number;\r\n\r\n /**\r\n * The 99th percentile of the measured frame jitter (ms).\r\n */\r\n percentile99thFrameJitter: number;\r\n\r\n /**\r\n * Measured Path MTU (bytes).\r\n */\r\n pathMtu: number;\r\n\r\n /**\r\n * Measured maximum packet size\r\n */\r\n maxPacketSize: number;\r\n\r\n /**\r\n * Number of retrieved valid profile thresholds.\r\n */\r\n thresholdCount: number;\r\n}\r\n\r\n/**\r\n * The raw threshold data from a network test.\r\n */\r\n export interface NetworkTestThreshold {\r\n /**\r\n * The minimum tolerable bandwidth required for streaming (Mbps).\r\n */\r\n bandwidthLimit: number;\r\n\r\n /**\r\n * Maximum tolerable (UDP RTT) latency required for streaming (ms).\r\n */\r\n latencyLimit: number;\r\n\r\n /**\r\n * Maximum tolerable 99th percentile frame jitter required for streaming (ms).\r\n */\r\n percentile99thFrameJitterLimit: number;\r\n\r\n /**\r\n * Maximum tolerable packet loss required for streaming (%).\r\n */\r\n packetLossLimit: number;\r\n\r\n /**\r\n * The recommended bandwidth for streaming (Mbps).\r\n */\r\n bandwidthRecommended: number;\r\n\r\n /**\r\n * Recommended latency for streaming (ms).\r\n */\r\n latencyRecommended: number;\r\n\r\n /**\r\n * Recommended 99th percentile frame jitter for streaming (ms).\r\n */\r\n percentile99thFrameJitterRecommended: number;\r\n\r\n /**\r\n * Recommended packet loss for streaming (%).\r\n */\r\n packetLossRecommended: number;\r\n\r\n /**\r\n * Width of the test.\r\n */\r\n width: number;\r\n\r\n /**\r\n * Height of the test.\r\n */\r\n height: number;\r\n\r\n /**\r\n * Framerate of the test.\r\n */\r\n frameRate: number;\r\n } \r\n\r\n/**\r\n * Represents the result of running a network test.\r\n */\r\nexport interface NetworkTestResult {\r\n /**\r\n * The result code.\r\n */\r\n resultCode: number;\r\n\r\n /**\r\n * The network test session identifier.\r\n */\r\n sessionId: string;\r\n\r\n /**\r\n * The information of the network used to perform the test.\r\n */\r\n info: NetworkTestNetworkInfo;\r\n\r\n /**\r\n * The raw test result data.\r\n */\r\n data: NetworkTestResultData;\r\n\r\n /**\r\n * The raw test result thresholds\r\n */\r\n thresholds: NetworkTestThreshold[];\r\n\r\n /**\r\n * True if the network is capable of streaming; Otherwise, false.\r\n */\r\n isCapable: boolean;\r\n\r\n /**\r\n * The streaming capability of the network.\r\n */\r\n capability: NetworkCapability;\r\n\r\n /**\r\n * The most capable streaming profile.\r\n */\r\n capableProfile: NetworkTestProfile;\r\n}\r\n\r\n/** @internal **/\r\nexport enum NativeNetworkTestResultCode {\r\n NCT_R_UNKNOWN = 0,\r\n NCT_R_SUCCESS = 1,\r\n NCT_R_INVALID_PARAM = 2,\r\n NCT_R_SYN_FAILED = 3,\r\n NCT_R_FIN_FAILED = 4,\r\n NCT_R_AUTH_FAILED = 5,\r\n NCT_R_POST_FAILED = 6,\r\n NCT_R_TEST_IN_PROGRESS = 7,\r\n NCT_R_CANCELLED = 8,\r\n NCT_R_CAPACITY_FULL = 9,\r\n NCT_R_SESSION_EXIST = 10,\r\n NCT_R_INVALID_DATA = 11,\r\n NCT_R_SETUP_FAILED = 12,\r\n NCT_R_RETRYABLE_POST_FAILURE = 13,\r\n NCT_R_BLOCK_STREAM = 14\r\n}\r\n\r\nexport interface NetworkTestEntry {\r\n networkFingerPrint: string; // Key\r\n server: string; // Secondary Key\r\n testRes: NetworkTestResult; // Value\r\n maxCapableProfile: NetworkTestProfile; // Test will need to be re-run if this changes\r\n}\r\n\r\n/**\r\n * Events that are dispatched from {@link GFN.streamer}.\r\n */\r\nexport interface NetworkTestEvents {\r\n /**\r\n * Sent when automatic network test has been initiated\r\n */\r\n started: () => void;\r\n\r\n /**\r\n * Sent when automatic network test has been finished\r\n */\r\n finished: () => void;\r\n\r\n /**\r\n * Sent when an error has occurred while performing network test\r\n */\r\n error: (e: string) => void;\r\n}\r\n","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport {\r\n AuthAgent,\r\n AuthErrorId,\r\n AuthPrompt,\r\n AuthResponseMode,\r\n AuthScope,\r\n LoginError,\r\n MissingTokenError\r\n} from \"./idm/auth.types\";\r\n\r\nimport { Utils } from \"./core/utils\";\r\nimport { KeyCode } from \"./input/keycode\";\r\nimport { XHRHttpClient } from \"./core/xhr-http-client\";\r\nimport { RestClient } from \"./rest/rest-client\";\r\nimport { RestClientError, RestClientGraphQLError } from \"./rest/rest-client.types\";\r\nimport { HttpClientFactory } from \"./core/http-client-factory\";\r\nimport { HttpBackoffStrategy, HttpCancelledError, HttpError, HttpErrorReason, HttpRetryMode, HttpStatusCode, HttpTimeoutError } from \"./core/http-client.types\";\r\nimport { RequestStatusError, HttpRequestStatusError, SessionRequestStatusError } from \"./server/server.types\";\r\nimport { StorageFactory } from \"./storage/storage-factory\";\r\nimport { LocalStorage } from \"./storage/local-storage\";\r\nimport { IDBStorage } from \"./storage/idb-storage\";\r\nimport { Entitlement } from \"./entitlement/entitlement\";\r\nimport { Settings } from \"./settings/settings\";\r\nimport { Catalog } from \"./catalog/catalog\";\r\nimport { DeviceKind, DeviceOrientation, DeviceOS } from \"./device/device.types\";\r\nimport { PlatformClass, PlatformID } from \"./platform/platform.types\";\r\nimport { ModifySessionAction, SessionErrorCode, SessionStatus } from \"./server/server.entities\";\r\nimport {\r\n StreamerDiagnosticLevel,\r\n StreamerMode,\r\n StreamProfilePreset,\r\n SessionSetupProgress,\r\n StreamerState,\r\n StreamerTerminationReason,\r\n StreamerNetworkQuality\r\n} from \"./streamer/streamer.types\";\r\nimport { AppDataLevelOfDetail, MediaAssetFlags } from \"./catalog/catalog.types\";\r\nimport { NetworkCapability, NetworkTestResultCode, NetworkType } from \"./networktest/network-test.types\";\r\nimport { APIErrorCode } from \"./api-error.types\";\r\nimport { APIError } from \"./api-error\";\r\nimport { StarfleetError } from \"./starfleet/starfleet.types\";\r\nimport { Auth } from \"./idm/auth\";\r\n\r\n// Include types that should be available in the js api. Do not include 'type' or 'interface' types\r\n// as these are only types available for use by the typescript compiler and have no meaning in the\r\n// generated javascript.\r\n//\r\n// Example:\r\n//\r\n// export interface Foo {\r\n// bar: number;\r\n// }\r\n//\r\n// You can't create a Foo interface (e.g. new Foo) and thus no type is generated for this, instead\r\n// if you want to expose this as a type that a developer can use (e.g. new Foo), then it must be\r\n// a class instead:\r\n//\r\n// export class Foo {\r\n// public bar: number = 0;\r\n// }\r\n//\r\n// Namespaces should be exposed with lowercase names and classes exposed as-is, which will produce\r\n// for example:\r\n//\r\n// Namespace => GFN.foo.bar()\r\n// Enum => GFN.FooEnum.Bar\r\n// Class => new GFN.FooClass()\r\n//\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class APIBase {\r\n // classes and enums\r\n public readonly APIError: any = APIError;\r\n public readonly APIErrorCode: any = APIErrorCode;\r\n public readonly AppDataLevelOfDetail: any = AppDataLevelOfDetail;\r\n public readonly Auth: any = Auth;\r\n public readonly AuthErrorId: any = AuthErrorId;\r\n public readonly AuthPrompt: any = AuthPrompt;\r\n public readonly AuthResponseMode: any = AuthResponseMode;\r\n public readonly AuthScope: any = AuthScope;\r\n public readonly AuthAgent: any = AuthAgent;\r\n public readonly Catalog: any = Catalog;\r\n public readonly DeviceKind: any = DeviceKind;\r\n public readonly DeviceOS: any = DeviceOS;\r\n public readonly DeviceOrientation: any = DeviceOrientation;\r\n public readonly Entitlement: any = Entitlement;\r\n public readonly HttpBackoffStrategy: any = HttpBackoffStrategy;\r\n public readonly HttpCancelledError: any = HttpCancelledError;\r\n public readonly HttpClientFactory: any = HttpClientFactory;\r\n public readonly HttpError: any = HttpError;\r\n public readonly HttpErrorReason: any = HttpErrorReason;\r\n public readonly HttpRequestStatusError: any = HttpRequestStatusError;\r\n public readonly HttpRetryMode: any = HttpRetryMode;\r\n public readonly HttpStatusCode: any = HttpStatusCode;\r\n public readonly HttpTimeoutError: any = HttpTimeoutError;\r\n public readonly IDBStorage: any = IDBStorage;\r\n public readonly KeyCode: any = KeyCode;\r\n public readonly LocalStorage: any = LocalStorage;\r\n public readonly LoginError: any = LoginError;\r\n public readonly MediaAssetFlags: any = MediaAssetFlags;\r\n public readonly MissingTokenError: any = MissingTokenError;\r\n public readonly ModifySessionAction: any = ModifySessionAction;\r\n public readonly NetworkCapability: any = NetworkCapability;\r\n public readonly NetworkTestResultCode: any = NetworkTestResultCode;\r\n public readonly NetworkType: any = NetworkType;\r\n public readonly PlatformClass: any = PlatformClass;\r\n public readonly PlatformID: any = PlatformID;\r\n public readonly RequestStatusError: any = RequestStatusError;\r\n public readonly RestClient: any = RestClient;\r\n public readonly RestClientError: any = RestClientError;\r\n public readonly RestClientGraphQLError: any = RestClientGraphQLError;\r\n public readonly SessionErrorCode: any = SessionErrorCode;\r\n public readonly SessionRequestStatusError: any = SessionRequestStatusError;\r\n public readonly SessionSetupProgress: any = SessionSetupProgress;\r\n public readonly SessionStatus: any = SessionStatus;\r\n public readonly Settings: any = Settings;\r\n public readonly StarfleetError: any = StarfleetError;\r\n public readonly StorageFactory: any = StorageFactory;\r\n public readonly StreamProfilePreset: any = StreamProfilePreset;\r\n public readonly StreamerDiagnosticLevel: any = StreamerDiagnosticLevel;\r\n public readonly StreamerMode: any = StreamerMode;\r\n public readonly StreamerState: any = StreamerState;\r\n public readonly StreamerTerminationReason: any = StreamerTerminationReason;\r\n public readonly XHRHttpClient: any = XHRHttpClient;\r\n public readonly StreamerNetworkQuality: any = StreamerNetworkQuality;\r\n\r\n // namespaces\r\n public readonly utils: any = Utils;\r\n}","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../../api-error\";\r\nimport { APIErrorCode } from \"../../api-error.types\";\r\nimport { Nullable } from \"../../core/util.types\";\r\nimport { Utils } from \"../../core/utils\";\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { DeviceKind } from \"../device.types\";\r\n\r\nconst logger = Logging.getLogger(\"android-device-proxy\");\r\n\r\nexport interface AndroidDeviceInfo {\r\n model: string;\r\n product: string;\r\n manufacturer: string;\r\n brand: string;\r\n hardware: string;\r\n serial: string;\r\n isEmulator: boolean;\r\n isShield: boolean;\r\n isChromebook: boolean;\r\n isTouch: boolean;\r\n version: string;\r\n api: number;\r\n kind: DeviceKind\r\n density: number;\r\n rotation: number;\r\n screenWidth: number;\r\n screenHeight: number;\r\n currentOrientation: number;\r\n naturalOrientation: number;\r\n supportedAudioChannels: number;\r\n runtimeVersion: string;\r\n runtimeVersionTag: string;\r\n appName: string;\r\n appVersion: string;\r\n browserId: string;\r\n browserVersion: string;\r\n cpuName: string;\r\n processorArchitecture: string;\r\n networkType: number;\r\n networkName: string;\r\n displayDetails: AndroidDeviceDisplayDetails[];\r\n isHdrDecodingSupported: boolean;\r\n isHdrRenderingSupported: boolean;\r\n callbackUrlScheme: string;\r\n callbackUrlHost: string;\r\n}\r\n\r\nexport interface AndroidDeviceDisplayDetails {\r\n physicalRes: string;\r\n logicalRes: string;\r\n refreshRate: number;\r\n displayNumber: number;\r\n}\r\n\r\nexport class AndroidPlatformDeviceProxy implements PlatformDevice {\r\n private readonly mId: string;\r\n private readonly mInfo: PlatformDeviceInfo;\r\n private readonly mNativePlatformDevice: AndroidPlatformDevice;\r\n private readonly mNativeInfo: Nullable = null;\r\n\r\n public get id(): string {\r\n return this.mId;\r\n }\r\n\r\n public get info(): PlatformDeviceInfo {\r\n return this.mInfo;\r\n }\r\n\r\n public get nativeInfo(): AndroidDeviceInfo {\r\n return this.mNativeInfo!;\r\n }\r\n\r\n constructor(nativePlatformDevice: AndroidPlatformDevice) {\r\n const json: string = nativePlatformDevice.getInfoJson();\r\n\r\n try {\r\n this.mNativeInfo = JSON.parse(json) as AndroidDeviceInfo;\r\n } catch (e: any) {\r\n logger.error(`Unable to parse native device info. ${e.message}`);\r\n }\r\n\r\n if (!this.mNativeInfo) {\r\n throw new APIError(APIErrorCode.InvalidDeviceInfo);\r\n }\r\n\r\n this.mNativePlatformDevice = nativePlatformDevice;\r\n this.mId = nativePlatformDevice.getId();\r\n this.mInfo = {\r\n manufacturer: this.mNativeInfo.manufacturer,\r\n model: this.mNativeInfo.model,\r\n product: this.mNativeInfo.product,\r\n brand: this.mNativeInfo.brand,\r\n hardware: this.mNativeInfo.hardware,\r\n serial: this.mNativeInfo.serial,\r\n isEmulator: this.mNativeInfo.isEmulator,\r\n version: this.mNativeInfo.version,\r\n runtimeVersion: this.mNativeInfo.runtimeVersion,\r\n runtimeVersionTag: this.mNativeInfo.runtimeVersionTag,\r\n appName: this.mNativeInfo.appName,\r\n appVersion: this.mNativeInfo.appVersion,\r\n browserId: this.mNativeInfo.browserId,\r\n browserVersion: this.mNativeInfo.browserVersion,\r\n cpuName: this.mNativeInfo.cpuName,\r\n processorArchitecture: this.mNativeInfo.processorArchitecture,\r\n networkType: this.mNativeInfo.networkType,\r\n networkName: this.mNativeInfo.networkName,\r\n displayDetails: this.mNativeInfo.displayDetails,\r\n isHdrDecodingSupported: false,\r\n isHdrRenderingSupported: false,\r\n callbackUrlScheme: this.mNativeInfo.callbackUrlScheme,\r\n callbackUrlHost: this.mNativeInfo.callbackUrlHost\r\n };\r\n\r\n // sdk-compat (isHdrDecodingSupported)\r\n if (Utils.object.exists(this.mNativeInfo, \"isHdrDecodingSupported\")) {\r\n this.mInfo.isHdrDecodingSupported = this.mNativeInfo.isHdrDecodingSupported;\r\n }\r\n\r\n // sdk-compat (isHdrRenderingSupported)\r\n if (Utils.object.exists(this.mNativeInfo, \"isHdrRenderingSupported\")) {\r\n this.mInfo.isHdrRenderingSupported = this.mNativeInfo.isHdrRenderingSupported;\r\n }\r\n\r\n if (Utils.object.exists(this.mNativeInfo, \"networkName\")) {\r\n this.mInfo.networkName = this.mNativeInfo.networkName;\r\n }\r\n }\r\n\r\n public launchBrowser(url: string): void {\r\n this.mNativePlatformDevice.launchBrowser(url);\r\n }\r\n\r\n /** @internal @deprecated */\r\n public getLogFile(type: number): string {\r\n return this.mNativePlatformDevice.getLogFile(type);\r\n }\r\n}","/* Copyright (c) 2024-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/** @internal **/\r\nexport enum PlatformGestureType {\r\n Tap = 0,\r\n LongPress,\r\n LongPressEnd\r\n}\r\n\r\n/** @internal **/\r\nexport const enum GestureType {\r\n Tap = \"Tap\",\r\n LongPress = \"LongPress\",\r\n PinchZoom = \"PinchZoom\"\r\n}\r\n\r\n/** @internal **/\r\nexport interface GestureHelperEvent {\r\n gestureType: GestureType;\r\n touchX: number;\r\n touchY: number;\r\n}\r\n\r\nexport interface GestureHelperEvents {\r\n gesture: (e: GestureHelperEvent) => void;\r\n}\r\n","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Represents the value used in the {@link BaseStreamerConfiguration.audioChannels}\r\n * streamer configuration.\r\n */\r\nexport enum AudioChannelsConfigurationValue {\r\n /**\r\n * Use 2 channel stereo.\r\n */\r\n STEREO = 2,\r\n\r\n /**\r\n * Use 5.1 (6-channel) surround sound.\r\n */\r\n SURROUND_5_1 = 6,\r\n\r\n /**\r\n * Use 7.1 (8-channel) surround sound.\r\n */\r\n SURROUND_7_1 = 8,\r\n}\r\n\r\nexport interface BaseStreamerConfiguration {\r\n useWebSocketSignaling: boolean;\r\n enableMicrophone: boolean;\r\n audioChannels?: AudioChannelsConfigurationValue;\r\n\r\n // TODO: add common Ragnarok and Android streamer configurations\r\n}","/* Copyright (c) 2021-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { BaseStreamerConfiguration } from \"../base/base-streamer.types\";\r\n\r\n/**\r\n * Represents the value used in the {@link AndroidStreamerDebugConfiguration.bitStreamCaptureMode}\r\n * configuration.\r\n */\r\n export enum BitStreamCaptureMode {\r\n /**\r\n * Bit stream capture is disabled.\r\n */\r\n Disabled = 0,\r\n\r\n /**\r\n * Enable client capture only.\r\n */\r\n Client = 1,\r\n\r\n /**\r\n * Enable server capture only.\r\n */\r\n Server = 2,\r\n\r\n /**\r\n * Enable both client and server capture.\r\n */\r\n Both = BitStreamCaptureMode.Client | BitStreamCaptureMode.Server\r\n}\r\n\r\n/**\r\n * Represents the value used in the {@link AndroidStreamerDebugConfiguration.decoderProfilingLevel}\r\n * configuration.\r\n */\r\nexport enum DecoderProfilingLevel {\r\n /**\r\n * Decoder profiling is disabled.\r\n */\r\n Disabled = 0,\r\n\r\n /**\r\n * Decoder profiling is enabled.\r\n */\r\n Enabled = 1,\r\n\r\n /**\r\n * Enable end-to-end decoder latency profiling.\r\n */\r\n LatencyE2E = 1024\r\n}\r\n\r\nexport interface AndroidStreamerDebugConfiguration {\r\n bitStreamCaptureMode?: BitStreamCaptureMode;\r\n decoderProfilingLevel?: DecoderProfilingLevel;\r\n enableClientStatsRecording?: boolean;\r\n enableEventLogging?: boolean;\r\n enableE2ELatencyProfiling?: boolean;\r\n}\r\n\r\nexport interface AndroidStreamerConfiguration extends BaseStreamerConfiguration {\r\n enableStreamRecoveryWithIDR?: boolean;\r\n enableTSRendering?: boolean;\r\n enableContinuousDecoding?: boolean;\r\n enableAAudioSink?: boolean;\r\n debug?: AndroidStreamerDebugConfiguration;\r\n enableDynamicResolutionChange?: boolean;\r\n mouseEventSamplingFrequency?: number;\r\n touchRateLimiterThreshold?: number;\r\n internalFeatureConfig?: string;\r\n}","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\nimport {\r\n BrowserCallbackHandler,\r\n BrowserID,\r\n DeviceEvents,\r\n DeviceInformation,\r\n DeviceKind,\r\n DeviceLogType,\r\n DeviceOrientation,\r\n DeviceOS,\r\n DisplayDetails\r\n} from \"./device.types\";\r\nimport { PlatformClass, PlatformID } from \"../platform/platform.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { IInitializable, Nullable, Size } from \"../core/util.types\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { AudioChannelsConfigurationValue, NetworkType } from \"../shared-types\";\r\nimport { getPlatformDetails, IsTouchDevice, PlatformDetails } from \"@gamestream-stable/gridserver\";\r\nimport { FromGsDeviceOS, FromGsBrowserName, FromGsDeviceType } from \"../platform/platform-mappings\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { LogFile } from \"../logging/logging.types\";\r\n\r\nconst GFN_DEVICE_ID_STORAGE_KEY: string = \"$$nv-gfn-device-id\";\r\nconst logger = Logging.getLogger(\"device\");\r\n\r\n/**\r\n * Contains device details and routines for interacting with the host device.\r\n */\r\nexport class Device extends EventEmitter implements IInitializable {\r\n private static deviceInfo: Nullable = null;\r\n\r\n private mId: string = \"\";\r\n private mPlatformID: Nullable = null;\r\n private mPlatformClass: Nullable = null;\r\n private readonly mBrowserCallbacks: Map = new Map();\r\n private mAppName: string = \"\";\r\n private mAppVersion: string = \"\";\r\n\r\n /** @internal **/\r\n protected readonly mPlatformDevice: Nullable;\r\n /** @internal */\r\n protected mConfiguration!: Configuration;\r\n\r\n /**\r\n * Get the information about the device.\r\n *\r\n * @throws {@link APIError} with {@link APIErrorCode.InvalidState}\r\n * The device information is not yet available.\r\n */\r\n public static get Information(): DeviceInformation {\r\n if (!Device.deviceInfo) {\r\n throw new APIError(APIErrorCode.InvalidState, \"Device information is not yet available.\");\r\n }\r\n\r\n return Device.deviceInfo;\r\n }\r\n\r\n /**\r\n * True, if gamepad is connected; otherwise, false.\r\n * Consider all TV platforms to have gamepad connected.\r\n */\r\n public get isGamepadConnected(): boolean {\r\n // TODO: Gamepad detection on TV\r\n if (this.platformClass === PlatformClass.TV) {\r\n return true;\r\n }\r\n return Device.getGamepads().some(gp => gp?.connected);\r\n }\r\n\r\n /**\r\n * True, if the device is running in a browser; otherwise, false.\r\n */\r\n public get isBrowser(): boolean {\r\n return (this.platformId === PlatformID.Browser);\r\n }\r\n\r\n /**\r\n * True, if the device is running on a native (non-browser) device; otherwise, false.\r\n */\r\n public get isNative(): boolean {\r\n return (this.mPlatformDevice !== null);\r\n }\r\n\r\n /**\r\n * True, if the device is running on a handheld device; otherwise, false.\r\n */\r\n public get isMobile(): boolean {\r\n return (this.platformClass === PlatformClass.Mobile);\r\n }\r\n\r\n /**\r\n * True, if the device supports touch; otherwise, false;\r\n */\r\n public get isTouch(): boolean {\r\n return IsTouchDevice();\r\n }\r\n\r\n /**\r\n * True, if this is a mobile touch device; otherwise, false;\r\n */\r\n public get isMobileTouch(): boolean {\r\n return (this.isMobile && this.isTouch);\r\n }\r\n\r\n /**\r\n * Gets a value which can be used to identify the device.\r\n */\r\n public get id(): string {\r\n return this.mId;\r\n }\r\n\r\n /**\r\n * Gets the underlying operating system of the device.\r\n */\r\n public get os(): DeviceOS {\r\n return Device.Information.os;\r\n }\r\n\r\n /**\r\n * Gets the type of device.\r\n */\r\n public get kind(): DeviceKind {\r\n return Device.Information.kind;\r\n }\r\n\r\n /**\r\n * Gets the size of the screen, in pixels.\r\n */\r\n public get screenSizeInPixels(): Size {\r\n return {\r\n width: screen.width,\r\n height: screen.height\r\n };\r\n }\r\n\r\n /**\r\n * Gets the device scaling factor (e.g. pixel ratio)\r\n */\r\n public get scaleFactor(): number {\r\n return window.devicePixelRatio;\r\n }\r\n\r\n /**\r\n * Gets the current physical device orientation.\r\n * @internal\r\n */\r\n public get orientation(): DeviceOrientation {\r\n // TODO: detect device orientation\r\n return DeviceOrientation.Other;\r\n }\r\n\r\n /**\r\n * Gets the name of the device manufacturer, if available.\r\n */\r\n public get manufacturer(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.manufacturer;\r\n }\r\n\r\n return Device.Information.manufacturer ?? \"\";\r\n }\r\n\r\n /**\r\n * Gets the name of the device brand, if available.\r\n */\r\n public get brand(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.brand ?? \"\";\r\n }\r\n\r\n // not possible to get brand in browser environment\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the name of the device hardware, if available.\r\n */\r\n public get hardware(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.hardware ?? \"\";\r\n }\r\n\r\n // not possible to get hardware in browser environment\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the serial number of the device, if available.\r\n */\r\n public get serial(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.serial;\r\n }\r\n\r\n // not possible to get serial number in browser environment\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the version of the underlying device platform.\r\n */\r\n public get version(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.version;\r\n }\r\n\r\n return Device.Information.version;\r\n }\r\n\r\n /**\r\n * Gets the model of the device, if available.\r\n */\r\n public get model(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.model;\r\n }\r\n\r\n return Device.Information.model ?? \"\";\r\n }\r\n\r\n /**\r\n * Gets the product name of the device, if available.\r\n */\r\n public get product(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.product;\r\n }\r\n\r\n return Device.Information.product ?? \"\";\r\n }\r\n\r\n /**\r\n * Returns whether this is running on an emulator.\r\n */\r\n public get isEmulator(): boolean {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.isEmulator;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the browser name, if available\r\n */\r\n public get browserId(): BrowserID {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.browserId as BrowserID;\r\n }\r\n\r\n return Device.Information.browser;\r\n }\r\n\r\n /**\r\n * Gets the browser version, if available\r\n */\r\n public get browserVersion(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.browserVersion;\r\n }\r\n\r\n return Device.Information.browserVersion;\r\n }\r\n\r\n /**\r\n * Gets the CPU name, if available\r\n */\r\n public get cpuName(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.cpuName;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the processor architecture, if available\r\n */\r\n public get processorArchitecture(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.processorArchitecture;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the network type, if available.\r\n */\r\n public get networkType(): NetworkType {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.networkType;\r\n }\r\n\r\n // TODO: determine network type\r\n return NetworkType.None;\r\n }\r\n\r\n /**\r\n * Gets the network name, if available.\r\n */\r\n public get networkName(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.networkName;\r\n }\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the display details, if available.\r\n */\r\n public get displays(): DisplayDetails[] {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.displayDetails;\r\n }\r\n\r\n const screenSize: Size = this.screenSizeInPixels;\r\n const scaleFactor: number = this.scaleFactor;\r\n\r\n return [{\r\n displayNumber: 0,\r\n logicalRes: `${screenSize.width}x${screenSize.height}`,\r\n physicalRes: `${Math.floor(screenSize.width * scaleFactor)}x${Math.floor(screenSize.height * scaleFactor)}`,\r\n\r\n // TODO: for browser, we can estimate the refresh rate\r\n // using requestAnimationFrame and then round it\r\n // to the nearest acceptable rate (30, 60, ..)\r\n //\r\n // sdk-todo (GFNSDK-1819)\r\n refreshRate: 0\r\n }]\r\n }\r\n\r\n /**\r\n * True, if HDR decoding is supported on this device; otherwise, false.\r\n */\r\n public get isHdrDecodingSupported(): boolean {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.isHdrDecodingSupported;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * True, if HDR rendering is supported on this device; otherwise, false.\r\n */\r\n public get isHdrRenderingSupported(): boolean {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.isHdrRenderingSupported;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets the user agent string of the browser.\r\n */\r\n public get userAgent(): string {\r\n return navigator.userAgent;\r\n }\r\n\r\n\r\n /**\r\n * Gets the number of audio channels supported.\r\n */\r\n public get supportedAudioChannels(): number {\r\n // TODO: this is just a quick implementation and needs further testing, it's likely\r\n // we'll need to perform an audio sampling, similar to what we do in native android\r\n // to determine and get the channel count from there.\r\n //\r\n // TODO: do some testing and find out if we can use the Web Audio API's only, instead of\r\n // finding the supported channels natively.\r\n if (\"AudioContext\" in window || \"webkitAudioContext\" in window) {\r\n const audioContext: AudioContext = new (window.AudioContext || (window).webkitAudioContext)();\r\n const channelCount: number = audioContext.destination.channelCount;\r\n\r\n if (channelCount >= 8) {\r\n return AudioChannelsConfigurationValue.SURROUND_7_1;\r\n }\r\n\r\n if (channelCount >= 6) {\r\n return AudioChannelsConfigurationValue.SURROUND_5_1;\r\n }\r\n }\r\n\r\n return AudioChannelsConfigurationValue.STEREO;\r\n }\r\n\r\n /**\r\n * Gets a value that can identify the host platform.\r\n */\r\n public get platformId(): PlatformID {\r\n if (!this.mPlatformID) {\r\n this.mPlatformID = this.detectPlatformId();\r\n }\r\n\r\n return this.mPlatformID!;\r\n }\r\n\r\n /**\r\n * Gets a value that classifies the type of platform.\r\n */\r\n public get platformClass(): PlatformClass {\r\n if (!this.mPlatformClass) {\r\n this.mPlatformClass = this.detectPlatformClass();\r\n }\r\n\r\n return this.mPlatformClass!;\r\n }\r\n\r\n /**\r\n * Gets the version of the native GFN Client SDK Runtime.\r\n *\r\n * The value will be empty when running in a browser.\r\n */\r\n public get runtimeVersion(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.runtimeVersion;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the version tag of the native GFN Client SDK Runtime.\r\n *\r\n * The value will be empty when running in a browser.\r\n */\r\n public get runtimeVersionTag(): string {\r\n if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.runtimeVersionTag;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the client application name, if available.\r\n *\r\n * The value will default to the page url when running in a browser.\r\n */\r\n public get appName(): string {\r\n if (this.mAppName) {\r\n return this.mAppName;\r\n } else if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.appName;\r\n }\r\n\r\n return window.location.href;\r\n }\r\n\r\n /**\r\n * Gets the client application version, if available.\r\n *\r\n * The value will be empty when running in a browser.\r\n */\r\n public get appVersion(): string {\r\n if (this.mAppVersion) {\r\n return this.mAppVersion;\r\n } else if (this.mPlatformDevice) {\r\n return this.mPlatformDevice.info.appVersion;\r\n }\r\n\r\n return \"Unknown\";\r\n }\r\n\r\n /** @internal **/\r\n constructor(platformDevice: Nullable = null) {\r\n super();\r\n\r\n this.mPlatformDevice = platformDevice;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(ctx: IInitializeContext): Promise {\r\n this.mConfiguration = ctx.configuration;\r\n\r\n const storage: IStorage = ctx.storage;\r\n\r\n let deviceId: string = (this.mPlatformDevice ? this.mPlatformDevice.id : \"\");\r\n\r\n if (!deviceId) {\r\n const cachedDeviceId: any = await storage.get(GFN_DEVICE_ID_STORAGE_KEY);\r\n\r\n if (cachedDeviceId) {\r\n deviceId = cachedDeviceId as string;\r\n }\r\n }\r\n\r\n // no device id, create one and save it\r\n if (!deviceId) {\r\n deviceId = Utils.uuid.create();\r\n\r\n await storage.set(GFN_DEVICE_ID_STORAGE_KEY, deviceId);\r\n }\r\n\r\n this.mId = deviceId;\r\n this.mAppName = ctx.settings.appName;\r\n this.mAppVersion = ctx.settings.appVersion;\r\n }\r\n\r\n /**\r\n * Launches the built-in browser.\r\n *\r\n * When running in a browser environment, opens a new window to\r\n * the specified url.\r\n *\r\n * @param url\r\n * The url to load.\r\n */\r\n public launchBrowser(url: string): void {\r\n if (this.mPlatformDevice) {\r\n this.mPlatformDevice.launchBrowser(url);\r\n } else {\r\n window.open(url, \"_blank\");\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public getCallbackUrl(): string {\r\n if (this.mPlatformDevice) {\r\n const scheme: string = this.mPlatformDevice.info.callbackUrlScheme;\r\n const host: string = this.mPlatformDevice.info.callbackUrlHost;\r\n\r\n return `${scheme}://${host}`;\r\n }\r\n\r\n return this.mConfiguration.sdk.browserCallbackUrl;\r\n }\r\n\r\n /** @internal **/\r\n public static getGamepads(): (Gamepad|null)[] {\r\n if (!navigator.getGamepads) {\r\n return [];\r\n }\r\n\r\n const gamepads = navigator.getGamepads();\r\n if (gamepads instanceof Array) {\r\n return gamepads;\r\n } else {\r\n // Some browsers return GamepadList\r\n const gamepadList = gamepads as ArrayLike;\r\n return Array.from(gamepadList).filter(g => !!g);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a url that, when loaded, can be used to launch an app from a browser.\r\n *\r\n * @param action\r\n * The action that identifies the callback.\r\n *\r\n * @param obj\r\n * The object to pass into the app.\r\n *\r\n * @returns\r\n * The url to to load.\r\n */\r\n public createCallbackUrl(action: string, obj: any): string {\r\n const callbackUrl: string = this.getCallbackUrl();\r\n let url: string = `${callbackUrl}/app_callback/${action}`;\r\n\r\n if (obj) {\r\n url += \"?\";\r\n\r\n Object.getOwnPropertyNames(obj).forEach((p: string) => {\r\n url += `${p}=${encodeURIComponent(obj[p])}&`;\r\n });\r\n\r\n url = url.substr(0, url.length - 1);\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Registers a callback handler that is invoked from a browser action.\r\n *\r\n * @param action\r\n * The action to register the handler for.\r\n *\r\n * @param handler\r\n * The handler to be invoked.\r\n */\r\n public registerBrowserCallback(action: string, handler: BrowserCallbackHandler): void {\r\n let callbacks: BrowserCallbackHandler[] = [];\r\n\r\n if (this.mBrowserCallbacks.has(action)) {\r\n callbacks = this.mBrowserCallbacks.get(action) as BrowserCallbackHandler[];\r\n }\r\n\r\n callbacks.push(handler);\r\n this.mBrowserCallbacks.set(action, callbacks);\r\n }\r\n\r\n\r\n /** @internal **/\r\n public handleBrowserCallback(action: string, obj: any): void {\r\n logger.verbose(`handleBrowserCallback: ${action}`, obj);\r\n\r\n if (this.mBrowserCallbacks.has(action)) {\r\n const callbacks: BrowserCallbackHandler[] = this.mBrowserCallbacks.get(action) as BrowserCallbackHandler[];\r\n\r\n for (const cb of callbacks) {\r\n try {\r\n cb(obj);\r\n }\r\n catch (e) {\r\n logger.error(`Error executing '${action}' callback. `, e);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal @deprecated */\r\n public getLogFile(): Nullable {\r\n if (this.mPlatformDevice?.getLogFile) {\r\n return {\r\n filename: \"logcat.txt\",\r\n contents: this.mPlatformDevice.getLogFile(DeviceLogType.Process)\r\n };\r\n }\r\n\r\n // Non-native logs will be streamed\r\n return null;\r\n }\r\n\r\n private detectPlatformId(): PlatformID {\r\n\r\n // running under a native host (e.g. non-browser)\r\n if (this.mPlatformDevice) {\r\n return this.detectNativePlatformId();\r\n }\r\n\r\n // running in a non-native host (e.g. browser or other web-based platform)\r\n switch (this.os) {\r\n case DeviceOS.webOS:\r\n return PlatformID.LGTV;\r\n case DeviceOS.Tizen:\r\n return PlatformID.SamsungTV;\r\n }\r\n\r\n return PlatformID.Browser;\r\n }\r\n\r\n private detectNativePlatformId(): PlatformID {\r\n switch (this.os) {\r\n case DeviceOS.Shield:\r\n return PlatformID.Shield;\r\n case DeviceOS.ChromeOS:\r\n return PlatformID.Chromebook;\r\n case DeviceOS.FireOS:\r\n return PlatformID.AmazonFire;\r\n case DeviceOS.Android:\r\n return this.detectNativeAndroidPlatformId();\r\n case DeviceOS.Windows:\r\n return PlatformID.Windows;\r\n case DeviceOS.macOS:\r\n return PlatformID.Mac;\r\n case DeviceOS.iOS:\r\n case DeviceOS.iPadOS:\r\n return PlatformID.AppleMobile;\r\n case DeviceOS.tvOS:\r\n return PlatformID.AppleTV;\r\n case DeviceOS.Linux:\r\n return PlatformID.Linux;\r\n }\r\n\r\n logger.warn(\"Unable to determine the native platform id.\");\r\n\r\n // fallback to browser platform\r\n return PlatformID.Browser;\r\n }\r\n\r\n private detectNativeAndroidPlatformId(): PlatformID {\r\n if (Utils.string.contains(this.model, \"chromecast\")) {\r\n return PlatformID.ChromeCast;\r\n }\r\n\r\n if (Utils.string.contains(this.hardware, \"kirin\") || Utils.string.contains(this.hardware, \"hisilicon\") || Utils.string.contains(this.manufacturer, \"huawei\")) {\r\n return PlatformID.Huawei;\r\n }\r\n\r\n if (Utils.string.contains(this.manufacturer, \"xiaomi\") && Utils.string.contains(this.model, \"mibox\") && Utils.string.contains(this.hardware, \"amlogic\")) {\r\n return PlatformID.MiBox;\r\n }\r\n\r\n if (Utils.string.contains(this.manufacturer, \"tvision\") && Utils.string.contains(this.model, \"sei robotics\")) {\r\n return PlatformID.TVision;\r\n }\r\n\r\n if (Utils.string.contains(this.brand, \"kbro\") && Utils.string.contains(this.manufacturer, \"askey\") && Utils.string.contains(this.model, \"a0_s905x2\")) {\r\n return PlatformID.KbroA0;\r\n }\r\n\r\n if (Utils.string.contains(this.model, \"tvision\") && Utils.string.contains(this.model, \"sei robotics\")) {\r\n return PlatformID.TVision;\r\n }\r\n\r\n if (Utils.string.contains(this.model, \"uie4027lgu\") || Utils.string.contains(this.model, \"s60upi\")) {\r\n return PlatformID.LGUPlus;\r\n }\r\n\r\n if (Utils.string.contains(this.brand, \"jio\") && Utils.string.contains(this.hardware, \"amlogic\")) {\r\n return PlatformID.JioStb;\r\n }\r\n\r\n return PlatformID.Android;\r\n }\r\n\r\n private detectPlatformClass(): PlatformClass {\r\n switch (this.kind) {\r\n case DeviceKind.Phone:\r\n case DeviceKind.Tablet:\r\n return PlatformClass.Mobile;\r\n case DeviceKind.TV:\r\n return PlatformClass.TV;\r\n // laptop is much more in the desktop class than mobile class\r\n // of devices\r\n case DeviceKind.Laptop:\r\n case DeviceKind.Desktop:\r\n case DeviceKind.Server:\r\n return PlatformClass.Desktop;\r\n case DeviceKind.Console:\r\n return PlatformClass.Console;\r\n default:\r\n // fall through to Web as the default when\r\n // the class cannot be determined\r\n return PlatformClass.Web;\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * Use {@link Streamer.isSupported | GFN.streamer.isSupported} instead\r\n */\r\n public get isStreamingSupported(): boolean {\r\n // redirect to streamer api for now until this is removed\r\n if (\"GFN\" in window) {\r\n return (window).GFN.streamer.isSupported;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /** @internal **/\r\n public static async RefreshInformation(): Promise {\r\n\r\n logger.verbose(\"refreshing information from browser...\");\r\n\r\n const platformDetails: PlatformDetails = await getPlatformDetails();\r\n let deviceInfo: DeviceInformation = {\r\n os: FromGsDeviceOS(platformDetails.deviceOS),\r\n kind: FromGsDeviceType(platformDetails.deviceType),\r\n version: platformDetails.osVer,\r\n manufacturer: platformDetails.vendor,\r\n model: platformDetails.deviceModel,\r\n product: \"\",\r\n browser: FromGsBrowserName(platformDetails.browser),\r\n browserVersion: platformDetails.browserVer\r\n };\r\n\r\n // when testing locally is almost alwways not going to be secure context, platform detection\r\n // only works well in a secure context for some platforms\r\n if (!window.isSecureContext) {\r\n switch (deviceInfo.os) {\r\n case DeviceOS.iOS:\r\n case DeviceOS.iPadOS:\r\n deviceInfo.browser = this.IsBrowserSafari() ? BrowserID.Safari : deviceInfo.browser;\r\n break;\r\n }\r\n }\r\n\r\n Device.deviceInfo = deviceInfo;\r\n\r\n logger.verbose(\"got information from browser:\");\r\n logger.verbose(JSON.stringify(deviceInfo));\r\n }\r\n\r\n private static IsBrowserSafari(): boolean {\r\n if (typeof window === \"undefined\") {\r\n return false;\r\n }\r\n\r\n return /safari/.test(navigator.userAgent.toLowerCase());\r\n }\r\n}","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { DeviceKind, DeviceOrientation, DeviceOS } from \"../device.types\";\r\nimport { Utils } from \"../../core/utils\";\r\nimport { Size } from \"../../core/util.types\";\r\nimport { AndroidPlatformDeviceProxy } from \"./android-device.types\";\r\nimport { Device } from \"../device\";\r\n\r\nconst ANDROID_ORIENTATION_PORTRAIT: number = 1;\r\nconst ANDROID_ORIENTATION_LANDSCAPE: number = 2;\r\n\r\nexport class AndroidDevice extends Device {\r\n private readonly mScreenSize: Size = { width: 0, height: 0};\r\n\r\n private get platformProxy(): AndroidPlatformDeviceProxy {\r\n return this.mPlatformDevice as AndroidPlatformDeviceProxy;\r\n }\r\n\r\n public get isTouch(): boolean {\r\n // sdk-compat (isTouch)\r\n if (Utils.object.exists(this.platformProxy.nativeInfo, \"isTouch\")) {\r\n return this.platformProxy.nativeInfo.isTouch;\r\n }\r\n\r\n return super.isTouch;\r\n }\r\n\r\n public get os(): DeviceOS {\r\n // sdk-compat (isShield)\r\n if (Utils.object.exists(this.platformProxy.nativeInfo, \"isShield\")) {\r\n if (this.platformProxy.nativeInfo.isShield) {\r\n return DeviceOS.Shield;\r\n }\r\n }\r\n\r\n // sdk-compat (isChromebook)\r\n if (Utils.object.exists(this.platformProxy.nativeInfo, \"isChromebook\")) {\r\n if (this.platformProxy.nativeInfo.isChromebook) {\r\n return DeviceOS.ChromeOS;\r\n }\r\n }\r\n\r\n // this is the Fire OS fork of Android\r\n if (Utils.string.contains(this.manufacturer, \"amazon\")) {\r\n return DeviceOS.FireOS;\r\n }\r\n\r\n return DeviceOS.Android;\r\n }\r\n\r\n public get kind(): DeviceKind {\r\n return this.platformProxy.nativeInfo.kind;\r\n }\r\n\r\n public get screenSizeInPixels(): Size {\r\n return this.mScreenSize;\r\n }\r\n\r\n public get scaleFactor(): number {\r\n return this.platformProxy.nativeInfo.density;\r\n }\r\n\r\n public get orientation(): DeviceOrientation {\r\n return this.computeOrientation();\r\n }\r\n\r\n public get supportedAudioChannels(): number {\r\n return this.platformProxy.nativeInfo.supportedAudioChannels;\r\n }\r\n\r\n constructor(platformDevice: AndroidPlatformDevice) {\r\n super(new AndroidPlatformDeviceProxy(platformDevice));\r\n\r\n this.mScreenSize = {\r\n width: this.platformProxy.nativeInfo.screenWidth,\r\n height: this.platformProxy.nativeInfo.screenHeight\r\n };\r\n }\r\n\r\n private computeOrientation(): DeviceOrientation {\r\n if (this.platformProxy.nativeInfo.naturalOrientation === ANDROID_ORIENTATION_PORTRAIT) {\r\n switch (this.platformProxy.nativeInfo.rotation) {\r\n case 0:\r\n return DeviceOrientation.PortraitUp;\r\n case 90:\r\n return DeviceOrientation.LandscapeLeft;\r\n case 180:\r\n return DeviceOrientation.PortraitDown;\r\n case 270:\r\n return DeviceOrientation.LandscapeRight;\r\n }\r\n }\r\n else if (this.platformProxy.nativeInfo.naturalOrientation === ANDROID_ORIENTATION_LANDSCAPE) {\r\n switch (this.platformProxy.nativeInfo.rotation) {\r\n case 0:\r\n return DeviceOrientation.LandscapeLeft;\r\n case 90:\r\n return DeviceOrientation.PortraitUp;\r\n case 180:\r\n return DeviceOrientation.LandscapeRight;\r\n case 270:\r\n return DeviceOrientation.PortraitDown;\r\n }\r\n }\r\n\r\n return DeviceOrientation.Other;\r\n }\r\n}","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Utility type which can be `undefined`.\r\n */\r\nexport type Undefined = T | undefined;\r\n\r\n/**\r\n * Utility type which can be `null`.\r\n */\r\nexport type Nullable = T | null;\r\n\r\n/**\r\n * Utility type which contains the fields from `T` and any non-primitive children of `T`.\r\n */\r\nexport type RecursivePartial = {\r\n [P in keyof T]?:\r\n T[P] extends (infer U)[] ? RecursivePartial[] :\r\n T[P] extends object ? RecursivePartial :\r\n T[P];\r\n };\r\n\r\n\r\n/**\r\n * Utility type which transforms a type union to a type intersection.\r\n */\r\nexport type TUnionToIntersection =\r\n (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;\r\n\r\n/**\r\n * Represents an object that requires post-construction initialization.\r\n */\r\nexport interface IInitializable {\r\n /**\r\n * When implemented, initializes the object instance.\r\n *\r\n * @param _\r\n * A contextual value or object that should be used to initialize\r\n * the object with.\r\n */\r\n initialize(_: T): Promise;\r\n}\r\n\r\n/**\r\n * Represents an object that can be cancelled.\r\n */\r\nexport interface Cancelable {\r\n /**\r\n * Cancels a previous operation.\r\n */\r\n cancel(): void;\r\n}\r\n\r\n/**\r\n * Utility type that defines a function callback.\r\n */\r\nexport interface Callback {\r\n (a: T): void;\r\n}\r\n\r\n/**\r\n * Utility type that defines a function callback which\r\n * returns a result value.\r\n */\r\nexport interface CallbackWithResult {\r\n (a: T): TResult;\r\n}\r\n\r\n/**\r\n * Represents a two-dimensional point in an x/y plane.\r\n */\r\nexport interface Point {\r\n /**\r\n * The x value.\r\n */\r\n x: number;\r\n\r\n /**\r\n * The y value.\r\n */\r\n y: number;\r\n}\r\n\r\n/**\r\n * Represents a size value.\r\n */\r\nexport interface Size {\r\n /**\r\n * The width.\r\n */\r\n width: number;\r\n\r\n /**\r\n * The height.\r\n */\r\n height: number;\r\n}\r\n\r\n/**\r\n * Represents a rectangular region.\r\n */\r\nexport interface Rect {\r\n /**\r\n * The x coordinate of the rect.\r\n */\r\n x: number;\r\n\r\n /**\r\n * The y coordinate of the rect.\r\n */\r\n y: number;\r\n\r\n /**\r\n * The width of the rect.\r\n */\r\n width: number;\r\n\r\n /**\r\n * The height of the rect.\r\n */\r\n height: number;\r\n}\r\n\r\n/**\r\n * Represents any generic object\r\n */\r\nexport interface IObject {\r\n [key: string]: any;\r\n}\r\n\r\n\r\n/** @internal **/\r\nexport class AspectRatio {\r\n public readonly width: number;\r\n public readonly height: number;\r\n public readonly ratio: number;\r\n\r\n constructor(w: number, h: number) {\r\n this.width = w;\r\n this.height = h;\r\n this.ratio = w / h;\r\n }\r\n\r\n public clip(f: AspectRatio): AspectRatio {\r\n if (Math.abs(f.ratio - this.ratio) < 0.05) {\r\n return f;\r\n }\r\n\r\n if (f.ratio > this.ratio) {\r\n return new AspectRatio(Math.floor(f.width * (this.ratio / f.ratio)), f.height);\r\n }\r\n\r\n return new AspectRatio(f.width, Math.floor(f.height * (f.ratio / this.ratio)));\r\n }\r\n\r\n public toSize(): Size {\r\n return {\r\n width: this.width,\r\n height: this.height\r\n };\r\n }\r\n\r\n public toString(): string {\r\n return `${this.width}x${this.height}:${this.ratio}`;\r\n }\r\n}\r\n\r\n/** @internal **/\r\nexport interface PropertyBag {\r\n [header: string]: string | string[];\r\n}\r\n\r\n/**\r\n * Represents the status of a documents user activation, as it is\r\n * returned from navigator.userActivation.\r\n */\r\nexport interface UserActivationStatus {\r\n isActive: boolean;\r\n hasBeenActive: boolean;\r\n hasUserActivationAPI: boolean;\r\n}\r\n\r\nexport type BrowserPermissionName = \"clipboard-read\" | \"microphone\" | \"notifications\";\r\n","import { GsErrorCode } from \"@gamestream-stable/gridserver\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { StreamerTerminationReason } from \"./streamer.types\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/streamer-errors\");\r\n\r\n/** @internal **/\r\nexport const STREAMER_GSERROR_TERMINATION_REASON_MAP: Map = new Map([\r\n [GsErrorCode.AuthTokenNotUpdated, StreamerTerminationReason.Unexpected],\r\n [GsErrorCode.InvalidAuthenticationCredentials, StreamerTerminationReason.Unexpected],\r\n [GsErrorCode.InvalidAuthenticationUnsupportedProtocol, StreamerTerminationReason.Unexpected],\r\n [GsErrorCode.ServiceUnAvailable, StreamerTerminationReason.ServiceUnAvailable],\r\n [GsErrorCode.MaintenanceStatus, StreamerTerminationReason.MaintenanceStatus],\r\n [GsErrorCode.InvalidSessionIdNotFound, StreamerTerminationReason.InvalidSessionIdNotFound],\r\n [GsErrorCode.AppPatching, StreamerTerminationReason.AppPatching],\r\n [GsErrorCode.AppMaintenanceStatus, StreamerTerminationReason.AppMaintenanceStatus],\r\n [GsErrorCode.GameNotFound, StreamerTerminationReason.GameNotFound],\r\n [GsErrorCode.EntitlementFailure, StreamerTerminationReason.EntitlementFailure],\r\n [GsErrorCode.RegionNotSupportedForStreaming, StreamerTerminationReason.RegionNotSupportedForStreaming],\r\n [GsErrorCode.RequestLimitExceeded, StreamerTerminationReason.RequestLimitExceeded],\r\n [GsErrorCode.SessionTerminatedByAnotherClient, StreamerTerminationReason.SessionTerminatedByAnotherClient],\r\n [GsErrorCode.RequiredSeatInstanceTypeNotSupported, StreamerTerminationReason.RequiredSeatInstanceTypeNotSupported],\r\n [GsErrorCode.ServerSessionQueueLengthExceeded, StreamerTerminationReason.ServerSessionQueueLengthExceeded],\r\n [GsErrorCode.GameBinariesNotAvailableInRegion, StreamerTerminationReason.GameBinariesNotAvailableInRegion],\r\n [GsErrorCode.ZoneMaintenanceStatus, StreamerTerminationReason.ZoneMaintenanceMode],\r\n [GsErrorCode.SessionRemovedFromQueueMaintenance, StreamerTerminationReason.SessionRemovedFromQueueMaintenance],\r\n [GsErrorCode.NetworkError, StreamerTerminationReason.NetworkError],\r\n [GsErrorCode.SessionLimitExceeded, StreamerTerminationReason.SetupSessionFailure],\r\n [GsErrorCode.ResponseParseFailure, StreamerTerminationReason.ServiceUnAvailable],\r\n [GsErrorCode.SessionServerErrorBegin, StreamerTerminationReason.ServiceUnAvailable],\r\n [GsErrorCode.NoInternetDuringSessionSetup, StreamerTerminationReason.NetworkError],\r\n]);\r\n\r\n/** @internal **/\r\nexport function MapGsErrorCodeToReason(GsErrorCode: GsErrorCode): StreamerTerminationReason {\r\n if (STREAMER_GSERROR_TERMINATION_REASON_MAP.has(GsErrorCode)) {\r\n return STREAMER_GSERROR_TERMINATION_REASON_MAP.get(GsErrorCode)!;\r\n }\r\n logger.error(`Could not map error session error code ${GsErrorCode}, defaulting to SetupSessionFailure`);\r\n return StreamerTerminationReason.SetupSessionFailure;\r\n}\r\n\r\n/** @internal **/\r\nexport const STREAMER_ERROR_MESSAGE_MAP: Map = new Map([\r\n [StreamerTerminationReason.SetupSessionFailure, \"streamer.error.sessionFailed\"],\r\n [StreamerTerminationReason.NetworkError, \"streamer.error.networkError\"],\r\n [StreamerTerminationReason.Unexpected, \"streamer.error.restartApp\"],\r\n [StreamerTerminationReason.ServiceUnAvailable, \"streamer.error.cloudDown\"],\r\n [StreamerTerminationReason.MaintenanceStatus, \"streamer.error.maintenance\"],\r\n [StreamerTerminationReason.InvalidSessionIdNotFound, \"streamer.error.userIdleTimeout\"],\r\n [StreamerTerminationReason.AppPatching, \"streamer.error.titleFenced\"],\r\n [StreamerTerminationReason.AppMaintenanceStatus, \"streamer.fencedStatus.offlineSupplementalText\"],\r\n [StreamerTerminationReason.GameNotFound, \"streamer.error.invalidId\"],\r\n [StreamerTerminationReason.EntitlementFailure, \"streamer.error.affiliateAccessError\"],\r\n [StreamerTerminationReason.RegionNotSupportedForStreaming, \"streamer.error.gfnNotAvailableInRegion\"],\r\n [StreamerTerminationReason.RequestLimitExceeded, \"streamer.error.tooManyRequests\"],\r\n [StreamerTerminationReason.SessionTerminatedByAnotherClient, \"streamer.error.playingOnAnotherStream\"],\r\n [StreamerTerminationReason.RequiredSeatInstanceTypeNotSupported, \"streamer.error.instanceTypeNotSupported\"],\r\n [StreamerTerminationReason.ServerSessionQueueLengthExceeded, \"streamer.error.sessionQueueLengthExceeded\"],\r\n [StreamerTerminationReason.GameBinariesNotAvailableInRegion, \"streamer.error.gameBinariesNotAvailableInRegion\"],\r\n [StreamerTerminationReason.ZoneMaintenanceMode, \"streamer.error.scheduleMaintenanceLoadingText\"],\r\n [StreamerTerminationReason.SessionRemovedFromQueueMaintenance, \"streamer.error.scheduleMaintenanceLoadingText\"],\r\n]);\r\n\r\n/** @internal **/\r\nexport function MapReasonToErrorMessage(reason: StreamerTerminationReason): string {\r\n if (STREAMER_ERROR_MESSAGE_MAP.has(reason)) {\r\n return STREAMER_ERROR_MESSAGE_MAP.get(reason)!;\r\n }\r\n return \"streamer.error.sessionFailed\";\r\n}\r\n\r\n/** @internal **/\r\nexport enum CommonDynamicRedirect {\r\n GfnServerStatus = \"gfn_service_status\"\r\n}\r\n\r\n/** @internal **/\r\nexport const STREAMER_CUSTOMER_CARE_LINKS_MAP: Map = new Map([\r\n [StreamerTerminationReason.ServiceUnAvailable, CommonDynamicRedirect.GfnServerStatus],\r\n [StreamerTerminationReason.MaintenanceStatus, CommonDynamicRedirect.GfnServerStatus],\r\n]);\r\n","/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport {\r\n AppLaunchMode,\r\n AppLevelProtocol,\r\n AuthInfo,\r\n AuthType,\r\n GridServer, GridSession,\r\n GsErrorCode,\r\n Protocol, SESSIONMODIFY_ACTION, SessionParams, SessionProgressState, SessionState, StreamInfo, Usage,\r\n} from \"@gamestream-stable/gridserver\";\r\nimport { Nullable } from \"../../core/util.types\";\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { StreamerTerminationReason, StreamParameters } from \"../streamer.types\";\r\nimport { MockGsInitParams, MockSessionParams } from \"./mock-streamer.types\";\r\n\r\nexport const MOCK_SESSION_ID = \"mockSessionId\";\r\nexport const MOCK_ZONE_NAME = \"mockZoneName\";\r\nexport const MOCK_ZONE_ADDRESS = \"mockserver.com\";\r\nexport const MOCK_GPU_TYPE = \"MOCK GeForce\";\r\nconst MOCK_IP = \"0.0.0.0\";\r\nconst MOCK_PORT = 0;\r\nconst MOCK_POLL_INTERVAL_MS = 500;\r\n\r\nconst DEFAULT_QUEUE_DURATION_TOTAL_SECONDS = 10;\r\nconst DEFAULT_FAIL_AFTER_SECONDS = -1;\r\nconst DEFAULT_TERMINATION_REASON = StreamerTerminationReason.SetupSessionFailure;\r\n\r\nconst logger = Logging.getLogger(\"mockGridServer\");\r\n\r\nexport class MockGridServer extends GridServer {\r\n private mMockParams: MockSessionParams;\r\n private mAuthInfo: AuthInfo;\r\n private mCancelledSetup: boolean;\r\n private mSession: Nullable;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.mMockParams = {};\r\n this.mAuthInfo = { type: AuthType.JWT_GFN };\r\n this.mCancelledSetup = false;\r\n this.mSession = null;\r\n }\r\n\r\n public initialize(initParams: MockGsInitParams): void {\r\n this.mMockParams = initParams.mock || {};\r\n this.mMockParams.queueDurationTotalSeconds ??= DEFAULT_QUEUE_DURATION_TOTAL_SECONDS;\r\n this.mMockParams.failAfterSeconds ??= DEFAULT_FAIL_AFTER_SECONDS;\r\n this.mMockParams.terminationReason ??= DEFAULT_TERMINATION_REASON;\r\n }\r\n\r\n public uninitialize() {\r\n }\r\n\r\n public getAllActiveSessions(): void {\r\n setTimeout(() => {\r\n const result = [this.mSession];\r\n this.eventEmitter.emit(\"ActiveSessionsResult\", result);\r\n });\r\n }\r\n\r\n /**\r\n * This method can be used to resume (PUT) or start (POST) a session.\r\n * Result is returned in promise with GridSession object.\r\n * @param startParams - object of SessionParams object.\r\n * @param action - value from SESSIONMODIFY_ACTION for resume or starting session.\r\n * @param sessionId - sessionId in case of resume\r\n **/\r\n public putOrPostSession(\r\n startParams: SessionParams,\r\n action: SESSIONMODIFY_ACTION,\r\n sessionId: string | undefined\r\n ): Promise {\r\n this.mCancelledSetup = false;\r\n return new Promise((resolve, reject) => {\r\n if (this.mCancelledSetup) {\r\n reject(this.cancelError(SessionProgressState.CONFIGURING));\r\n } else {\r\n this.mSession = {\r\n sessionId: sessionId || MOCK_SESSION_ID,\r\n subSessionId: this.subSessionId,\r\n signalConnectionInfo: {\r\n server: MOCK_ZONE_ADDRESS,\r\n ip: MOCK_IP,\r\n port: MOCK_PORT,\r\n protocol: \"https\",\r\n },\r\n mediaConnectionInfo: [{\r\n ip: MOCK_IP,\r\n port: MOCK_PORT,\r\n appLevelProtocol: AppLevelProtocol.HTTPS,\r\n protocol: Protocol.TCP,\r\n usage: Usage.SIGNALING,\r\n }, {\r\n ip: MOCK_IP,\r\n port: MOCK_PORT,\r\n appLevelProtocol: AppLevelProtocol.HTTPS,\r\n protocol: Protocol.UDP,\r\n usage: Usage.VIDEO,\r\n }],\r\n streamInfo: startParams.streamParams!.map((v: StreamParameters): StreamInfo => {\r\n return {\r\n width: v.width,\r\n height: v.height,\r\n fps: v.fps\r\n };\r\n }),\r\n appId: parseInt(startParams.appId),\r\n state: SessionState.INITIALIZING,\r\n appLaunchMode: startParams.appLaunchMode ?? AppLaunchMode.Default,\r\n zoneName: MOCK_ZONE_NAME,\r\n zoneAddress: MOCK_ZONE_ADDRESS,\r\n gpuType: MOCK_GPU_TYPE,\r\n clientLocale: startParams.clientLocale ?? \"en_US\"\r\n };\r\n resolve(this.mSession);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method can be used to get a session details belonging to a session id for resume scenario or during polling.\r\n * Pass isPoll flag true when post request is made for session setup.\r\n * Result is returned in promise with GridSession object.\r\n * @param sessionId - sessionId in case of resume.\r\n * @param isPoll - used in post request.\r\n **/\r\n public getSession(_sessionId: string, isPoll: boolean): Promise {\r\n return new Promise((resolve, reject) => {\r\n logger.info(\"getSession isPoll \" + isPoll);\r\n\r\n const startTime = new Date();\r\n const endTime = new Date(startTime.getTime() + this.mMockParams.queueDurationTotalSeconds! * 1000);\r\n let terminationTime: Nullable = null;\r\n if (this.mMockParams.failAfterSeconds! >= 0) {\r\n terminationTime = new Date(startTime.getTime() + this.mMockParams.failAfterSeconds! * 1000);\r\n }\r\n let getSessionRequest = () => {\r\n const currentTime = new Date();\r\n if (this.mCancelledSetup) {\r\n reject(this.cancelError(SessionProgressState.IN_QUEUE));\r\n } else {\r\n if (currentTime > endTime) {\r\n this.mSession!.state = SessionState.STREAMING;\r\n resolve(this.mSession!);\r\n } else if (terminationTime && currentTime > terminationTime) {\r\n reject({\r\n code: this.mMockParams.terminationReason\r\n });\r\n } else {\r\n this.eventEmitter.emit(\"ProgressUpdate\", {\r\n sessionId: MOCK_SESSION_ID,\r\n subSessionId: this.subSessionId,\r\n queuePosition: Math.ceil((endTime.getTime() - currentTime.getTime()) / MOCK_POLL_INTERVAL_MS),\r\n eta: endTime.getTime() - currentTime.getTime(),\r\n state: \"InQueue\"\r\n });\r\n window.setTimeout(() => getSessionRequest(), MOCK_POLL_INTERVAL_MS);\r\n }\r\n }\r\n }\r\n getSessionRequest();\r\n });\r\n }\r\n\r\n sendDeleteRequest(sessionId: string): Promise {\r\n return new Promise((resolve, reject) => {\r\n this.mSession = null;\r\n });\r\n }\r\n\r\n public setAuthInfo(authInfo: AuthInfo) {\r\n this.mAuthInfo = authInfo;\r\n }\r\n\r\n public cancelSessionSetup() {\r\n this.mCancelledSetup = true;\r\n }\r\n\r\n public getZoneName(): string {\r\n return MOCK_ZONE_NAME;\r\n }\r\n\r\n public getZoneAddress(): string {\r\n return MOCK_ZONE_ADDRESS;\r\n }\r\n\r\n private cancelError(progressState: SessionProgressState) {\r\n logger.error(\"Cancelled session setup\");\r\n let err = {\r\n code: GsErrorCode.SessionSetupCancelled,\r\n description: \"cancelled session setup\"\r\n };\r\n if (progressState == SessionProgressState.IN_QUEUE) {\r\n err.code = GsErrorCode.SessionSetupCancelledDuringQueuing;\r\n }\r\n return err;\r\n }\r\n}\r\n","/* Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { TelemetryEventPayload } from \"@gamestream-stable/gridserver\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IHttpBackoffConfiguration, IHttpResponseListener } from \"../core/http-client.types\";\r\nimport { IInitializable } from \"../core/util.types\";\r\nimport { LightstepTracerConfiguration } from \"./distributed-tracing.types\";\r\nimport { TelemetryHelper } from \"./telemetry-helper\";\r\n\r\nexport const MISSING_VALUE: string = \"NOT_SET\";\r\n\r\n/** @internal **/\r\nexport type TelemetryPlatform = \"Win\" | \"Mac\" | \"Linux\" | \"NvAndroid\" | \"Android\" | \"Web\" | \"iOS\" | \"undefined\";\r\n\r\n/** @internal **/\r\nexport interface ITelemetry extends IInitializable, IHttpResponseListener {\r\n sessionId: string;\r\n systemInfoGuid: string;\r\n eventDataElements: any;\r\n registerEventDataUpdateCallback(callback: () => void) : void;\r\n onGridServerTelemetry(event: TelemetryEventPayload): void;\r\n onException(fileName: string, type: string, message: string, stackTrace: string, exceptionSource: string, telemetrySessionId?: string): void;\r\n setTelemetryHelper(telemetryHelper: TelemetryHelper): void;\r\n sendStreamingProfileEvent(profileName: StreamingQualityType, dynamicResEnabled: boolean, framerate: number, resolutionWidth: number, resolutionHeight: number,\r\n maxBitrate: number, aspectRatio: string, vSyncMode: VSyncMode): string;\r\n sendClickEvent(clickType: ClickType, inputType: InputType, detail: string): void;\r\n}\r\n\r\n/** @internal **/\r\nexport interface LightstepConfiguration {\r\n tracerConfig: LightstepTracerConfiguration;\r\n}\r\n\r\nexport interface TelemetryConfiguration {\r\n eventProtocol: string;\r\n isProd: boolean;\r\n intervalDelayMs: number;\r\n timeout: number;\r\n backoff: IHttpBackoffConfiguration;\r\n ragnarokConfig: {\r\n server: string;\r\n version: string;\r\n }\r\n lightstep: LightstepConfiguration;\r\n}\r\n\r\nexport interface NativeStreamerConfig {\r\n clientId: string;\r\n eventSchemaVer: string;\r\n isProdLibrary: boolean;\r\n}\r\n\r\nexport interface NativeEvent {\r\n eventName: string;\r\n telemetrySessionId?: string;\r\n eventBody: NativeTelemetryEvent;\r\n}\r\n\r\nexport interface NativeException {\r\n fileName: string;\r\n type: string;\r\n message: string;\r\n stackTrace: string;\r\n}\r\n\r\nexport enum NativeNames {\r\n NativeException = \"NativeException\"\r\n}\r\n\r\nexport type NativeTelemetryEvent = NativeException | undefined;\r\n\r\nexport enum StreamingQualityType {\r\n Balanced = \"Balanced\",\r\n DataSaver = \"DataSaver\",\r\n Competitive = \"Competitive\",\r\n Custom = \"Custom\"\r\n}\r\n\r\nexport enum VSyncMode {\r\n Adaptive = \"Adaptive\",\r\n Off = \"Off\",\r\n On = \"On\"\r\n}\r\n\r\nexport enum TelemetryDest {\r\n GxT = \"GxT\",\r\n Grid = \"Grid\",\r\n Streamer = \"Streamer\"\r\n}\r\n\r\n\r\n// Kodiak doesn't export this, but we need to match it\r\nexport enum KodiakGDPRType {\r\n Full = \"Full\",\r\n None = \"None\"\r\n}\r\n\r\n// The following field names must match the commonEventAttributes from the GXTLibrary\r\nexport interface StoredEventAttributes {\r\n clientVer: string;\r\n eventProtocol: string;\r\n eventSchemaVer: string;\r\n eventSysVer: string;\r\n externalUserId: string;\r\n idpId: string;\r\n sessionId: string;\r\n userId: string;\r\n deviceOSVersion: string;\r\n gdprTechOptIn: KodiakGDPRType;\r\n gdprBehOptIn: KodiakGDPRType;\r\n}\r\n\r\nexport interface StorableEvent {\r\n event: any;\r\n attributes: StoredEventAttributes;\r\n}\r\n\r\nexport enum StreamerType {\r\n Native = \"native\",\r\n WebRTC = \"webrtc\"\r\n}\r\n\r\nexport enum GDPRCategory {\r\n Functional = \"functional\",\r\n Behavioral = \"behavioral\",\r\n Technical = \"technical\"\r\n}\r\n\r\nexport enum InputType {\r\n Unknown = \"Unknown\",\r\n Keyboard = \"Keyboard\",\r\n Mouse = \"Mouse\",\r\n Gamepad = \"Gamepad\",\r\n Touch = \"Touch\",\r\n InGame = \"InGame\"\r\n}\r\nexport enum ClickType {\r\n ClickedUrl = \"ClickedUrl\"\r\n}\r\n","/* Copyright (c) 2020-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { RequestStatusEntity } from \"../server/server.entities\";\r\n\r\n\r\n/**\r\n * Represents the state of automatic payments.\r\n */\r\nexport enum AutomaticPaymentState {\r\n /**\r\n * The state of automatic payments is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * Automatic payments do not apply to the subscription.\r\n */\r\n NotApplicable,\r\n\r\n /**\r\n * Automatic payments are enabled.\r\n */\r\n On,\r\n\r\n /**\r\n * Automatic payments are disabled.\r\n */\r\n Off\r\n}\r\n\r\n\r\n/**\r\n * Represents a membership type\r\n */\r\nexport enum MembershipType {\r\n /**\r\n * The type of membership is not known.\r\n */\r\n Unknown = 0,\r\n\r\n /**\r\n * The membership is from a Founders subscription.\r\n */\r\n Founders,\r\n\r\n /**\r\n * The membership has priority access.\r\n */\r\n Priority,\r\n\r\n /**\r\n * The membership is from a promotion.\r\n */\r\n Promotion,\r\n\r\n /**\r\n * The membership is basic.\r\n */\r\n Free\r\n}\r\n\r\n/**\r\n * Represents a localized product type.\r\n */\r\nexport enum LocalizedProductType {\r\n /**\r\n * The product is not known.\r\n */\r\n Unknown = \"UNKNOWN\",\r\n\r\n /**\r\n * The product is free.\r\n */\r\n Free = \"FREE\",\r\n\r\n /**\r\n * The product is not free.\r\n */\r\n Paid = \"PAID\",\r\n\r\n /**\r\n * The product is part of a promotion.\r\n */\r\n Promotional = \"PROMOTIONAL\",\r\n\r\n /**\r\n * The product is a bundle.\r\n */\r\n Bundle = \"BUNDLE\"\r\n}\r\n\r\n/**\r\n * Represents the product flavor type.\r\n */\r\nexport enum ProductFlavorType {\r\n Buy = 0,\r\n Rent,\r\n Trial,\r\n Demo,\r\n Subscription,\r\n CloudMatch\r\n}\r\n\r\n\r\n/**\r\n * Represents upsell information for a subscription.\r\n */\r\nexport interface SubscriptionUpsellEntity {\r\n /**\r\n * True if a product exists that is better than the users existing\r\n * product; Otherwise, false.\r\n */\r\n canUpsell?: boolean;\r\n\r\n /**\r\n * True if a product exists that provides a longer session duration\r\n * than what the user currently owns; Otherwise, false.\r\n */\r\n betterSessionLengthProductExists?: boolean;\r\n\r\n /**\r\n * True if a product exists that provides less wait time in the queue\r\n * than what the users current one provides; Otherwise, false.\r\n */\r\n betterSessionPriorityProductExists?: boolean;\r\n}\r\n\r\n/** Represents a subscription feature setting */\r\nexport enum SubscriptionFeatureMetadata {\r\n UNKNOWN,\r\n RTX_ENABLED,\r\n HDR_ENABLED,\r\n SUPPORTED_AUDIO_FORMATS,\r\n IN_GAME_SETTINGS_PERSISTENCE_ENABLED,\r\n OVERRIDE_TOUCH_ENABLED,\r\n ENABLE_DEBUG_TOOLS\r\n}\r\n\r\n/**\r\n * Represents a feature in a users subscription.\r\n */\r\nexport interface SubscriptionFeature {\r\n /**\r\n * The feature name.\r\n */\r\n key: SubscriptionFeatureMetadata;\r\n\r\n /**\r\n * The value of the feature.\r\n */\r\n textValue: string;\r\n\r\n /** @internal **/\r\n setValue: string;\r\n}\r\n\r\n/**\r\n * The quality modes that are supported by GFN clients\r\n */\r\nexport enum ClientStreamingQualityMode {\r\n Unknown = 0,\r\n Balanced,\r\n DataSaver,\r\n Competitive\r\n}\r\n\r\n/**\r\n * A list of resolutions that are supported based on client identifications and other parameters\r\n */\r\nexport interface SubscriptionResolution {\r\n /**\r\n * Vertical resolution in pixels\r\n */\r\n heightInPixels?: number,\r\n\r\n /**\r\n * Horizontal resolution in pixels\r\n */\r\n widthInPixels?: number;\r\n\r\n /**\r\n * Maximum number of frames per second\r\n */\r\n framesPerSecond?: number;\r\n\r\n /**\r\n * Default resolution that is specific for the client and the membership model\r\n */\r\n isDefault?: boolean;\r\n\r\n /**\r\n * Indicates the modes if the resolution is set to be default\r\n */\r\n clientStreamingQualityModes?: ClientStreamingQualityMode[];\r\n\r\n /**\r\n * Indicates if the user is entitled to use this resolution\r\n */\r\n isEntitled?: boolean;\r\n}\r\n\r\n/**\r\n * Represents the users features in a subscription.\r\n */\r\nexport interface SubscriptionFeatures {\r\n /**\r\n * The list of features.\r\n */\r\n features: SubscriptionFeature[],\r\n\r\n /**\r\n * A list of resolutions and other subscription parameters\r\n */\r\n resolutions?: SubscriptionResolution[]\r\n}\r\n\r\n/**\r\n * Max Bit Rate\r\n */\r\nexport interface MaxBitRate {\r\n /**\r\n * Bitrate option either Auto (false) or Custom (true)\r\n */\r\n bitrateOption: boolean,\r\n\r\n /**\r\n * Bitrate value in Mbps in case bitrateOption is custom/true\r\n */\r\n bitrateValue: number,\r\n\r\n /**\r\n * Minimum bitrate value in Mbps for platform / SKU combination\r\n */\r\n minBitrateValue: number,\r\n\r\n /**\r\n * Maximum bitrate value in Mbps for platform / SKU combination\r\n */\r\n maxBitrateValue: number\r\n}\r\n\r\n/**\r\n * A key that represents the Streaming Quality Mode feature\r\n */\r\nexport enum StreamingQualityModeFeatureMetadataKey {\r\n Unknown = 0,\r\n VSync,\r\n AdjustForNetwork,\r\n HDR,\r\n Reflex\r\n}\r\n\r\n/**\r\n * A list of generic streaming mode attributes that are listed as name-value pairs\r\n * representing Streaming Quality Mode Feature Metadata\r\n */\r\nexport interface StreamingQualityModeFeatureMetadata {\r\n /**\r\n * A key that represents the feature:\r\n */\r\n key: StreamingQualityModeFeatureMetadataKey,\r\n\r\n /**\r\n * If value of the key is just a string, this information should be read.\r\n */\r\n textValue: string,\r\n\r\n /**\r\n * @internal\r\n * If value of the key is a set of strings, this information should be read\r\n */\r\n setValue: string[]\r\n}\r\n\r\n\r\n/**\r\n * Streaming Quality Setting\r\n */\r\nexport interface StreamingQuality {\r\n /**\r\n * Bit Rate Setting\r\n */\r\n maxBitRate?: MaxBitRate,\r\n\r\n /**\r\n * Resolution and Framerate\r\n */\r\n resolution?: SubscriptionResolution,\r\n\r\n /**\r\n * A list of generic streaming mode attributes that are listed as name-value pairs\r\n */\r\n features?: StreamingQualityModeFeatureMetadata[],\r\n\r\n /**\r\n * Indicates the mode above values to be used\r\n */\r\n clientStreamingQualityMode?: ClientStreamingQualityMode\r\n}\r\n\r\n/**\r\n * Represents a subscription.\r\n */\r\nexport interface SubscriptionEntity {\r\n\r\n /**\r\n * The unique subscription identifier.\r\n */\r\n subscriptionId?: string;\r\n\r\n /**\r\n * The renewal date of the subscription, in UTC.\r\n */\r\n renewalDateTime?: string;\r\n\r\n /**\r\n * The starting date of this subscription, in UTC.\r\n */\r\n startDateTime?: string;\r\n\r\n /**\r\n * The subscriptions expiration date, in UTC.\r\n */\r\n expirationDateTime?: string;\r\n\r\n /**\r\n * The date and time (in UTC) to start alerting the user that their\r\n * subscription is about to expire.\r\n */\r\n expirationAlertStartsOn?: string;\r\n\r\n /**\r\n * Indicates whether or not automatic payments are enabled, not enabled or not applicable\r\n * for this subsciption.\r\n */\r\n autoPaymentState?: AutomaticPaymentState;\r\n\r\n /** True if the subscription contains a paid sku; Otherwise, false. */\r\n isPaidSku?: boolean;\r\n\r\n /**\r\n * A url that points to the localized content of the product.\r\n */\r\n productUri?: string;\r\n\r\n /**\r\n * The SKU which uniquely identifies the subscription product.\r\n */\r\n productSku?: string;\r\n\r\n /**\r\n * Options for upselling a better subscription.\r\n */\r\n upsellOptions?: SubscriptionUpsellEntity;\r\n\r\n /**\r\n * True if the user was part of the original eBETA; otherwise false.\r\n */\r\n wasEBetaUser?: boolean;\r\n\r\n /**\r\n * Indicates the type of membership.\r\n */\r\n membershipType?: MembershipType;\r\n\r\n /**\r\n * An array of optional features that may be enabled for the stream\r\n */\r\n features?: SubscriptionFeatures;\r\n\r\n /**\r\n * A list of features that indicates users streaming quality settings\r\n */\r\n streamingQualities?: StreamingQuality[];\r\n}\r\n\r\nexport enum ProductStatus {\r\n UNKNOWN = 0,\r\n ANNOUNCED = 1,\r\n PRESALE = 2,\r\n ACTUAL = 3\r\n}\r\n\r\n/**\r\n * Represents a subscription product.\r\n */\r\nexport interface ProductEntity {\r\n /**\r\n * The product SKU, a unique identifier of the product.\r\n */\r\n id?: number;\r\n\r\n /**\r\n * Priority of the product, higher is better.\r\n */\r\n priority?: number;\r\n\r\n /**\r\n * The currency of the price as a 3-character ISO-4217 string (e.g. USD).\r\n */\r\n currency?: string;\r\n\r\n /**\r\n * The locale as a 4-character RFC3066 language code string (e.g. en_US).\r\n */\r\n locale?: string;\r\n\r\n /**\r\n * The url to the products localized content.\r\n */\r\n productUri?: string;\r\n\r\n /**\r\n * True if the user owns the product; otherwise, false.\r\n */\r\n isOwned?: boolean;\r\n\r\n /**\r\n * True if the product is available; otherwise, false.\r\n */\r\n isAvailable?: boolean;\r\n\r\n /**\r\n * The product status.\r\n */\r\n status?: ProductStatus\r\n}\r\n\r\n/**\r\n * Represents the usage of a products asset.\r\n */\r\nexport enum ProductLocalizedAssetSubType {\r\n UNKNOWN,\r\n TEXT,\r\n TEXT_SHORT,\r\n GAME_BOX_ART,\r\n GAME_ICON,\r\n SCREENSHOT,\r\n SCREENSHOT_THUMB,\r\n VIDEO_TRAILER,\r\n VIDEO_GAMEPLAY,\r\n PUBLISHER_ICON,\r\n PUBLISHER_URL,\r\n RATING_ICON,\r\n BUY_FROM_ICON,\r\n CONTROLLERHELP_SHIELD,\r\n KEY_ART,\r\n HERO_IMAGE,\r\n YOUTUBE,\r\n YOUTUBE_SCREENSHOT,\r\n YOUTUBE_SCREENSHOT_THUMB,\r\n FEATURE_IMAGE,\r\n STARTUP_INTRO_VIDEO,\r\n CAROUSEL_ART,\r\n KEY_ICON,\r\n TV_BANNER,\r\n ANSEL_360_IMAGE,\r\n GAME_LOGO,\r\n WEBSITE,\r\n MARQUEE_HERO_IMAGE,\r\n BADGE_ICON\r\n}\r\n\r\n/**\r\n * Represents an products asset channel.\r\n */\r\nexport enum ProductLocalizedAssetChannel {\r\n UNKNOWN,\r\n WEB,\r\n SHIELD_TV,\r\n SHIELD_MOBILE,\r\n GFE,\r\n IOS,\r\n ANDROID\r\n}\r\n\r\n/**\r\n * Represents a localized product asset.\r\n */\r\nexport interface ProductLocalizedAssetEntity {\r\n /**\r\n * The unique name of the asset.\r\n */\r\n name?: string;\r\n\r\n /**\r\n * The localized display name of the asset.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * The assets localized description.\r\n */\r\n description?: string;\r\n\r\n /**\r\n * The url where the asset is located.\r\n */\r\n url?: string;\r\n\r\n /**\r\n * The mime-type of the asset.\r\n */\r\n contentType?: string;\r\n\r\n /**\r\n * Idicates what the asset is and its usage.\r\n */\r\n subType?: ProductLocalizedAssetSubType;\r\n\r\n /**\r\n * The sorting order.\r\n */\r\n sortOrder?: number;\r\n\r\n /**\r\n * Contains a list that indicates where the asset should be used.\r\n */\r\n channels?: ProductLocalizedAssetChannel[];\r\n}\r\n\r\n\r\n/**\r\n * Represents a subscriptions localized product information.\r\n */\r\nexport interface ProductLocalizedEntity {\r\n /**\r\n * The unique product iddentifier, or SKU.\r\n */\r\n id?: string;\r\n\r\n /**\r\n * The product title.\r\n */\r\n title?: string;\r\n\r\n /**\r\n * Brief description of the product.\r\n */\r\n shortDescription?: string;\r\n\r\n /**\r\n * Full description of the product.\r\n */\r\n longDescription?: string;\r\n\r\n /**\r\n * Sorting order\r\n */\r\n sortOrder?: number;\r\n\r\n /**\r\n * The type of product.\r\n */\r\n productType?: LocalizedProductType;\r\n\r\n /**\r\n * Extra information about the price of the product.\r\n */\r\n priceNote?: string;\r\n\r\n /**\r\n * List of assets for this product.\r\n */\r\n assets?: ProductLocalizedAssetEntity[];\r\n}\r\n\r\n/** @internal **/\r\nexport interface StreamingQualityResponseEntity {\r\n resolutions: SubscriptionResolution[],\r\n streamingQualities: StreamingQuality[]\r\n}\r\n\r\n/** @internal **/\r\nexport interface SubscriptionResponseEntity {\r\n requestStatus?: RequestStatusEntity;\r\n subscription?: SubscriptionEntity;\r\n}\r\n\r\n/** @internal **/\r\nexport interface ProductsResponseEntity {\r\n products?: ProductEntity[];\r\n requestStatus?: RequestStatusEntity;\r\n}\r\n\r\n/**\r\n * Represents entitled resolutions and FPS.\r\n */\r\nexport interface EntitledStreamParam {\r\n /**\r\n * Resolution height in pixels\r\n */\r\n height?: number;\r\n\r\n /**\r\n * Resolution width in pixels\r\n */\r\n width?: number;\r\n\r\n /**\r\n * Frame Per Second (FPS)\r\n */\r\n fps?: number;\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable, Undefined } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { AppData, GfnFeature, GfnFeatureItem, GuestModeDefaultAppData, InputControllerType, VariantData } from \"./catalog.types\";\r\n\r\nconst logger = Logging.getLogger(\"catalog/catalog-utils\");\r\n\r\n/** @internal **/\r\nexport class CatalogUtils {\r\n public static IsFeatureEnabled(variant: VariantData, feature: string | GfnFeature): boolean {\r\n return CatalogUtils.IsFeatureEqualTo(variant, feature, \"true\");\r\n }\r\n\r\n public static IsFeatureEqualTo(variant: VariantData, feature: string | GfnFeature, value: string): boolean {\r\n if (!variant.gfn || !variant.gfn.features) {\r\n return false;\r\n }\r\n\r\n const features: Undefined = Array.isArray(variant.gfn.features) ? variant.gfn.features : [variant.gfn.features];\r\n\r\n return features.some((f: GfnFeatureItem) => {\r\n return f.key === feature && f.value === value;\r\n });\r\n }\r\n\r\n public static IsControllerSupported(appData: AppData, appId: number, type: InputControllerType): boolean {\r\n const variant: Nullable = appData.variants.find(variant => variant.id === appId) as VariantData || null;\r\n const supportedControllers: Undefined = variant?.supportedControls ?? appData.supportedControls;\r\n\r\n if (!supportedControllers) {\r\n return false;\r\n }\r\n\r\n return supportedControllers.includes(type);\r\n }\r\n\r\n public static CreateDefaultAppData(cmsId: number, isMobile: boolean, guestModeConfigMetadata: any): AppData {\r\n const defaultAppData: AppData = { ...GuestModeDefaultAppData};\r\n defaultAppData.variants[0].id = cmsId;\r\n\r\n if (isMobile) {\r\n defaultAppData.supportedControls?.push(InputControllerType.Touch);\r\n // Note: variant's supportedControls automatically gets set as in the definition\r\n // spread operator deep copies only topmost data but shallow copies the nested data\r\n }\r\n\r\n logger.verbose(`Default AppData: ${JSON.stringify(defaultAppData)}`);\r\n\r\n if (guestModeConfigMetadata) {\r\n logger.info(`GuestMode AppData Overrides: ${JSON.stringify(guestModeConfigMetadata)}`);\r\n return {...defaultAppData, ...guestModeConfigMetadata};\r\n }\r\n\r\n return defaultAppData;\r\n }\r\n}","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { SubscriptionEntity, SubscriptionFeature, SubscriptionFeatureMetadata } from \"./entitlement.entities\";\r\n\r\n/** @internal **/\r\nexport class EntitlementUtils {\r\n public static IsFeatureAvailable(subscription: SubscriptionEntity, feature: string | SubscriptionFeatureMetadata): boolean {\r\n return this.IsFeatureEqualTo(subscription, feature, \"true\");\r\n }\r\n\r\n public static IsFeatureEqualTo(subscription: SubscriptionEntity, feature: string | SubscriptionFeatureMetadata, value: string): boolean {\r\n if (!subscription.features || !subscription.features.features) {\r\n return false;\r\n }\r\n\r\n const features: SubscriptionFeature[] = subscription.features.features;\r\n\r\n return features.some((f: SubscriptionFeature) => {\r\n return f.key === feature && f.textValue === value;\r\n });\r\n }\r\n}","/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { IInitializable, Nullable, Size } from \"../core/util.types\";\r\nimport { Device } from \"../device/device\";\r\nimport { DeviceKind } from \"../device/device.types\";\r\nimport { Entitlement } from \"../entitlement/entitlement\";\r\nimport { SubscriptionResolution } from \"../entitlement/entitlement.entities\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { IDBStorage } from \"../storage/idb-storage\";\r\nimport { NativeNetworkTestResultCode, NetworkCapability, NetworkTestEntry, NetworkTestEvents, NetworkTestProfile, NetworkTestResult, NetworkTestResultCode, NetworkTestThreshold } from \"./network-test.types\";\r\n\r\nconst logger = Logging.getLogger(\"network-test\");\r\n\r\nconst IDEAL_BPS_COEFFICIENT: number = 0.325;\r\nconst IDEAL_BPS_1080P60: number = 40435200;\r\nconst IDEAL_BPS_1080P30: number = 25272000.0;\r\nconst IDEAL_BPS_1440P60: number = 50918400.0;\r\nconst IDEAL_BPS_1440P30: number = 31824000.0;\r\nconst MAX_BITRATE_DIVISIVE_CONSTANT: number = 1.2;\r\nconst MULTIPLIER_30_FPS: number = 1.25;\r\nconst MAX_1440p_SUPPORTED_MODE: number = 4096000.0;\r\nconst DEFAULT_MAX_TEST_PROFILE_TV: NetworkTestProfile = { width: 1920, height: 1080, fps: 60 };\r\nconst DEFAULT_TEST_PROFILES_TV: NetworkTestProfile[] = [\r\n { width: 1280, height: 720, fps: 30 },\r\n { width: 1280, height: 720, fps: 60 },\r\n DEFAULT_MAX_TEST_PROFILE_TV\r\n];\r\nconst LATENCY_TEST_SUCCESS = 0;\r\nconst LATENCY_TEST_PARTIAL_SUCCESS = 0x0D2; // From \\\\sw\\gcomp\\rel\\gs_04_57\\src\\BifrostClientSDK\\sdk\\include\\nvb\\NVb2.h\r\n\r\nconst NETWORKTEST_DB_NAME = \"CachedNetworkTestResults\"\r\n\r\n/**\r\n * Provides a class for performing network tests.\r\n *\r\n * See [Network Testing](../guides/network-test.html) for more details.\r\n */\r\nexport class NetworkTest extends EventEmitter implements IInitializable {\r\n protected readonly mDevice: Device;\r\n protected readonly mEntitlement: Entitlement;\r\n protected readonly mPlatformNetworkTest: Nullable;\r\n protected mConfiguration!: Configuration;\r\n protected mSettings!: Settings;\r\n private mDB: IDBStorage;\r\n private mOnLatencyTestComplete: (result: PlatformLatencyTestResult) => void;\r\n private mOnNetworkTestComplete: (result: PlatformNetworkTestResult) => void;\r\n private mOnNetworkTestError: (errorReason: string) => void;\r\n\r\n /**\r\n * Check if network test is supported on this platform.\r\n *\r\n * @returns\r\n * True if network test is supported; otherwise, false.\r\n */\r\n public get isSupported(): boolean {\r\n return (this.mPlatformNetworkTest !== null);\r\n }\r\n\r\n /** @internal **/\r\n protected get defaultTestProfiles(): NetworkTestProfile[] {\r\n switch(this.mDevice.kind) {\r\n case DeviceKind.TV:\r\n return DEFAULT_TEST_PROFILES_TV;\r\n default:\r\n const size: Size = this.mDevice.screenSizeInPixels;\r\n return [\r\n { width: size.width, height: size.height, fps: 60 }\r\n ];\r\n }\r\n }\r\n\r\n /** @internal **/\r\n constructor (device: Device, entitlement: Entitlement, platformNetworkTest: Nullable = null) {\r\n super();\r\n this.mDevice = device;\r\n this.mEntitlement = entitlement;\r\n this.mPlatformNetworkTest = platformNetworkTest;\r\n this.mOnLatencyTestComplete = () => {};\r\n this.mOnNetworkTestComplete = () => {};\r\n this.mOnNetworkTestError = () => {};\r\n this.mDB = new IDBStorage(\"GFN-Client-SDK\", \"Telemetry\"); // TODO: Attempting to create a second DB with a name other than \"Telemetry\" exposes a bug in the underlying IDBStorage.\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(ctx: IInitializeContext): Promise {\r\n this.mConfiguration = ctx.configuration;\r\n this.mSettings = ctx.settings;\r\n\r\n await this.mDB.init();\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Performs a network test against the specified server.\r\n *\r\n * @param server\r\n * The address or url of the server to test.\r\n *\r\n * @param userId\r\n * The id of the currently logged in user.\r\n *\r\n * @param authToken\r\n * The id token of the currently logged in user.\r\n *\r\n * @param testProfiles\r\n * An optional array of profiles to use for the test.\r\n *\r\n * @param maxSubscriptionProfile\r\n * An optional max subscription profile based on the client and user's entitlement.\r\n * This will be compared to the user's GFN entitlement, and the lesser of the two will be used.\r\n *\r\n * @returns\r\n * A {@link NetworkTestResult}.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.CannotRunNetworkTest}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.FeatureNotSupported}. The platform does not support network test.\r\n */\r\n public async run(server: string, userId: string, authToken: string, testProfiles?: NetworkTestProfile[], maxSubscriptionProfile?: NetworkTestProfile): Promise {\r\n const sortedSubscriptionProfiles: NetworkTestProfile[] = await this.getSortedSubscriptionProfiles();\r\n maxSubscriptionProfile = sortedSubscriptionProfiles[0];\r\n if (!testProfiles) {\r\n testProfiles = sortedSubscriptionProfiles;\r\n }\r\n logger.info(`Maximum possible resolution for this subscriber is ${maxSubscriptionProfile.width}x${maxSubscriptionProfile.height} @ ${maxSubscriptionProfile.fps} fps`);\r\n\r\n const profileMap: Map = new Map();\r\n const bitrates: number[] = []; // for sorting the profile map\r\n for(const p of sortedSubscriptionProfiles) {\r\n const maxBitrate: number = NetworkTest.GetMaxBandwidth(p.width, p.height, p.fps);\r\n bitrates.push(maxBitrate);\r\n profileMap.set(maxBitrate, p);\r\n }\r\n\r\n const sortedProfileMap: Map = new Map();\r\n bitrates.sort((a: number, b: number) => b - a).map((k) => {\r\n sortedProfileMap.set(k, profileMap.get(k)!);\r\n });\r\n\r\n if (this.mPlatformNetworkTest != null) {\r\n this.emit(\"started\");\r\n return new Promise((resolve, reject) => {\r\n this.mOnNetworkTestComplete = (platformResult: PlatformNetworkTestResult) => {\r\n // use best profile if bandwidth is greater than all ideal bitrates\r\n let capableProfile: NetworkTestProfile = sortedProfileMap.get(bitrates[bitrates.length-1])!;\r\n\r\n for(const [k,v] of sortedProfileMap) {\r\n if (platformResult.downlinkBandwidth >= k) {\r\n capableProfile = v;\r\n break;\r\n }\r\n }\r\n\r\n const capability: NetworkCapability = NetworkTest.GetNetworkResultCapability(platformResult);\r\n const result: NetworkTestResult = {\r\n resultCode: NetworkTest.GetResultCodeFromNativeCode(platformResult.resultCode),\r\n sessionId: platformResult.sessionId,\r\n capability: capability,\r\n capableProfile: capableProfile,\r\n isCapable: capability !== NetworkCapability.Insufficient,\r\n info: platformResult.network,\r\n data: {\r\n downlinkBandwidth: platformResult.downlinkBandwidth,\r\n uplinkBandwidth: platformResult.uplinkBandwidth,\r\n maxTestBandwidthMbps: platformResult.maxTestBandwidthMbps,\r\n latencyWithStream: platformResult.latencyWithStream,\r\n latencyWithoutStream: platformResult.latencyWithoutStream,\r\n packetLoss: platformResult.packetLoss,\r\n percentile99thFrameJitter: platformResult.percentile99thFrameJitter,\r\n pathMtu: platformResult.pathMtu,\r\n maxPacketSize: platformResult.maxPacketSize,\r\n thresholdCount: platformResult.thresholdCount\r\n },\r\n thresholds: platformResult.thresholds\r\n }\r\n this.cacheNetworkTest(server, this.getNetworkFingerprint(), maxSubscriptionProfile!, result);\r\n this.emit(\"finished\");\r\n resolve(result);\r\n }\r\n this.mOnNetworkTestError = (errorReason: string) => {\r\n reject(errorReason);\r\n }\r\n this.mPlatformNetworkTest!.runNetworkTest(server, this.mConfiguration.networkTest.port, userId, authToken, JSON.stringify(testProfiles), JSON.stringify(maxSubscriptionProfile));\r\n }).finally(() => this.mOnNetworkTestComplete = () => {});\r\n }\r\n\r\n throw new APIError(APIErrorCode.FeatureNotSupported, \"This platform does not support network test.\");\r\n }\r\n\r\n /** @internal **/\r\n public finishNetworkTest(result: string): void {\r\n const obj: any = JSON.parse(result);\r\n if (\"error\" in obj) {\r\n this.emit(\"error\", obj.error);\r\n }\r\n\r\n if (\"resultCode\" in obj) {\r\n const platformResult: PlatformNetworkTestResult = obj as PlatformNetworkTestResult;\r\n this.mOnNetworkTestComplete(platformResult);\r\n } else {\r\n logger.warn(\"Network test returned an unexpected result: \" + result);\r\n }\r\n }\r\n\r\n private async getSortedSubscriptionProfiles(): Promise {\r\n // Fetch the allowed resolutions based on the user's entitlement\r\n const subscription = await this.mEntitlement.getUserSubscription();\r\n const subResolutions: SubscriptionResolution[] = subscription.subscription.features?.resolutions?.filter((subRes: SubscriptionResolution) => subRes.isEntitled) || [];\r\n const allowedResolutions: NetworkTestProfile[] = subResolutions.map((subRes: SubscriptionResolution) => { return { height: subRes.heightInPixels || 0, width: subRes.widthInPixels || 0, fps: subRes.framesPerSecond || 0 } });\r\n\r\n // Search for the biggest one with the same aspect ratio as our actual device. Fall back to 16:9. If that fails, use the default.\r\n const targetRatio = this.mDevice.screenSizeInPixels.width / this.mDevice.screenSizeInPixels.height;\r\n const fallbackRatio = 16 / 9;\r\n let filteredResolutions = allowedResolutions?.filter(\r\n resolution => targetRatio === resolution.width / resolution.height\r\n );\r\n if (filteredResolutions?.length === 0) {\r\n logger.info(`No exact match found for resolution ${this.mDevice.screenSizeInPixels.width} x ${this.mDevice.screenSizeInPixels.height}, defaulting to 16:9`);\r\n filteredResolutions = allowedResolutions?.filter(\r\n resolution => fallbackRatio === resolution.width / resolution.height\r\n );\r\n }\r\n if (filteredResolutions?.length === 0) {\r\n filteredResolutions = subResolutions.filter(resolution => resolution.isDefault)\r\n .map(resolution => { return { height: resolution.heightInPixels || 0, width: resolution.widthInPixels || 0, fps: resolution.framesPerSecond || 0}})\r\n }\r\n // Sort on width * height, then on FPS\r\n filteredResolutions.sort((a, b) => {\r\n const diff = b.width * b.height - a.width * a.height;\r\n return diff === 0 ? b.fps - a.fps : diff;\r\n });\r\n // Remove all rows with FPS 30 except the last one (for smallest resolution)\r\n const lastElement = filteredResolutions[filteredResolutions.length - 1];\r\n filteredResolutions = filteredResolutions.filter(res => res.fps != 30 || (res.width === lastElement.width && res.height === lastElement.height));\r\n // Sort by in pixels and max bandwidth, then sort again\r\n filteredResolutions = filteredResolutions.map(res => ({\r\n ...res,\r\n pixelCount: res.width * res.height,\r\n maxBandwidth: NetworkTest.GetMaxBandwidth(res.width, res.height, res.fps)\r\n }));\r\n\r\n return filteredResolutions;\r\n }\r\n\r\n /**\r\n * Runs network test if required and returns the result or null if configuration.networkTest.disableAutomaticTest is true\r\n */\r\n public async runNetworkTestIfNeeded(server: string, userId: string, authToken: string, testProfiles?: NetworkTestProfile[], maxSubscriptionProfile?: NetworkTestProfile): Promise> {\r\n if (this.mConfiguration.networkTest.disableAutomaticTest) {\r\n return null;\r\n }\r\n const sortedSubscriptionProfiles = testProfiles || await this.getSortedSubscriptionProfiles();\r\n if (!maxSubscriptionProfile) {\r\n maxSubscriptionProfile = sortedSubscriptionProfiles[0];\r\n }\r\n const networkTestFingerprint = this.getNetworkFingerprint();\r\n const cachedNetworkTestResults = await this.getCachedNetworkTest(server, networkTestFingerprint, maxSubscriptionProfile);\r\n if (cachedNetworkTestResults) {\r\n return cachedNetworkTestResults;\r\n }\r\n return this.run(server, userId, authToken, sortedSubscriptionProfiles, maxSubscriptionProfile);\r\n }\r\n\r\n /**\r\n * Clear the network test Cache. This function is useful for testing, but should not be used in production.\r\n */\r\n public async clearNetworkTestCache(): Promise {\r\n return this.mDB.set(NETWORKTEST_DB_NAME, []);\r\n }\r\n\r\n public async getCachedNetworkTestResults(server: string): Promise> {\r\n return this.getCachedNetworkTest(server);\r\n }\r\n\r\n private async getCachedNetworkTest(server: string, networkFingerPrint?: string, maxSubscriptionProfile?: NetworkTestProfile): Promise> {\r\n const [networkFingerprint, cachedResults, sortedSubscriptionProfiles]: [string, NetworkTestEntry[], NetworkTestProfile[]] = await Promise.all([\r\n networkFingerPrint? Promise.resolve(networkFingerPrint): this.getNetworkFingerprint(),\r\n this.mDB.get(NETWORKTEST_DB_NAME) as Promise,\r\n maxSubscriptionProfile ? Promise.resolve([maxSubscriptionProfile]): this.getSortedSubscriptionProfiles()\r\n ]);\r\n if (!cachedResults || cachedResults.length === 0) {\r\n return null;\r\n }\r\n maxSubscriptionProfile = sortedSubscriptionProfiles[0];\r\n const localEntry: NetworkTestEntry | undefined = cachedResults.find((entry) => {\r\n if (entry.networkFingerPrint === networkFingerprint\r\n && entry.server === server\r\n && entry.maxCapableProfile.width === maxSubscriptionProfile?.width\r\n && entry.maxCapableProfile.height === maxSubscriptionProfile?.height\r\n && entry.maxCapableProfile.fps === maxSubscriptionProfile?.fps) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (!localEntry) {\r\n return null;\r\n }\r\n\r\n return localEntry.testRes;\r\n }\r\n\r\n private async cacheNetworkTest(server: string, networkFingerPrint: string, maxSubscriptionProfile: NetworkTestProfile, testRes: NetworkTestResult) {\r\n const cache: NetworkTestEntry[] = await this.mDB.get(NETWORKTEST_DB_NAME) || [];\r\n const existingEntry = cache.find(entry => entry.server === server && entry.networkFingerPrint === networkFingerPrint);\r\n if (existingEntry) {\r\n existingEntry.maxCapableProfile = maxSubscriptionProfile;\r\n existingEntry.testRes = testRes;\r\n }\r\n else {\r\n const newEntry: NetworkTestEntry = {\r\n networkFingerPrint: networkFingerPrint,\r\n server: server,\r\n testRes: testRes,\r\n maxCapableProfile: maxSubscriptionProfile\r\n }\r\n cache.push(newEntry);\r\n }\r\n this.mDB.set(NETWORKTEST_DB_NAME, cache);\r\n }\r\n\r\n /**\r\n * Checks the latency of multiple servers\r\n *\r\n * @param servers A list of servers to check the latency on\r\n * @param port The port number to check on those servers\r\n *\r\n * @returns The server with the lowest latency\r\n */\r\n public async runLatencyTest(servers: string[]): Promise {\r\n if (this.mPlatformNetworkTest != null) {\r\n return new Promise((resolve, reject) => {\r\n this.mOnLatencyTestComplete = (platformResult: PlatformLatencyTestResult) => {\r\n let lowestLatencyIndex = 0;\r\n if (platformResult.resultCode != LATENCY_TEST_SUCCESS && platformResult.resultCode != LATENCY_TEST_PARTIAL_SUCCESS) {\r\n const err = `LBR failed with error code ${platformResult.resultCode}`;\r\n logger.error(err);\r\n return reject(err);\r\n }\r\n if (!platformResult.serverLatencies || !platformResult.serverAddresses) {\r\n const err = \"LBR returned with no error, but had no valid results\"\r\n logger.error(err);\r\n return reject(err);\r\n }\r\n for (let i = 0; i < platformResult.serverLatencies.length; i++) {\r\n if (platformResult.serverLatencies[i] < platformResult.serverLatencies[lowestLatencyIndex] && platformResult.serverLatencies[i] > 0) {\r\n lowestLatencyIndex = i;\r\n }\r\n }\r\n resolve(platformResult.serverAddresses[lowestLatencyIndex]);\r\n }\r\n this.mPlatformNetworkTest!.runLatencyTest(servers);\r\n }).finally(() => this.mOnLatencyTestComplete = () => {});\r\n }\r\n throw new APIError(APIErrorCode.FeatureNotSupported, \"This platform does not support latency based routing.\");\r\n }\r\n\r\n /** @internal **/\r\n public getNetworkFingerprint():string {\r\n if (this.mPlatformNetworkTest != null) {\r\n return this.mPlatformNetworkTest.getNetworkFingerprint();\r\n }\r\n throw new APIError(APIErrorCode.FeatureNotSupported, \"This platform does not support network fingerprinting.\");\r\n }\r\n\r\n /** @internal **/\r\n public finishLatencyTest(result: string): void {\r\n const obj: any = JSON.parse(result);\r\n const platformResult: PlatformLatencyTestResult = obj as PlatformLatencyTestResult;\r\n this.mOnLatencyTestComplete(platformResult);\r\n }\r\n\r\n public static GetMaxBandwidth(width: number, height: number, fps: number): number\r\n {\r\n const IDEAL_BPS_1080P = fps < 60 ? IDEAL_BPS_1080P30 : IDEAL_BPS_1080P60;\r\n const MAX_1440p_RATE_BPS = fps < 60 ? IDEAL_BPS_1440P30 : IDEAL_BPS_1440P60;\r\n let maxBitratePps;\r\n let adjustedFps = fps <= 30 ? fps * MULTIPLIER_30_FPS : Math.min(fps, 60);\r\n let bitsPerSecond = IDEAL_BPS_COEFFICIENT * width * height * adjustedFps;\r\n\r\n if (width * height <= MAX_1440p_SUPPORTED_MODE)\r\n {\r\n maxBitratePps =\r\n bitsPerSecond > IDEAL_BPS_1080P\r\n ? IDEAL_BPS_1080P + (bitsPerSecond - IDEAL_BPS_1080P) / 3\r\n : bitsPerSecond;\r\n }\r\n else {\r\n if (bitsPerSecond > MAX_1440p_RATE_BPS) {\r\n maxBitratePps = MAX_1440p_RATE_BPS + (bitsPerSecond - MAX_1440p_RATE_BPS) / 12;\r\n } else if (bitsPerSecond > IDEAL_BPS_1080P) {\r\n maxBitratePps = IDEAL_BPS_1080P + (bitsPerSecond - IDEAL_BPS_1080P) / 12;\r\n } else {\r\n maxBitratePps = bitsPerSecond;\r\n }\r\n }\r\n return maxBitratePps / MAX_BITRATE_DIVISIVE_CONSTANT;\r\n }\r\n\r\n private static GetResultCodeFromNativeCode(nativeResultCode: NativeNetworkTestResultCode): NetworkTestResultCode {\r\n switch (nativeResultCode) {\r\n case NativeNetworkTestResultCode.NCT_R_SUCCESS:\r\n return NetworkTestResultCode.Success;\r\n case NativeNetworkTestResultCode.NCT_R_INVALID_PARAM:\r\n return NetworkTestResultCode.InvalidParameter;\r\n case NativeNetworkTestResultCode.NCT_R_SYN_FAILED:\r\n case NativeNetworkTestResultCode.NCT_R_FIN_FAILED:\r\n return NetworkTestResultCode.NetworkError;\r\n case NativeNetworkTestResultCode.NCT_R_AUTH_FAILED:\r\n return NetworkTestResultCode.AuthError;\r\n case NativeNetworkTestResultCode.NCT_R_POST_FAILED:\r\n case NativeNetworkTestResultCode.NCT_R_RETRYABLE_POST_FAILURE:\r\n return NetworkTestResultCode.ServiceUnavailable;\r\n case NativeNetworkTestResultCode.NCT_R_TEST_IN_PROGRESS:\r\n case NativeNetworkTestResultCode.NCT_R_SESSION_EXIST:\r\n return NetworkTestResultCode.SessionLimitExceeded;\r\n case NativeNetworkTestResultCode.NCT_R_CANCELLED:\r\n return NetworkTestResultCode.Cancelled;\r\n case NativeNetworkTestResultCode.NCT_R_CAPACITY_FULL:\r\n return NetworkTestResultCode.InsufficientResources;\r\n case NativeNetworkTestResultCode.NCT_R_INVALID_DATA:\r\n return NetworkTestResultCode.InvalidData;\r\n case NativeNetworkTestResultCode.NCT_R_SETUP_FAILED:\r\n return NetworkTestResultCode.InitializationFailure;\r\n case NativeNetworkTestResultCode.NCT_R_UNKNOWN:\r\n default:\r\n return NetworkTestResultCode.Unknown;\r\n }\r\n }\r\n\r\n private static GetNetworkResultCapability(platformResult: PlatformNetworkTestResult): NetworkCapability {\r\n const measuredPacketLoss = platformResult.packetLoss;\r\n const measuredJitter = platformResult.percentile99thFrameJitter;\r\n const measuredLatency = platformResult.latencyWithoutStream;\r\n const measuredBandwidth = platformResult.downlinkBandwidth;\r\n let hasValidThreshold = false;\r\n let hasInvalidThreshold = false;\r\n let allThresholdsAreOptimal = true;\r\n platformResult.thresholds.forEach((threshold) => {\r\n if (platformResult.packetLoss > threshold.packetLossLimit ||\r\n platformResult.percentile99thFrameJitter > threshold.percentile99thFrameJitterLimit ||\r\n platformResult.latencyWithoutStream > threshold.latencyLimit ||\r\n platformResult.downlinkBandwidth < threshold.bandwidthLimit) {\r\n hasInvalidThreshold = true;\r\n allThresholdsAreOptimal = false;\r\n } else if (platformResult.packetLoss > threshold.packetLossRecommended ||\r\n platformResult.percentile99thFrameJitter > threshold.percentile99thFrameJitterRecommended ||\r\n platformResult.latencyWithoutStream > threshold.latencyRecommended ||\r\n platformResult.downlinkBandwidth < threshold.bandwidthRecommended) {\r\n hasValidThreshold = true;\r\n allThresholdsAreOptimal = false;\r\n } else {\r\n hasValidThreshold = true;\r\n }\r\n });\r\n\r\n if (allThresholdsAreOptimal) {\r\n return NetworkCapability.Capable;\r\n } else if (hasValidThreshold) {\r\n return NetworkCapability.Minimum;\r\n } else {\r\n return NetworkCapability.Insufficient;\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * Type of message sent to the client\r\n *\r\n * @internal\r\n */\r\nexport enum ClientMessageType {\r\n /**\r\n * Sent to the client sdk when the streamed app needs to send a text string to the client.\r\n */\r\n AppCustomMessage = \"AppCustomMessage\",\r\n\r\n /**\r\n * Sent to the client when the streamed app wants to open a link.\r\n */\r\n ClickedUrl = \"CLICKED_URL\",\r\n}\r\n\r\n/**\r\n * Target client recipient of the message from the streamed app.\r\n *\r\n * @internal\r\n */\r\nexport enum ClientMessageRecipient {\r\n /**\r\n * Message is send to the client SDK\r\n */\r\n GfnSdk = \"GFNSDK\",\r\n\r\n /**\r\n * Message is sent to any GFN Client or SDK\r\n */\r\n GfnClientUI = \"GFN_CLIENT_UI\"\r\n}\r\n\r\n/**\r\n * Data packet that comes with type ClickedUrl\r\n *\r\n * @internal\r\n */\r\nexport interface UrlClickData {\r\n url: string;\r\n shortUrl?: string;\r\n}\r\n\r\nconst UrlSchemes = {\r\n http: \"http:\",\r\n https: \"https:\"\r\n} as const;\r\n\r\nexport const AllowedUrlSchemes: readonly string[] = [UrlSchemes.http, UrlSchemes.https];\r\n","/* Copyright (c) 2024-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Logging } from \"../logging/logging\";\r\nimport { EditBoxZone, VideoBounds } from \"./streamer.types\";\r\n\r\nconst InputNormalizationFactor: number = 65535;\r\nconst logger = Logging.getLogger(\"streamer/editable-region\");\r\n\r\n// Much of this code was taken from the GFN Client. Modifications were made to make it work for both native and web.\r\n/** @internal **/\r\nexport class EditableRegion {\r\n private mScreenRect: EditBoxZone;\r\n private mGameRect: EditBoxZone;\r\n private mVideoBounds: VideoBounds;\r\n\r\n public get screenRect(): EditBoxZone {\r\n return this.mScreenRect;\r\n }\r\n\r\n public get gameRect(): EditBoxZone {\r\n return this.mGameRect;\r\n }\r\n\r\n public set gameRect(value: EditBoxZone) {\r\n this.mGameRect = value;\r\n }\r\n\r\n public set videoBounds(value: VideoBounds) {\r\n this.mVideoBounds = value;\r\n }\r\n\r\n constructor(gameTextboxRect: EditBoxZone, videoBounds: VideoBounds) {\r\n this.mGameRect = gameTextboxRect;\r\n this.mScreenRect = gameTextboxRect;\r\n this.mVideoBounds = videoBounds;\r\n\r\n this.calculateScreenTextBoxRect();\r\n }\r\n\r\n public calculateScreenTextBoxRect(): void {\r\n const videoRatio: number = this.mVideoBounds.videoWidth / this.mVideoBounds.videoHeight;\r\n const elementRatio: number = this.mVideoBounds.boundingWidth / this.mVideoBounds.boundingHeight;\r\n\r\n let scalingFactor: number = 1.0;\r\n let topPadding: number = 0.0;\r\n let leftPadding: number = 0.0;\r\n let displayVideoWidth: number;\r\n let displayVideoHeight: number;\r\n\r\n // There can be padding, either above/below (letterbox) or\r\n // left/right (pillarbox) of the video (remote session) content.\r\n // Take ratio of element's actual width(height) and video's real width(height).\r\n // (Ratio of CSS pixels to server pixels.)\r\n // That will be the scaling factor for the entire video;\r\n // the video aspect doesn't change.\r\n // Use that scaling factor as multiplier for received event co-ordinates,\r\n // *after* those co-ordinates have been corrected for the padding bars.\r\n if (elementRatio > videoRatio) {\r\n // Pillarbox\r\n scalingFactor = this.mVideoBounds.boundingHeight / this.mVideoBounds.videoHeight;\r\n displayVideoWidth = this.mVideoBounds.videoWidth * scalingFactor;\r\n displayVideoHeight = this.mVideoBounds.videoHeight * scalingFactor;\r\n leftPadding = (this.mVideoBounds.boundingWidth - displayVideoWidth) / 2;\r\n } else {\r\n // Letterbox\r\n scalingFactor = this.mVideoBounds.boundingWidth / this.mVideoBounds.videoWidth;\r\n displayVideoWidth = this.mVideoBounds.videoWidth * scalingFactor;\r\n displayVideoHeight = this.mVideoBounds.videoHeight * scalingFactor;\r\n topPadding = (this.mVideoBounds.boundingHeight - displayVideoHeight) / 2;\r\n }\r\n\r\n const leftMargin: number = this.mVideoBounds.boundingLeft + leftPadding;\r\n const topMargin: number = this.mVideoBounds.boundingTop + topPadding;\r\n\r\n // Convert normalized rect coordinates to abs screen coordinates\r\n const normRect = {\r\n left: (this.gameRect.rect.left * displayVideoWidth) / InputNormalizationFactor,\r\n top: (this.gameRect.rect.top * displayVideoHeight) / InputNormalizationFactor,\r\n right: (this.gameRect.rect.right * displayVideoWidth) / InputNormalizationFactor,\r\n bottom: (this.gameRect.rect.bottom * displayVideoHeight) / InputNormalizationFactor\r\n };\r\n\r\n this.mScreenRect = {\r\n id: this.gameRect.id,\r\n rect: {\r\n left: Math.min(Math.max(normRect.left, 0), displayVideoWidth) + leftMargin,\r\n top: Math.min(Math.max(normRect.top, 0), displayVideoHeight) + topMargin,\r\n right: Math.min(Math.max(normRect.right, 0), displayVideoWidth) + leftMargin,\r\n bottom: Math.min(Math.max(normRect.bottom, 0), displayVideoHeight) + topMargin}\r\n };\r\n\r\n logger.verbose(\r\n \"Setting action zone to:(l,t,r,b) :( \" +\r\n this.screenRect.rect.left.toFixed(2) +\r\n \", \" +\r\n this.screenRect.rect.top.toFixed(2) +\r\n \", \" +\r\n this.screenRect.rect.right.toFixed(2) +\r\n \", \" +\r\n this.screenRect.rect.bottom.toFixed(2) +\r\n \")\"\r\n );\r\n }\r\n}\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { AspectRatio, CallbackWithResult, IInitializable, Nullable, Size, Undefined } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Device } from \"../device/device\";\r\nimport { DeviceKind, DeviceOS, DisplayDetails } from \"../device/device.types\";\r\nimport { I18N } from \"../i18n/i18n\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { ToClientIdentityPlatform, ToGsDeviceOS, ToGsPlatformName } from \"../platform/platform-mappings\";\r\nimport { AppLaunchMode, SessionStatus } from \"../server/server.entities\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { Version } from \"../version/version\";\r\nimport { AudioChannelsConfigurationValue, BaseStreamerConfiguration } from \"./base/base-streamer.types\";\r\nimport {\r\n StreamerStartParameters,\r\n StreamerEvents,\r\n StreamProfilePreset,\r\n StreamProfilePresetData,\r\n StreamerState,\r\n StreamerDiagnosticLevel,\r\n StreamerSession,\r\n StreamerTerminationReason,\r\n SessionSetupProgressEvent,\r\n SessionSetupProgress,\r\n StreamerSessionConnection,\r\n StreamerProtocol,\r\n StreamerAppLevelProtocol,\r\n StreamerUsage,\r\n StreamParameters,\r\n StreamerVSyncMode,\r\n StreamerNetworkQualityChangedEvent,\r\n StreamerNetworkQuality,\r\n StreamStats,\r\n DEFAULT_PROFILE_BALANCED_PARAMS,\r\n DEFAULT_PROFILE_COMPETITIVE_PARAMS,\r\n DEFAULT_PROFILE_DATASAVER_PARAMS,\r\n StreamerMicrophoneState,\r\n EditBoxZone,\r\n VideoBounds\r\n} from \"./streamer.types\";\r\n\r\nimport { STREAMER_CUSTOMER_CARE_LINKS_MAP, MapReasonToErrorMessage, MapGsErrorCodeToReason } from \"./streamer-errors\";\r\n\r\nimport {\r\n ClientStreamer,\r\n ClientType,\r\n GsInitParams,\r\n GridServer,\r\n GridServerSettings,\r\n DeviceType,\r\n GS_EVENTS,\r\n ActiveSessionResultEvent,\r\n LogEvent,\r\n SessionProgressUpdateEvent,\r\n SESSIONMODIFY_ACTION,\r\n GridSession,\r\n SessionState,\r\n LogLevel,\r\n AuthType,\r\n AuthInfo,\r\n ActiveSessionInfo,\r\n SessionProgressState,\r\n ServerError as GsServerError,\r\n AppLaunchMode as GsAppLaunchMode,\r\n ErrorDetails as GsErrorDetails,\r\n ConnectionInfo,\r\n StreamInfo,\r\n SessionParams,\r\n ServerInfo,\r\n GsErrorCode,\r\n CLIENT_VERSION,\r\n TelemetryEventPayload,\r\n MonitorSettings,\r\n SdrHdrMode\r\n} from \"@gamestream-stable/gridserver\";\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { MockGridServer, MOCK_ZONE_NAME } from \"./mock/mock-grid-server\";\r\nimport { MockGsInitParams } from \"./mock/mock-streamer.types\";\r\nimport { Zone } from \"../server/server.types\";\r\nimport { Entitlement } from \"../entitlement/entitlement\";\r\nimport { Auth } from \"../idm/auth\";\r\nimport { UserSubscriptionInfo } from \"../entitlement/entitlement.types\";\r\nimport { Catalog } from \"../catalog/catalog\";\r\nimport { AppData, AppDataLevelOfDetail, AppsQueryConfiguration, AppStoreDefinition, DoNotSendVpcId, GfnFeature, InputControllerType, MediaAssetFlags, VariantData } from \"../catalog/catalog.types\";\r\nimport { UIData } from \"../ui/streamer-ui.types\";\r\nimport { ITelemetry, StreamingQualityType, VSyncMode } from \"../telemetry/telemetry.types\";\r\nimport { StreamingQuality as EntitlementStreamingQuality, ClientStreamingQualityMode, SubscriptionFeatureMetadata, StreamingQualityResponseEntity } from \"../entitlement/entitlement.entities\";\r\nimport { Feedback } from \"../telemetry/feedback\";\r\nimport { LoggingLevel } from \"../logging/logging.types\";\r\nimport { RemoteLogger } from \"../logging/remote-logger\";\r\nimport { CatalogUtils } from \"../catalog/catalog-utils\";\r\nimport { EntitlementUtils } from \"../entitlement/entitlement-utils\";\r\nimport { User } from \"../idm/user\";\r\nimport GFN from \"..\";\r\nimport { NetworkTest } from \"../networktest/network-test\";\r\nimport { NetworkTestResult, NetworkType } from \"../networktest/network-test.types\";\r\nimport { GuestMode } from \"../guestmode/guestmode\";\r\nimport { AllowedUrlSchemes, ClientMessageRecipient, ClientMessageType, UrlClickData } from \"./custom-message.types\";\r\nimport { GestureHelperEvent, GestureType } from \"../input/gesture.types\";\r\nimport { EditableRegion } from \"./editable-region\";\r\n\r\ntype TokenCallback = CallbackWithResult>;\r\ntype GsError = Error | GsErrorDetails | GsServerError;\r\n\r\n// balanced preset\r\nconst BALANCED_LIMITS: Size[] = [\r\n { width: 1920, height: 1200 }, // 16:10\r\n { width: 1920, height: 1080 }, // 16:9\r\n { width: 1280, height: 1024 }, // 5:4\r\n { width: 1600, height: 1200 }, // 4:3\r\n];\r\n\r\n// data saver and competitive presets\r\nconst REDUCED_LIMITS: Size[] = [\r\n { width: 1280, height: 800 }, // 16:10\r\n { width: 1280, height: 720 }, // 16:9\r\n { width: 1280, height: 1024 }, // 5:4\r\n { width: 1024, height: 768 }, // 4:3\r\n];\r\n\r\nconst MS_VENDOR_ID = 0x45e;\r\nconst WAIT_FOR_STOP_SLEEP_INTERNAL_MS: number = 100;\r\nconst WAIT_FOR_STOP_TIMEOUT_MS: number = 30 * 1000;\r\n\r\n// Defined in https://docs.google.com/document/d/1TMhRlToMtTnaSMNYgD7_0VN2xnuNBOab\r\nconst MAX_CUSTOM_MESSAGE_SIZE = 8 * 1024;\r\nconst MAX_CUSTOM_MESSAGES_PER_SEC = 30;\r\nconst ONE_SECOND = 1000;\r\n\r\n\r\nconst logger = Logging.getLogger(\"streamer/streamer\");\r\n\r\n/**\r\n * Represents a streamer used to stream a session to the client.\r\n *\r\n * See [Streamer Information](../guides/streamer-info.html) for more details.\r\n */\r\nexport abstract class Streamer extends EventEmitter implements IInitializable {\r\n /** @internal */\r\n protected static readonly ClientIdentification: string = \"GFN-Client-SDK\";\r\n\r\n private mGridServer: Nullable = null;\r\n private readonly mI18N: I18N;\r\n private readonly mEntitlement: Entitlement;\r\n private readonly mCatalog: Catalog;\r\n private readonly mNetworkTest: NetworkTest;\r\n\r\n /** @internal */\r\n protected mStartParameters: Nullable = null;\r\n /** @internal */\r\n protected mState: StreamerState = StreamerState.Unknown;\r\n /** @internal */\r\n protected readonly mAuth: Auth;\r\n /** @internal */\r\n protected readonly mTelemetry: ITelemetry;\r\n /** @internal */\r\n protected readonly mFeedback: Feedback;\r\n /** @internal */\r\n protected readonly mGuestMode: GuestMode;\r\n /** @internal */\r\n protected readonly mConfiguration: Configuration;\r\n /** @internal */\r\n protected readonly mDevice: Device;\r\n /** @internal */\r\n protected readonly mPlatformStreamer: Nullable;\r\n /** @internal */\r\n protected mLibName: string = \"\";\r\n /** @internal */\r\n protected mLibVersion: string = \"\";\r\n /** @internal */\r\n protected mLibVersionTag: string = \"\";\r\n /** @internal */\r\n protected mSdkVersion!: Version;\r\n /** @internal */\r\n protected mSettings!: Settings;\r\n /** @internal */\r\n protected mSession?: StreamerSession;\r\n /** @internal **/\r\n protected mUserSubscription: Nullable = null;\r\n /** @internal **/\r\n protected mAppStoreInfo: Nullable = null;\r\n /** @internal **/\r\n protected mAppData: Nullable = null;\r\n /** @internal **/\r\n protected mAppVariantData: Nullable = null;\r\n /** @internal **/\r\n protected mRemoteLogger: RemoteLogger;\r\n /** @internal **/\r\n protected mQosScore: number;\r\n /** @internal **/\r\n protected mNetworkQuality: StreamerNetworkQuality;\r\n /** @internal **/\r\n protected mCustomMessageSentTimings: number[];\r\n /**internal */\r\n protected mStreamStats: StreamStats;\r\n /** @internal */\r\n protected mStreamParams: StreamParameters[] = [\r\n DEFAULT_PROFILE_BALANCED_PARAMS,\r\n DEFAULT_PROFILE_DATASAVER_PARAMS,\r\n DEFAULT_PROFILE_COMPETITIVE_PARAMS\r\n ];\r\n /** @internal */\r\n protected mMutedState: boolean;\r\n /** @internal */\r\n protected mVolume: number;\r\n /** @internal */\r\n protected mMicState: StreamerMicrophoneState = StreamerMicrophoneState.WaitingForPermission;\r\n /** @internal */\r\n protected mIsKeyboardVisible: boolean = false;\r\n /** @internal **/\r\n private mEditboxList: EditBoxZone[] = [];\r\n /** @internal **/\r\n private mEditableRegions: EditableRegion[] = [];\r\n /** @internal **/\r\n private mActiveEditableRegionIndex: number= -1;\r\n /** @internal **/\r\n private mConsecutiveTouchTimes: number = 0;\r\n /** @internal **/\r\n private mEditboxEventTimeout: Nullable> = null;\r\n\r\n /** @internal **/\r\n protected abstract get defaultConfiguration(): BaseStreamerConfiguration;\r\n\r\n /** @internal **/\r\n protected abstract get defaultConfigurationOverrides(): Nullable;\r\n\r\n /** @internal **/\r\n protected get canUseIntroPlayer(): boolean {\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n protected get vSyncMode(): StreamerVSyncMode {\r\n return StreamerVSyncMode.On;\r\n }\r\n\r\n /** @internal **/\r\n public get libraryName(): string {\r\n return this.mLibName;\r\n }\r\n\r\n /** @internal **/\r\n public get libraryVersion(): string {\r\n return this.mLibVersion;\r\n }\r\n\r\n /** @internal **/\r\n public get libraryVersionTag(): string {\r\n return this.mLibVersionTag;\r\n }\r\n\r\n /**\r\n * Gets the session identifier, if a session\r\n * has not been streamed then this will be empty.\r\n */\r\n public get sessionId(): string {\r\n if (this.mSession) {\r\n return this.mSession.sessionId;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the sub-session identifier, if a session\r\n * has not been streamed then this will be empty.\r\n */\r\n public get subSessionId(): string {\r\n if (this.mSession) {\r\n return this.mSession.subSessionId;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the session's server url or empty if a session\r\n * has not yet been started.\r\n */\r\n public get serverUrl(): string {\r\n const z: Nullable = this.serverZone;\r\n\r\n if (z) {\r\n return z.address;\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n /**\r\n * Gets the session's zone or null if a session has\r\n * not yet been started.\r\n */\r\n public get serverZone(): Nullable {\r\n if (this.mStartParameters) {\r\n\r\n if (Streamer.IsZone(this.mStartParameters.server)) {\r\n return this.mStartParameters.server;\r\n }\r\n\r\n if (typeof(this.mStartParameters.server) === \"string\") {\r\n return { name: \"\", address: this.mStartParameters.server };\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets the current state of this streamer.\r\n */\r\n public get state(): StreamerState {\r\n return this.mState;\r\n }\r\n\r\n /**\r\n * Checks if this platform supports streaming.\r\n *\r\n * @returns\r\n * True if this platform supports streaming; otherwise, false if it does not.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get isSupported(): boolean {\r\n // has this check been disabled?\r\n if (!this.mSettings?.enableSupportCheck) {\r\n return true;\r\n }\r\n\r\n return this.doStreamingSupportCheck();\r\n }\r\n\r\n /**\r\n * Shows whether Window Mode Streaming is supported or not.\r\n *\r\n * @internal\r\n */\r\n public get isWindowModeSupported(): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * True if a keyboard is currently visible; otherwise, false.\r\n */\r\n public get isKeyboardVisible(): boolean {\r\n return this.mIsKeyboardVisible;\r\n }\r\n\r\n /**\r\n * Get streaming stats\r\n */\r\n public get stats(): StreamStats {\r\n this.mStreamStats.serverLocation = this.mSession && this.mSession.zone ? `${this.mSession.zone.name} (${this.mSession.zone.address})` : this.serverUrl;\r\n this.mStreamStats.networkType = this.mDevice.networkType;\r\n this.mStreamStats.networkName = this.mDevice.networkName;\r\n this.mStreamStats.hdrStatus = this.isHDRSupported;\r\n return this.mStreamStats;\r\n }\r\n\r\n /**\r\n * Gets stream Params as per entitlement and server capability\r\n * @internal\r\n */\r\n private get streamParams(): StreamParameters {\r\n if (!this.mStartParameters) {\r\n logger.error(\"Start Parameters not available. Returning default balanced profile stream params.\");\r\n return DEFAULT_PROFILE_BALANCED_PARAMS;\r\n }\r\n if (this.mStartParameters.profilePreset) {\r\n if (this.mStartParameters.profilePreset === StreamProfilePreset.DataSaver) {\r\n return this.mStreamParams[StreamProfilePreset.DataSaver];\r\n } else if (this.mStartParameters.profilePreset === StreamProfilePreset.Competitive) {\r\n return this.mStreamParams[StreamProfilePreset.Competitive];\r\n } else {\r\n if (this.mStartParameters.profilePreset !== StreamProfilePreset.Balanced) {\r\n logger.warn(`Invalid preset: ${this.mStartParameters.profilePreset}, defaulting to Balanced profile.`);\r\n }\r\n return this.mStreamParams[StreamProfilePreset.Balanced];\r\n }\r\n } else if (this.mStartParameters.streamParams) {\r\n return this.mStartParameters.streamParams;\r\n } else {\r\n throw new APIError(APIErrorCode.InvalidParameter, \"Neither Preset nor streamParams defined in Streamer start parameters\");\r\n }\r\n }\r\n\r\n /**\r\n * Get the current volume level for a stream.\r\n *\r\n * @returns The current volume level. 1 is full volume, 0 is silent.\r\n */\r\n public get volume(): number {\r\n return this.mVolume;\r\n }\r\n\r\n /**\r\n * Set the current volume level for a web stream.\r\n * @param volume 1 is full volume, 0 is silent.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.DeviceNotSupported}.\r\n */\r\n public set volume(volume: number) {\r\n this.mVolume = volume;\r\n this.updateVolume();\r\n }\r\n\r\n /** @internal **/\r\n protected abstract updateVolume(): void;\r\n\r\n /**\r\n * Get the current muted/unmuted state.\r\n */\r\n public get muted(): boolean {\r\n return this.mMutedState;\r\n }\r\n\r\n /**\r\n * Set the current muted/unmuted state for a web stream.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.DeviceNotSupported}.\r\n */\r\n public set muted(state: boolean) {\r\n this.mMutedState = state;\r\n this.updateMutedState();\r\n }\r\n\r\n /** @internal **/\r\n protected abstract updateMutedState(): void;\r\n\r\n /**\r\n * Gets the current state of the microphone.\r\n */\r\n public get microphoneState(): StreamerMicrophoneState {\r\n return this.mMicState;\r\n }\r\n\r\n /** @internal */\r\n constructor(config: Configuration, device: Device, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, platformStreamer: Nullable = null, telemetry: ITelemetry, feedback: Feedback, remoteLogger: RemoteLogger, networkTest: NetworkTest, guestMode: GuestMode) {\r\n super();\r\n\r\n this.mConfiguration = config;\r\n this.mDevice = device;\r\n this.mPlatformStreamer = platformStreamer;\r\n this.mI18N = i18n;\r\n this.mEntitlement = entitlement;\r\n this.mAuth = auth;\r\n this.mCatalog = catalog;\r\n this.mTelemetry = telemetry;\r\n this.mFeedback = feedback;\r\n this.mRemoteLogger = remoteLogger;\r\n this.mNetworkTest = networkTest;\r\n this.mGuestMode = guestMode;\r\n this.mQosScore = 0;\r\n this.mNetworkQuality = StreamerNetworkQuality.Unknown;\r\n this.mStreamStats = {};\r\n\r\n if (this.mPlatformStreamer) {\r\n const libInfo: PlatformStreamerLibraryInfo = JSON.parse(this.mPlatformStreamer.getLibraryInfoJson()) as PlatformStreamerLibraryInfo;\r\n\r\n this.mLibName = libInfo.name;\r\n this.mLibVersion = libInfo.version;\r\n this.mLibVersionTag = libInfo.tag;\r\n }\r\n\r\n // grid server settings must be set before creating\r\n // an instance of the GridServer\r\n this.configureGridServerSettings();\r\n\r\n this.mCustomMessageSentTimings = [];\r\n this.mMutedState = false;\r\n this.mVolume = 1;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(ctx: IInitializeContext): Promise {\r\n this.mSettings = ctx.settings;\r\n this.mSdkVersion = ctx.sdkVersion;\r\n }\r\n\r\n /**\r\n * Starts a new stream.\r\n *\r\n * @param params\r\n * The configuration used to setup the stream.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.DeviceNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.WaitForStopTimeout}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NoStreamingSession}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingVpcId}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. See error details for information on the invalid parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidState}. See error details for more information.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserNotAuthorized}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserNotLoggedIn}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidSubscription}. The user does not have an active subscription.\r\n *\r\n */\r\n public async start(params: StreamerStartParameters): Promise {\r\n if (params.enableMutedAutoPlay !== null && params.enableMutedAutoPlay !== undefined) {\r\n this.mMutedState = params.enableMutedAutoPlay;\r\n }\r\n\r\n return this.startOrResume(params, false);\r\n }\r\n\r\n /**\r\n * Resumes an existing stream.\r\n *\r\n * @param params\r\n * The configuration used to setup the stream.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.DeviceNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.WaitForStopTimeout}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NoStreamingSession}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingVpcId}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. See error details for information on the invalid parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidState}. See error details for more information.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserNotAuthorized}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.UserNotLoggedIn}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidSubscription}. The user does not have an active subscription.\r\n */\r\n public async resume(params: StreamerStartParameters): Promise {\r\n return this.startOrResume(params, true);\r\n }\r\n\r\n /**\r\n * Stops a stream.\r\n */\r\n public stop(): void {\r\n if (this.mState === StreamerState.Initializing || this.mState === StreamerState.Resuming) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, \"cancelling session setup...\");\r\n this.doCancelSessionSetup();\r\n } else {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, \"stopping streamer session...\");\r\n this.doStopStream();\r\n }\r\n }\r\n\r\n /**\r\n * Cancels the session setup or if a session has already been setup\r\n * then stops the stream.\r\n *\r\n * @deprecated\r\n * Use {@link Streamer.stop} instead.\r\n */\r\n public cancel(): void {\r\n this.stop();\r\n }\r\n\r\n /**\r\n * Change the keyboard layout that is used to handle key events on the server.\r\n *\r\n * Does nothing if {@link StreamerStartParameters.allowKeyboardLayoutChange} is false.\r\n *\r\n * @param kbLayout\r\n * The new keyboard layout.\r\n *\r\n * @internal\r\n */\r\n public changeKeyboardLayout(kbLayout: string): void {\r\n // TODO: add platform api to send custom messages to the server\r\n // sendServerMessage(messageType: \"kbLayout\", messageRecipient: \"KBLayoutChange\", data: kbLayout);\r\n }\r\n\r\n /**\r\n * Retrieves the available StreamProfilePresents that may be passed to {@link detectStreamingResolution}.\r\n *\r\n * @returns\r\n * A list of presets and their translations according to {@link GFN.settings.languageCode}.\r\n */\r\n public async getStreamProfilePresets(): Promise {\r\n const profileData: StreamProfilePresetData[] = [{\r\n preset: StreamProfilePreset.Balanced,\r\n description: \"streamingProfiles.balanced\"\r\n }, {\r\n preset: StreamProfilePreset.DataSaver,\r\n description: \"streamingProfiles.dataSaver\"\r\n }, {\r\n preset: StreamProfilePreset.Competitive,\r\n description: \"streamingProfiles.competitive\"\r\n }];\r\n\r\n return Promise.all(profileData.map(async (data: StreamProfilePresetData): Promise => {\r\n return {\r\n preset: data.preset,\r\n description: await this.mI18N.translate(data.description)\r\n };\r\n }));\r\n }\r\n\r\n /**\r\n * Detects the most optimal streaming resolution based on the profile preset and\r\n * the device.\r\n *\r\n * @param preset\r\n * One of the preset values.\r\n *\r\n * @returns\r\n * A size that represents the most optimal streaming resolution.\r\n */\r\n public detectStreamingResolution(preset: StreamProfilePreset = StreamProfilePreset.Balanced): Size {\r\n // from ragnarok-core\\src\\utils.ts\r\n const screenWidth: number = this.mDevice.screenSizeInPixels.width;\r\n const screenHeight: number = this.mDevice.screenSizeInPixels.height;\r\n\r\n if (this.mDevice.os === DeviceOS.iOS && this.mDevice.kind === DeviceKind.Phone) {\r\n // iPhone will always get 720p until hi-dpi streaming is available\r\n return {\r\n width: 1024,\r\n height: 720\r\n };\r\n } else if ((this.mDevice.os === DeviceOS.iOS && this.mDevice.kind === DeviceKind.Tablet) || this.mDevice.os === DeviceOS.iPadOS) {\r\n // iPads basically the same as iPhones\r\n\r\n if (preset !== StreamProfilePreset.Balanced) {\r\n // lowest 4:3 resolution for data saver and competitive presets\r\n return { width: 1024, height: 768 };\r\n }\r\n\r\n // always lock to landscape\r\n const width: number = Math.max(screenWidth, screenHeight);\r\n\r\n if (width <= 1024) {\r\n // 10\" iPads\r\n return { width: 1024, height: 768 };\r\n } else if (width < 1366) {\r\n // ~11\" iPads\r\n return { width: 1112, height: 834 };\r\n } else {\r\n // 13\" iPads\r\n return { width: 1600, height: 1200 };\r\n }\r\n }\r\n\r\n return Streamer.LimitResolution(\r\n {\r\n width: Math.max(screenWidth, screenHeight),\r\n height: Math.min(screenWidth, screenHeight)\r\n },\r\n preset === StreamProfilePreset.Balanced ? BALANCED_LIMITS : REDUCED_LIMITS);\r\n }\r\n\r\n /**\r\n * Shows or hides an overlay that displays the streams statistics.\r\n */\r\n public toggleStatsOverlay(): void {\r\n if (!this.mGuestMode.isGuestMode || this.mGuestMode.config.igoSettings?.isInGameStatisticsEnabled) {\r\n if (this.mPlatformStreamer) {\r\n this.mPlatformStreamer.toggleStats();\r\n }\r\n } else {\r\n logger.info(\"Stats overlay is not enabled for this application.\");\r\n }\r\n }\r\n\r\n /**\r\n * Shows or hides the on-screen controls.\r\n *\r\n * #### Safari (iOS | iPadOS), Chrome (Android)\r\n * When the `keyboardVisible` parameter is `true` the keyboard will only be displayed\r\n * from an activation triggering user event, for example, the `click` event.\r\n *\r\n * For more information on User Activation in browsers, see:\r\n * * https://webkit.org/blog/13862/the-user-activation-api/\r\n * * https://developer.mozilla.org/en-US/docs/Web/API/UserActivation\r\n *\r\n */\r\n public toggleOnScreenControls(keyboardVisible: boolean = false): void {\r\n if (!this.mGuestMode.isGuestMode || this.mGuestMode.config.IsOSCEnabled) {\r\n this.doToggleOsc(keyboardVisible);\r\n } else {\r\n logger.info(\"On Screen Controls are not enabled for this application.\");\r\n }\r\n }\r\n\r\n /**\r\n * Shows, hides or toggles the keyboard (if available).\r\n *\r\n * #### Safari (iOS | iPadOS), Chrome (Android)\r\n * This requires an activation triggering user event, for example, the `click` event.\r\n *\r\n * For more information on User Activation in browsers, see:\r\n * * https://webkit.org/blog/13862/the-user-activation-api/\r\n * * https://developer.mozilla.org/en-US/docs/Web/API/UserActivation\r\n *\r\n * @param visible\r\n * True to show the keyboard, false to hide it; otherwise, if omitted the\r\n * keyboard visibility will be toggled.\r\n *\r\n */\r\n public toggleKeyboard(visible: Undefined): void {\r\n // toggle\r\n if (visible === undefined) {\r\n this.toggleKeyboard(!!this.isKeyboardVisible);\r\n return;\r\n }\r\n\r\n this.doToggleKeyboard(visible);\r\n }\r\n\r\n /** @internal */\r\n protected async doCreateSession(sessionParams: SessionParams): Promise {\r\n if (!this.mSession) {\r\n throw new APIError(APIErrorCode.InvalidState, \"Expected a session object for the current state.\");\r\n }\r\n\r\n const useWebsockets = this.defaultConfiguration.useWebSocketSignaling;\r\n const sessionAction: SESSIONMODIFY_ACTION = this.mSession.sessionId ? SESSIONMODIFY_ACTION.RESUME : SESSIONMODIFY_ACTION.UNKNOWN;\r\n let gridSession: GridSession | undefined = await this.mGridServer!.putOrPostSession(sessionParams, sessionAction, this.mSession.sessionId);\r\n\r\n if (gridSession) {\r\n this.mSession.status = Streamer.GetSessionStatusFromGsState(gridSession.state);\r\n\r\n if (gridSession.state !== SessionState.READY_FOR_CONNECTION) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `new session - (${gridSession.sessionId} / ${this.mSession.subSessionId}) - not yet ready`);\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `waiting for session to be ready... (${gridSession.state})`);\r\n\r\n gridSession = await this.mGridServer?.getSession(gridSession.sessionId, true);\r\n }\r\n }\r\n\r\n if (!gridSession) {\r\n throw new APIError(APIErrorCode.StreamingSessionSetupFailed);\r\n }\r\n\r\n logger.verbose(`raw mediaConnectionInfo: ${JSON.stringify(gridSession.mediaConnectionInfo)}`);\r\n logger.verbose(`raw signalConnectionInfo: ${JSON.stringify(gridSession.signalConnectionInfo)}`);\r\n\r\n this.mSession.sessionId = gridSession.sessionId;\r\n this.mSession.subSessionId = gridSession.subSessionId;\r\n this.mSession.gpuType = gridSession.gpuType;\r\n this.mSession.status = Streamer.GetSessionStatusFromGsState(gridSession.state);\r\n this.mSession.connectionInfo = {\r\n media: gridSession.mediaConnectionInfo.map((v: ConnectionInfo) => {\r\n return Streamer.GetMediaConnectionInfoFromGs(v, useWebsockets, this.serverUrl);\r\n }),\r\n signal: Streamer.GetSignalConnectionInfoFromGs(gridSession.signalConnectionInfo, useWebsockets, this.serverUrl)\r\n };\r\n this.mSession.streamInfo = gridSession.streamInfo.map((v: StreamInfo) => {\r\n return {\r\n width: v.width,\r\n height: v.height,\r\n fps: v.fps,\r\n bitrate: this.streamParams.bitrate ?? 0\r\n };\r\n });\r\n\r\n this.mSession.zone = {\r\n name: gridSession.zoneName,\r\n address: gridSession.zoneAddress\r\n };\r\n\r\n logger.verbose(`actual mediaConnectionInfo: ${JSON.stringify(this.mSession.connectionInfo.media)}`);\r\n logger.verbose(`actual signalConnectionInfo: ${JSON.stringify(this.mSession.connectionInfo.signal)}`);\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `session '${this.mSession.sessionId}' is ready to stream. zone=${this.mSession.zone.name} (${this.mSession.zone.address})`);\r\n this.mRemoteLogger.reset(this.mSession?.sessionId ?? \"\", [this.mSession?.subSessionId ?? \"\"]);\r\n }\r\n\r\n /** @internal */\r\n protected doCancelSessionSetup() {\r\n if (this.mGridServer) {\r\n this.mGridServer.cancelSessionSetup();\r\n }\r\n\r\n this.finish(StreamerTerminationReason.UserCancellation, 0);\r\n }\r\n\r\n /**\r\n * Sends a custom message to the SDK-enabled application on the game seat.\r\n *\r\n * The messaging model is a best-effort “fire and forget”. That is, there is no return receipt nor latency guarantee provided.\r\n *\r\n * If a message as critical, then such a messaging system should be developed by the partner for use between their client and GFN applications.\r\n *\r\n * To not affect QoS of the stream, the data part of the message will be limited to 8KB, and will be throttled to sending no more than 30 messages per second.\r\n *\r\n * @param message\r\n * The message to send to the game seat\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. The payload is zero length or greater than the maximum of 8k.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NoStreamingSession}. Attempting to send a message without an active session.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MessageThrottled}. Too many messages sent in too short of a timeframe.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.GenericError}. Check the message for details.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NotSupported}. The platform does not support messages at this time.\r\n */\r\n public sendMessage(message: string): void {\r\n if (message.length === 0 || message.length > MAX_CUSTOM_MESSAGE_SIZE) {\r\n throw new APIError(APIErrorCode.InvalidParameter);\r\n }\r\n\r\n if (this.state !== StreamerState.Streaming) {\r\n throw new APIError(APIErrorCode.NoStreamingSession)\r\n }\r\n\r\n // Check to see if we need to throttle\r\n const now = Date.now();\r\n while (this.mCustomMessageSentTimings.length > 0) {\r\n if (now - this.mCustomMessageSentTimings[0] <= ONE_SECOND) {\r\n break;\r\n }\r\n this.mCustomMessageSentTimings.shift();\r\n }\r\n\r\n if (this.mCustomMessageSentTimings.length >= MAX_CUSTOM_MESSAGES_PER_SEC)\r\n {\r\n throw new APIError(APIErrorCode.MessageThrottled)\r\n }\r\n\r\n try {\r\n this.doSendCustomMessage(message, ClientMessageType.AppCustomMessage, ClientMessageRecipient.GfnSdk);\r\n } catch (e: any) {\r\n logger.error(\"SendCustomMessage error: \" + e);\r\n throw new APIError(APIErrorCode.GenericError, e);\r\n }\r\n\r\n this.mCustomMessageSentTimings.push(now);\r\n }\r\n\r\n /**\r\n * Sends a keyboard event.\r\n *\r\n * Send a keyboard event using the standard KeyboardEvent javascript object.\r\n *\r\n * @param event\r\n * The KeyboardEvent to send to the cloud application\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. Invalid KeyboardEvent\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NoStreamingSession}. Attempting to send a message without an active session.\r\n */\r\n public sendKeyboardEvent(event: KeyboardEvent): void {\r\n if (this.state !== StreamerState.Streaming) {\r\n throw new APIError(APIErrorCode.NoStreamingSession)\r\n }\r\n\r\n if (!event) {\r\n throw new APIError(APIErrorCode.InvalidParameter);\r\n }\r\n\r\n this.doSendKeyboardEvent(event);\r\n }\r\n\r\n /** @internal **/\r\n protected abstract doSendCustomMessage(message: string, messageType: string, messageRecipient: string): void;\r\n\r\n /** @internal **/\r\n protected abstract doOpenLink(urlData: UrlClickData): Promise;\r\n\r\n /** @internal **/\r\n protected abstract doSendKeyboardEvent(event: KeyboardEvent): void;\r\n\r\n /** @internal **/\r\n protected abstract doCreateVideoBounds(): VideoBounds;\r\n\r\n /** @internal **/\r\n protected abstract doAdjustVideoOffsetForActionRegion(activeRegion: EditableRegion): void;\r\n\r\n protected getActionRegion(): EditableRegion {\r\n return this.mEditableRegions[this.mActiveEditableRegionIndex];\r\n }\r\n\r\n /** @internal **/\r\n protected onCustomMessage(message: any, messageType: string, messageRecipient: string): void {\r\n if (messageType === ClientMessageType.AppCustomMessage && messageRecipient === ClientMessageRecipient.GfnSdk) {\r\n this.emit(\"message\", message);\r\n }\r\n if (messageType === ClientMessageType.ClickedUrl && messageRecipient === ClientMessageRecipient.GfnClientUI) {\r\n try {\r\n const messageJSON = JSON.parse(message);\r\n const urlData: UrlClickData = messageJSON?.URLClickData;\r\n this.openLink(urlData)\r\n } catch (e: any) {\r\n logger.error(\"Could not parse CLICKED_URL metadata\");\r\n }\r\n }\r\n else if (messageType === \"ActionZones\" && messageRecipient === \"Serenity\") {\r\n // See: https://beagle.nvidia.com/xref/gcomp_dev/common/protocols/json/schema_client_messages/v1/def_actionzone_data.schema.json?r=30897725\r\n this.mEditboxList = JSON.parse(message).EditBoxList;\r\n this.mEditboxList.forEach(editboxZone => {\r\n const index: number = this.mEditableRegions.findIndex(item => item.gameRect.id === editboxZone.id);\r\n // If the editbox is not in list, add it\r\n if (index === -1) {\r\n this.mEditableRegions.push(new EditableRegion(editboxZone, this.doCreateVideoBounds()));\r\n } else {\r\n // the editbox exist, so check if it needs to be updated or deleted\r\n if (editboxZone.rect.left && editboxZone.rect.top && editboxZone.rect.right && editboxZone.rect.bottom) {\r\n this.mEditableRegions[index].gameRect = editboxZone;\r\n this.mEditableRegions[index].calculateScreenTextBoxRect();\r\n } else {\r\n this.mEditableRegions.splice(index, 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** @internal **/\r\n protected onGesture(e: GestureHelperEvent): void {\r\n if (this.mEditboxList && this.mEditboxList.length > 0) {\r\n if (e.gestureType !== GestureType.PinchZoom) {\r\n this.touchWithEditableRegions(e);\r\n } else if (e.gestureType === GestureType.PinchZoom) {\r\n this.updateEditableRegions(200);\r\n }\r\n }\r\n }\r\n\r\n /** @internal **/\r\n private touchWithEditableRegions(gestureEvent: GestureHelperEvent): void {\r\n const newActiveEditableRegionIndex:number = this.mEditableRegions.findIndex(\r\n region =>\r\n region.screenRect.rect.left <= gestureEvent.touchX &&\r\n gestureEvent.touchX <= region.screenRect.rect.right &&\r\n region.screenRect.rect.top <= gestureEvent.touchY &&\r\n gestureEvent.touchY <= region.screenRect.rect.bottom\r\n );\r\n const activeRegion: EditableRegion = this.mEditableRegions[newActiveEditableRegionIndex];\r\n const isLongPress: boolean = (gestureEvent.gestureType === GestureType.LongPress);\r\n\r\n try {\r\n if (activeRegion) {\r\n const consecutiveInvoke: boolean = newActiveEditableRegionIndex === this.mActiveEditableRegionIndex;\r\n this.mConsecutiveTouchTimes = isLongPress ? 0 : consecutiveInvoke ? this.mConsecutiveTouchTimes + 1 : 1;\r\n // 2 times a cycle to bring up Paste if tapping in the same editable box.\r\n const doubleTapSameEditBox: boolean = this.mConsecutiveTouchTimes % 2 === 0;\r\n const isAutoPasteValid: boolean = (doubleTapSameEditBox || isLongPress);\r\n\r\n logger.info(`Region ${newActiveEditableRegionIndex} was touched`);\r\n logger.info(\"AutopasteValid? : \" + isAutoPasteValid);\r\n\r\n if (!isAutoPasteValid) {\r\n this.toggleKeyboard(true);\r\n } else {\r\n // TODO: Add paste support here as part of GFNSDK-2439\r\n // for now, just show keyboard\r\n this.toggleKeyboard(true);\r\n }\r\n\r\n this.doAdjustVideoOffsetForActionRegion(activeRegion);\r\n } else {\r\n // Auto dismiss soft keyboard only when editable boxes are available.\r\n logger.info(`(${gestureEvent.touchX}, ${gestureEvent.touchY}) is not in a region:`);\r\n logger.info(\"ScreenRect[0]:(l,t,r,b): (\" +\r\n this.mEditableRegions[0].screenRect.rect.left.toFixed(2) + \", \" +\r\n this.mEditableRegions[0].screenRect.rect.top.toFixed(2) + \", \" +\r\n this.mEditableRegions[0].screenRect.rect.right.toFixed(2) + \", \" +\r\n this.mEditableRegions[0].screenRect.rect.bottom.toFixed(2) + \")\"\r\n );\r\n this.mActiveEditableRegionIndex = -1;\r\n this.toggleKeyboard(false);\r\n }\r\n } catch (e) {\r\n logger.warn(`An exception occurred: ${e}`);\r\n }\r\n\r\n this.mActiveEditableRegionIndex = newActiveEditableRegionIndex;\r\n }\r\n\r\n /** @internal **/\r\n protected updateEditableRegions(delay: number) {\r\n if (!this.mEditboxEventTimeout) {\r\n this.mEditboxEventTimeout = setTimeout(() => {\r\n clearTimeout(this.mEditboxEventTimeout!);\r\n\r\n this.mEditboxEventTimeout = null;\r\n this.mEditableRegions.forEach(region => {\r\n region.videoBounds = this.doCreateVideoBounds();\r\n region.calculateScreenTextBoxRect();\r\n });\r\n }, delay);\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public toggleMicrophone(muted: boolean): void {\r\n if (!this.mGuestMode.isGuestMode || this.mGuestMode.config.igoSettings?.isMicFeatureEnabled) {\r\n this.doToggleMicrophone(muted);\r\n } else {\r\n logger.info(\"Microphone settings are disabled for this application\");\r\n }\r\n }\r\n\r\n /** @internal **/\r\n protected updateMicState(newState: StreamerMicrophoneState): void {\r\n logger.verbose(`Received new microphone state: ${StreamerMicrophoneState[newState]}`);\r\n\r\n if (newState !== this.mMicState) {\r\n logger.info(`Microphone state changed from '${StreamerMicrophoneState[this.mMicState]}' to '${StreamerMicrophoneState[newState]}'`);\r\n this.mMicState = newState;\r\n\r\n this.emit(\"microphoneStateChanged\");\r\n }\r\n }\r\n\r\n\r\n /** @internal **/\r\n protected abstract doStartStream(isResume: boolean): void;\r\n\r\n /** @internal **/\r\n protected abstract doStopStream(): void;\r\n\r\n /** @internal **/\r\n protected abstract doStreamingSupportCheck(): boolean;\r\n\r\n /** @internal **/\r\n protected abstract doToggleOsc(keyboardVisible: boolean): void;\r\n\r\n /** @internal **/\r\n protected abstract doToggleKeyboard(visible: boolean): void;\r\n\r\n /** @internal **/\r\n protected abstract doToggleMicrophone(muted: boolean): void;\r\n\r\n /** @internal **/\r\n protected createGridServer(isMockStreamer: boolean): GridServer {\r\n if (isMockStreamer) {\r\n return new MockGridServer();\r\n } else {\r\n return new GridServer();\r\n }\r\n }\r\n\r\n /** @internal **/\r\n protected initGridServer(gridServer: GridServer, streamerStartParams: StreamerStartParameters, sessionStartParams: GsInitParams): void {\r\n if (streamerStartParams.mockParams?.enabled) {\r\n const mockSessionStartParams = sessionStartParams as MockGsInitParams;\r\n mockSessionStartParams.mock = streamerStartParams.mockParams?.session || {};\r\n gridServer.initialize(mockSessionStartParams);\r\n } else {\r\n gridServer.initialize(sessionStartParams);\r\n }\r\n }\r\n\r\n /** @internal **/\r\n protected finish(terminationReason: StreamerTerminationReason, errorCode?: number): void {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `streamer has finished. (reason=${Utils.string.hex(terminationReason, 8)}, code=${Utils.string.hex(errorCode ?? 0, 8)})`);\r\n this.updateState(StreamerState.Finished);\r\n\r\n const existingSessionId = this.mSession?.sessionId;\r\n if (existingSessionId) {\r\n try {\r\n this.mRemoteLogger.reset();\r\n } catch (e: unknown) {\r\n logger.error(\"Error sending feedback after streamer finish\" + e);\r\n }\r\n }\r\n\r\n this.emit(\"terminated\", {\r\n reason: terminationReason,\r\n code: errorCode\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected async deleteSession(sessionId: string): Promise {\r\n const existingSessionId: string = this.mSession ? this.mSession.sessionId : \"\";\r\n\r\n if (this.mGridServer) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `deleting session ${sessionId} from server...`);\r\n\r\n try {\r\n await this.mGridServer.sendDeleteRequest(sessionId);\r\n } catch(e: any) {\r\n this.handleError(e);\r\n }\r\n\r\n if (existingSessionId === sessionId) {\r\n this.emit(\"stopped\");\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected dispatchDiagnosticEvent(level: StreamerDiagnosticLevel, message: string, code?: number): void {\r\n let logMessage: string = message;\r\n\r\n if (code) {\r\n logMessage += ` (${Utils.string.hex(code, 8)})`;\r\n }\r\n\r\n switch (level) {\r\n case StreamerDiagnosticLevel.Debug:\r\n logger.verbose(logMessage);\r\n break;\r\n case StreamerDiagnosticLevel.Info:\r\n logger.info(logMessage);\r\n break;\r\n case StreamerDiagnosticLevel.Warning:\r\n logger.warn(logMessage);\r\n break;\r\n case StreamerDiagnosticLevel.Error:\r\n logger.error(logMessage);\r\n break;\r\n }\r\n\r\n this.emit(\"diagnostic\", {\r\n level: level,\r\n message: message,\r\n code: code\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected updateState(newState: StreamerState): void {\r\n if (this.mState !== newState) {\r\n this.mState = newState;\r\n this.emit(\"stateChanged\", {\r\n state: this.mState\r\n });\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected runConnectivityCheck(err? :GsError): void {\r\n // TODO: add connection test\r\n }\r\n\r\n protected getUiSettingsJson(): string {\r\n return JSON.stringify(this.mSettings);\r\n }\r\n\r\n protected getUiDataJson(): string {\r\n const uiData: UIData = {\r\n appLabel: this.mAppData?.title ?? \"\",\r\n appStoreLabel: this.mAppStoreInfo?.find(appStoreInfo => appStoreInfo.name === this.mAppVariantData?.appStore)?.title ?? \"\",\r\n subscriptionLabel: this.mUserSubscription?.product?.longDescription ?? \"\",\r\n appSupportedControls: this.mAppData?.supportedControls as string[]\r\n };\r\n return JSON.stringify(uiData);\r\n }\r\n\r\n protected getSupportedAudioChannels(): AudioChannelsConfigurationValue {\r\n // Force config if overidden\r\n if (this.hasStreamerConfigOverride(\"audioChannels\")) {\r\n return this.defaultConfigurationOverrides?.audioChannels || AudioChannelsConfigurationValue.STEREO;\r\n }\r\n\r\n let channelConfig: Undefined = this.defaultConfiguration.audioChannels;\r\n\r\n // Check the subscription for max audio channels\r\n for(const feature of this.mUserSubscription?.subscription?.features?.features || []) {\r\n if (feature.key === SubscriptionFeatureMetadata.SUPPORTED_AUDIO_FORMATS) {\r\n if (feature.textValue === \"STEREO\") {\r\n channelConfig = AudioChannelsConfigurationValue.STEREO;\r\n } else if (feature.textValue === \"UP_TO_5_1_SURROUND_PCM\") {\r\n channelConfig = AudioChannelsConfigurationValue.SURROUND_5_1;\r\n } else if (feature.textValue === \"UP_TO_7_1_SURROUND_PCM\") {\r\n channelConfig = AudioChannelsConfigurationValue.SURROUND_7_1;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // No configuration provided or config value was bigger than available, use whatever the device supports\r\n if (channelConfig === undefined || channelConfig > this.mDevice.supportedAudioChannels) {\r\n channelConfig = this.mDevice.supportedAudioChannels;\r\n }\r\n\r\n return channelConfig;\r\n }\r\n\r\n protected hasStreamerConfigOverride(configName: string): boolean {\r\n const streamerOverrides: Nullable = this.defaultConfigurationOverrides;\r\n\r\n if (streamerOverrides) {\r\n return (configName in streamerOverrides);\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private getLaunchMode(): AppLaunchMode {\r\n if (this.mDevice.isMobile) {\r\n\r\n // launch in touch friendly mode when touch override is set for the app\r\n //\r\n // sdk-remove-when (AVENGERS-1740)\r\n if (this.mAppVariantData) {\r\n const overrideTouch: boolean = CatalogUtils.IsFeatureEnabled(this.mAppVariantData, GfnFeature.OverrideTouch);\r\n\r\n if (overrideTouch) {\r\n return AppLaunchMode.TouchFriendly;\r\n }\r\n } else {\r\n // sdk-dont-expect\r\n logger.warn(\"Unable to check for touch override feature, variant data is missing.\");\r\n }\r\n\r\n // also launch in touch friendly mode when the app supports touchscreen\r\n if (this.mAppData) {\r\n if (CatalogUtils.IsControllerSupported(this.mAppData, this.mStartParameters?.appId ?? 0, InputControllerType.Touch)) {\r\n return AppLaunchMode.TouchFriendly;\r\n }\r\n } else {\r\n // sdk-dont-expect\r\n logger.warn(\"Unable to check for touch support, app data is missing.\");\r\n }\r\n } else if (this.mDevice.isBrowser) {\r\n return AppLaunchMode.Default;\r\n }\r\n\r\n // Gamepad friendly is the default for non-browser platform\r\n return AppLaunchMode.GamepadFriendly;\r\n }\r\n\r\n private canStartOrResume(): boolean {\r\n return (this.mState === StreamerState.Unknown || this.mState === StreamerState.Paused || this.mState === StreamerState.Finished);\r\n }\r\n\r\n private async waitForStop(): Promise {\r\n const startTime: number = Date.now();\r\n\r\n while (this.mState !== StreamerState.Finished && this.mState !== StreamerState.Unknown) {\r\n await Utils.sleep(WAIT_FOR_STOP_SLEEP_INTERNAL_MS);\r\n\r\n // check against date - sleep uses setTimeout which doesn't always mean it will\r\n // wait for the exact time that is given to it.\r\n if ((Date.now() - startTime) > WAIT_FOR_STOP_TIMEOUT_MS) {\r\n throw new APIError(APIErrorCode.WaitForStopTimeout)\r\n }\r\n }\r\n }\r\n\r\n private async startOrResume(params: StreamerStartParameters, isResume: boolean): Promise {\r\n if(!this.isSupported) {\r\n logger.error(\"Streaming is not supported on this Platform\");\r\n throw new APIError(APIErrorCode.DeviceNotSupported);\r\n }\r\n\r\n if (params.sessionId) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `resuming an existing session... (session=${params.sessionId})`);\r\n } else {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, \"starting a new session...\");\r\n }\r\n\r\n // a previous call to start was already made but never finished\r\n if (!this.canStartOrResume()) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Warning, \"The streamer is already in a started state, stopping existing session...\");\r\n this.stop();\r\n\r\n // need to make sure that we are in a stop state before continuing\r\n await this.waitForStop();\r\n }\r\n\r\n // clear out any previous session so not to conflict with\r\n // auto-resume case; we don't want to clear it when stream\r\n // is finished otherwise access to the last stream info\r\n // will be lost.\r\n if (!isResume) {\r\n this.mSession = undefined;\r\n }\r\n\r\n Streamer.ValidateServerAddress(params.server);\r\n\r\n this.mStartParameters = params;\r\n this.mStartParameters.vpcId = this.mStartParameters.vpcId || this.mSettings.vpcId;\r\n if (!this.mStartParameters.vpcId) {\r\n throw new APIError(APIErrorCode.MissingVpcId);\r\n }\r\n\r\n this.mStartParameters.mockParams = Utils.object.deepmerge(params.mockParams ?? {\r\n enabled: false,\r\n session: {}\r\n }, this.mConfiguration.streamer.mockParams ?? {});\r\n const isMockStreamer: boolean = this.mStartParameters.mockParams.enabled;\r\n\r\n const serverUrl: string = this.serverUrl;\r\n\r\n if (isMockStreamer) {\r\n logger.warn(\"Mock streamer is enabled...\");\r\n }\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `${isResume ? \"resuming\" : \"starting\"} game ${params.appId} on server ${serverUrl}...`);\r\n this.updateState(isResume ? StreamerState.Resuming : StreamerState.Initializing);\r\n\r\n // before creating the session, be sure we have\r\n // updated subscription and app info\r\n await this.refreshData();\r\n\r\n await this.updateStreamParams(this.mAuth.currentUser!.isGuest);\r\n\r\n await this.initializeGridServer(serverUrl, isMockStreamer);\r\n\r\n try {\r\n await this.setupSession();\r\n this.startStream(isResume);\r\n }\r\n catch (e: any) {\r\n this.handleSetupSessionError(e);\r\n }\r\n }\r\n\r\n private startStream(isResume: boolean): void {\r\n if (this.mSession && this.mSession.status === SessionStatus.Ready) {\r\n this.emit(\"sessionSetupProgress\", {\r\n progress: SessionSetupProgress.Finished\r\n });\r\n }\r\n\r\n this.updateState(StreamerState.WaitingForConnection);\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `waiting for streamer to connect to session ${this.mSession?.sessionId}...`);\r\n this.reportStreamingProfileTelemetry();\r\n this.doStartStream(isResume);\r\n }\r\n\r\n protected reportStreamingProfileTelemetry(): void {\r\n if (!this.mSession || !this.mStartParameters) {\r\n logger.warn(\"Unable to report streaming profile telemetry\");\r\n return;\r\n }\r\n\r\n const streamInfo = this.streamParams;\r\n let vSyncMode: VSyncMode;\r\n switch (this.vSyncMode) {\r\n case StreamerVSyncMode.Adaptive:\r\n vSyncMode = VSyncMode.Adaptive;\r\n break;\r\n case StreamerVSyncMode.Off:\r\n vSyncMode = VSyncMode.Off;\r\n break;\r\n case StreamerVSyncMode.On:\r\n vSyncMode = VSyncMode.On;\r\n break;\r\n }\r\n\r\n this.mSession.streamingProfileTelemetryId = this.mTelemetry.sendStreamingProfileEvent(StreamingQualityType.Custom,\r\n this.mSession.isDynamicResolutionChangeEnabled,\r\n streamInfo.fps,\r\n streamInfo.width,\r\n streamInfo.height,\r\n streamInfo.bitrate?? 0, // auto if none provided\r\n Streamer.GetAspectRatio(streamInfo.width, streamInfo.height),\r\n vSyncMode);\r\n }\r\n\r\n protected async refreshUserSubscriptionIfNeeded(): Promise {\r\n // only refresh the subscription when either this is\r\n // the first session or the user has changed between sessions\r\n //\r\n // TODO: should probably have a loginStatusChanged event from Auth class or similar callback\r\n // so we just invalidate the subscription\r\n if (!this.mAuth.currentUser!.isGuest\r\n && (!this.mSession || (this.mSession && this.mSession.userId != this.mAuth.authorizedUser!.id))) {\r\n return this.refreshUserSubscription();\r\n }\r\n }\r\n\r\n protected async refreshAppInfoIfNeeded(appId: number): Promise {\r\n // only refresh the app info when either this is the first\r\n // session or the app ID has changed between sessions\r\n if (!this.mAppVariantData || (this.mAppVariantData.id != appId)) {\r\n return this.refreshAppInfo(appId);\r\n }\r\n }\r\n\r\n protected async refreshData(): Promise {\r\n await Promise.all([\r\n this.refreshUserSubscriptionIfNeeded(),\r\n this.refreshAppInfoIfNeeded(this.mStartParameters!.appId),\r\n this.refreshAppStoreInfoIfNeeded()]);\r\n }\r\n\r\n private get isHDRSupported(): boolean {\r\n let supported: boolean = this.mDevice.isHdrDecodingSupported && this.mDevice.isHdrRenderingSupported;\r\n logger.verbose(`HDR Decoding: ${this.mDevice.isHdrDecodingSupported ? \"AVAILABLE\" : \"UNAVAILABLE\"}`);\r\n logger.verbose(`HDR Rendering: ${this.mDevice.isHdrRenderingSupported ? \"AVAILABLE\" : \"UNAVAILABLE\"}`);\r\n\r\n // does the app support HDR?\r\n if (supported) {\r\n supported = this.mAppVariantData !== null && CatalogUtils.IsFeatureEnabled(this.mAppVariantData, GfnFeature.HDR);\r\n\r\n logger.verbose(`HDR Title: ${supported ? \"YES\" : \"NO\"}`);\r\n }\r\n\r\n // is the user allowed to stream in HDR?\r\n if (supported) {\r\n supported = this.mUserSubscription != null && EntitlementUtils.IsFeatureAvailable(this.mUserSubscription.subscription, SubscriptionFeatureMetadata.HDR_ENABLED);\r\n\r\n logger.verbose(`HDR Subscription: ${supported ? \"YES\" : \"NO\"}`);\r\n }\r\n\r\n return supported;\r\n }\r\n\r\n private async getAccountLinkedStatus(cmsId: number): Promise {\r\n try {\r\n if (this.mGuestMode.isGuestMode) {\r\n return false;\r\n }\r\n const appStore: Undefined = this.mAppVariantData?.appStore;\r\n await this.mCatalog.initializeAccountConnections();\r\n if (!appStore || !this.mCatalog.getAccountLinkStatus(appStore, cmsId)) {\r\n logger.info(`Account Linking not required for ${cmsId} (${appStore})`);\r\n return false;\r\n }\r\n return true;\r\n } catch (e: any) {\r\n logger.error(`Account Link validation error: ${e.message}`);\r\n throw e;\r\n }\r\n }\r\n\r\n protected async setupSession(): Promise {\r\n // Make sure the session setup was not cancelled while we were running asynchronous tasks\r\n if (this.mState !== StreamerState.Initializing && this.mState !== StreamerState.Resuming) {\r\n return;\r\n }\r\n\r\n const accountLinked: boolean = await this.getAccountLinkedStatus(this.mStartParameters!.appId);\r\n\r\n // get the launch mode only when it does not already exist\r\n const launchMode: Undefined = this.mSession?.appLaunchMode ?? this.getLaunchMode();\r\n const initialZone: Nullable = this.serverZone;\r\n\r\n this.mSession = {\r\n userId: this.mAuth.currentUser!.id,\r\n appId: this.mStartParameters!.appId,\r\n appLaunchMode: launchMode,\r\n sessionId: this.mStartParameters!.sessionId ?? \"\",\r\n subSessionId: Utils.uuid.create(),\r\n systemInfoTelemetryId: this.mTelemetry.systemInfoGuid,\r\n status: SessionStatus.Unknown,\r\n isDynamicResolutionChangeEnabled: this.mStartParameters!.enableDRC ?? (this.defaultConfiguration as any).enableDynamicResolutionChange,\r\n zone: initialZone ?? undefined\r\n };\r\n\r\n const metadata: {[key: string]: string} = {\r\n \"canPlayIntroVideos\": \"true\"\r\n };\r\n const useWebsockets = this.defaultConfiguration.useWebSocketSignaling;\r\n\r\n if (useWebsockets) {\r\n metadata[\"wssignaling\"] = \"1\";\r\n }\r\n\r\n metadata[\"surroundAudioInfo\"] = this.getSupportedAudioChannels().toString();\r\n\r\n if (this.mStartParameters!.partnerData) {\r\n logger.verbose(`passing partner data to game: ${this.mStartParameters!.partnerData}`);\r\n metadata[\"partnerData\"] = this.mStartParameters!.partnerData;\r\n }\r\n\r\n // this is a GDN session\r\n if (this.mAuth.currentUser?.isGuest) {\r\n metadata[\"GDNMetadata\"] = \"{}\";\r\n }\r\n\r\n // support for GetClientInfo in GFN SDK\r\n const physicalResolution: Nullable = this.getPhysicalResolution();\r\n\r\n if (physicalResolution) {\r\n metadata[\"clientPhysicalResolution\"] = JSON.stringify({\r\n horizontalPixels: physicalResolution.width,\r\n verticalPixels: physicalResolution.height\r\n });\r\n }\r\n\r\n const bestDisplay: StreamParameters = Streamer.GetBestDisplay(this.mDevice, this.streamParams);\r\n\r\n metadata[\"networkType\"] = \"Unknown\";\r\n\r\n if (this.mNetworkTest.isSupported && (!this.mGuestMode.isGuestMode || this.mGuestMode.config.isNetworkTestEnabled)) {\r\n const networkTestResults: Nullable = await this.mNetworkTest.getCachedNetworkTestResults(this.serverUrl);\r\n\r\n if (networkTestResults) {\r\n switch (networkTestResults.info.type) {\r\n case NetworkType.Ethernet:\r\n metadata[\"networkType\"] = \"Ethernet\";\r\n break;\r\n case NetworkType.Wifi:\r\n if (networkTestResults.info.frequency === 5240) {\r\n metadata[\"networkType\"] = \"WiFi5.0\";\r\n } else {\r\n metadata[\"networkType\"] = \"WiFi2.4\";\r\n }\r\n break;\r\n case NetworkType.VPN:\r\n case NetworkType.Cellular:\r\n case NetworkType.Other:\r\n metadata[\"networkType\"] = \"Other\";\r\n break;\r\n }\r\n\r\n if (networkTestResults.capableProfile.height < bestDisplay.height ||\r\n networkTestResults.capableProfile.fps < bestDisplay.fps) {\r\n logger.info(\"Downgrading starting resolution from \" + bestDisplay.width + \"x\" + bestDisplay.height + \" \" + bestDisplay.fps + \"fps to \" +\r\n networkTestResults.capableProfile.width + \"x\" + networkTestResults.capableProfile.height + \" \" + networkTestResults.capableProfile.fps + \"fps due to limited network bandwidth\");\r\n bestDisplay.height = networkTestResults.capableProfile.height;\r\n bestDisplay.width = networkTestResults.capableProfile.width;\r\n bestDisplay.fps = networkTestResults.capableProfile.fps;\r\n bestDisplay.bitrate = NetworkTest.GetMaxBandwidth(\r\n networkTestResults.capableProfile.width,\r\n networkTestResults.capableProfile.height,\r\n networkTestResults.capableProfile.fps\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (!bestDisplay.bitrate) {\r\n bestDisplay.bitrate = this.streamParams.bitrate ?? 0;\r\n }\r\n\r\n logger.info(\"Using display\", bestDisplay.width, bestDisplay.height, bestDisplay.fps);\r\n\r\n const hdrRequested: boolean = !!this.mStartParameters!.hdr;\r\n const hdrSupported: boolean = this.isHDRSupported;\r\n logger.info(`HDR Requested: ${hdrRequested ? \"YES\" : \"NO\"}`);\r\n logger.info(`HDR Supported: ${hdrSupported ? \"YES\" : \"NO\"}`);\r\n\r\n const hdr: boolean = hdrRequested && hdrSupported;\r\n const monitorSettings: MonitorSettings = {\r\n widthInPixels: bestDisplay.width,\r\n heightInPixels: bestDisplay.height,\r\n framesPerSecond: bestDisplay.fps || 60,\r\n sdrHdrMode: hdr ? SdrHdrMode.HDR : SdrHdrMode.SDR\r\n }\r\n\r\n const sessionParams: SessionParams = {\r\n appId: this.mStartParameters!.appId.toString(),\r\n appLaunchMode: Streamer.GetGsAppLaunchMode(this.mSession.appLaunchMode),\r\n allowKeyboardLayoutChange: this.mStartParameters!.allowKeyboardLayoutChange,\r\n keyboardLayout: Streamer.GetKeyboardLayoutOrDefault(this.mDevice, this.mStartParameters!.keyboardLayout),\r\n clientLocale: Utils.normalizeLanguageCode(this.mSettings.languageCode),\r\n streamParams: [{\r\n fps: bestDisplay.fps || 60,\r\n width: bestDisplay.width,\r\n height: bestDisplay.height,\r\n maxBitrateKbps: bestDisplay.bitrate,\r\n videoTagId: \"\",\r\n audioTagId: \"\",\r\n drc: this.mSession.isDynamicResolutionChangeEnabled\r\n }],\r\n monitorSettings: [monitorSettings],\r\n metaData: metadata,\r\n partnerCustomData: Streamer.GetPartnerSecureData(this.mAuth),\r\n accountLinked: accountLinked,\r\n };\r\n\r\n logger.verbose(`Session Params: ${JSON.stringify(Utils.object.maskPropertyValue(sessionParams, [\"partnerCustomData\"]))}`);\r\n\r\n await this.doCreateSession(sessionParams);\r\n }\r\n\r\n protected mapErrorCodeToReason(code: number): StreamerTerminationReason {\r\n return MapGsErrorCodeToReason(code);\r\n }\r\n\r\n protected handleSetupSessionError(err: GsError): void {\r\n let activeSessions: ActiveSessionInfo[] | undefined;\r\n let code: number | undefined;\r\n\r\n if (\"code\" in err) {\r\n code = err.code;\r\n }\r\n\r\n if (\"sessionId\" in err && err.sessionId) {\r\n if (this.mSession) {\r\n this.mSession.sessionId = err.sessionId;\r\n }\r\n }\r\n\r\n if (\"sessionList\" in err) {\r\n if (err.sessionList && err.sessionList.length > 0) {\r\n activeSessions = err.sessionList;\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `The user has ${err.sessionList.length} other sessions.`);\r\n }\r\n }\r\n\r\n if (code === undefined) {\r\n this.handleError(err);\r\n } else {\r\n switch (code) {\r\n case GsErrorCode.SessionSetupCancelled:\r\n case GsErrorCode.SessionSetupCancelledDuringQueuing:\r\n this.handleSessionSetupCancelled(code, StreamerTerminationReason.UserCancellation);\r\n break;\r\n case GsErrorCode.SessionLimitExceeded:\r\n case GsErrorCode.SessionLimitPerDeviceReached:\r\n this.handleSessionLimitExceeded(code, activeSessions);\r\n break;\r\n default:\r\n this.handleSessionSetupCancelled(code, this.mapErrorCodeToReason(code));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private handleError(err: GsError): void {\r\n let code: Undefined;\r\n let msg: Undefined;\r\n let type: Undefined;\r\n let stack: Undefined;\r\n\r\n if (\"stack\" in err) {\r\n stack = err.stack;\r\n }\r\n\r\n if (\"name\" in err) {\r\n type = err.name;\r\n }\r\n\r\n if (\"code\" in err) {\r\n code = err.code;\r\n }\r\n\r\n if (\"description\" in err) {\r\n msg = err.description;\r\n }\r\n\r\n if (!msg && \"message\" in err) {\r\n msg = err.message;\r\n }\r\n\r\n // use code as type of error when no type found\r\n if (!type && code !== undefined) {\r\n type = Utils.string.hex(code, 8);\r\n }\r\n\r\n this.mTelemetry.onException(\"streamer.ts\", type ?? \"Unknown\", msg ?? \"\", stack ?? \"\", \"client\");\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, `${msg}`, code);\r\n this.runConnectivityCheck(err);\r\n }\r\n\r\n private handleSessionSetupCancelled(code: number, reason: StreamerTerminationReason): void {\r\n if (reason === StreamerTerminationReason.UserCancellation) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, \"session has been cancelled\");\r\n } else {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, \"session setup has hit an unexpected error\");\r\n this.sendSessionSetupProgressError(reason, code);\r\n }\r\n\r\n if (this.mSession && this.mSession.status !== SessionStatus.Unknown && this.mSession.sessionId) {\r\n this.deleteSession(this.mSession.sessionId);\r\n }\r\n\r\n this.finish(reason, code);\r\n }\r\n\r\n private handleSessionLimitExceeded(code: (GsErrorCode.SessionLimitExceeded | GsErrorCode.SessionLimitPerDeviceReached), activeSessions?: ActiveSessionInfo[]): void {\r\n if (this.mPlatformStreamer) {\r\n this.doStopStream();\r\n }\r\n\r\n if (code === GsErrorCode.SessionLimitPerDeviceReached) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, \"This device already has an active session that belongs to another user. Please try again later.\", code);\r\n const reason = StreamerTerminationReason.SetupSessionFailure;\r\n this.sendSessionSetupProgressError(reason, code);\r\n this.finish(reason, code);\r\n return;\r\n }\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, \"The session limit has been reached.\", code);\r\n\r\n if (activeSessions) {\r\n this.handleActiveSessions(activeSessions);\r\n } else {\r\n if (this.mGridServer) {\r\n this.mGridServer.getAllActiveSessions();\r\n }\r\n }\r\n }\r\n\r\n private sendSessionSetupProgressError(reason: StreamerTerminationReason, code: number): void {\r\n const translationKey = MapReasonToErrorMessage(reason);\r\n this.mI18N.translate(translationKey).then(message => {\r\n message = message.replace(\"{{gameName}}\", this.mAppData?.title ?? \"\");\r\n const customerCareLink = STREAMER_CUSTOMER_CARE_LINKS_MAP.get(reason);\r\n if (customerCareLink) {\r\n message = message.replace(\"{{customerCareLink}}\",\r\n `${this.mConfiguration.streamer.helpUrl}?language=${Utils.normalizeLanguageCode(this.mSettings.languageCode)}&page=${customerCareLink}`);\r\n }\r\n this.emit(\"sessionSetupProgress\", {\r\n progress: SessionSetupProgress.Error,\r\n errorDetails: {\r\n reason: reason,\r\n code: code,\r\n message: message\r\n }\r\n });\r\n });\r\n }\r\n\r\n private handleActiveSessions(activeSessions: ActiveSessionInfo[]): void {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `The user has ${activeSessions.length} active session(s).`);\r\n\r\n if (activeSessions.length === 0) {\r\n return;\r\n }\r\n\r\n // try to resume an existing session\r\n if (this.mSession && this.mStartParameters) {\r\n if (!this.mStartParameters?.disableSessionResume) {\r\n for (const activeSession of activeSessions) {\r\n if (activeSession.appId === this.mSession.appId && Streamer.IsResumableSessionState(activeSession.state as SessionState)) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `An existing session with the same appId was found. appId=${activeSession.appId}, state=${activeSession.state}`);\r\n\r\n // the original session was not launched as touch friendly, can't change it.\r\n if (this.mSession.appLaunchMode === AppLaunchMode.TouchFriendly && activeSession.appLaunchMode !== GsAppLaunchMode.TouchFriendly) {\r\n this.mSession.appLaunchMode = AppLaunchMode.GamepadFriendly;\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `The session ${activeSession.sessionId} was not launched in touch friendly mode, ignoring touch input mode.`);\r\n }\r\n\r\n // reset the state back to unknown and try resuming this session\r\n this.updateState(StreamerState.Unknown);\r\n\r\n const resumeParams: StreamerStartParameters = this.mStartParameters;\r\n resumeParams.sessionId = activeSession.sessionId;\r\n this.resume(resumeParams);\r\n return;\r\n }\r\n }\r\n } else {\r\n logger.info(\"Session resume is disabled by the SessionStartParameters\");\r\n }\r\n }\r\n\r\n // could not find a resumable session, stop all existing sessions then\r\n // try starting a new one\r\n this.stopExistingSessions(activeSessions)\r\n .then(() => {\r\n if (this.mStartParameters) {\r\n this.start(this.mStartParameters);\r\n }\r\n })\r\n .catch((e: GsError) => {\r\n this.handleError(e);\r\n });\r\n }\r\n\r\n private async stopExistingSessions(activeSessions: ActiveSessionInfo[]): Promise {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `Stopping ${activeSessions.length} session(s)...`);\r\n\r\n const stopPromiseList: Promise[] = [];\r\n\r\n for (const activeSession of activeSessions) {\r\n stopPromiseList.push(this.deleteSession(activeSession.sessionId));\r\n }\r\n\r\n await Promise.all(stopPromiseList);\r\n }\r\n\r\n private getPhysicalResolution(): Nullable {\r\n const displays: DisplayDetails[] = this.mDevice.displays;\r\n\r\n if (displays.length > 0) {\r\n const primary: DisplayDetails = displays[0];\r\n const physicalDims: string[] = primary.physicalRes.split(\"x\");\r\n\r\n return {\r\n width: parseInt(physicalDims[0]),\r\n height: parseInt(physicalDims[1])\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private async refreshUserSubscription(): Promise {\r\n this.mUserSubscription = await this.mEntitlement.getUserSubscription();\r\n }\r\n\r\n private async refreshAppInfo(appId: number): Promise {\r\n const query: AppsQueryConfiguration = Catalog.DefaultAppsQueryConfiguration;\r\n query.vpcId = this.mStartParameters!.vpcId;\r\n query.variants = [appId];\r\n query.levelOfDetail = AppDataLevelOfDetail.Default;\r\n query.mediaFlags = MediaAssetFlags.None;\r\n\r\n // For guest mode, we will make an unauthenticated rest call to LCARS. In this case,\r\n // do not send the VPC ID\r\n if (this.mAuth.currentUser?.isGuest) {\r\n query.vpcId = DoNotSendVpcId;\r\n }\r\n\r\n const appsResult = await this.mCatalog.getApps(query);\r\n if (!appsResult || appsResult.itemCount < 1) {\r\n logger.error(`Could not get AppInfo for the current game, applying defaults. appId=${appId}`);\r\n this.mAppData = CatalogUtils.CreateDefaultAppData(appId, this.mDevice.isMobile, this.mGuestMode.isGuestMode? this.mGuestMode.config.metadata: null);\r\n this.mAppVariantData = this.mAppData.variants[0];\r\n } else {\r\n this.mAppData = appsResult.items[0];\r\n this.mAppVariantData = this.mAppData?.variants.find(variant => variant.id === appId) as VariantData || null;\r\n }\r\n }\r\n\r\n protected async refreshAppStoreInfoIfNeeded(): Promise {\r\n if (!this.mAppStoreInfo) {\r\n this.mAppStoreInfo = await this.mCatalog.getAppStores();\r\n if (!this.mAppStoreInfo) {\r\n logger.error(\"Could not get the app store information\");\r\n }\r\n }\r\n }\r\n\r\n private configureGridServerSettings() {\r\n const config: BaseStreamerConfiguration = this.defaultConfiguration;\r\n GridServerSettings.webSocketSignaling = config.useWebSocketSignaling;\r\n }\r\n\r\n protected async initializeGridServer(serverUrl: string, isMockStreamer: boolean): Promise {\r\n const user: Nullable = this.mAuth.currentUser;\r\n if (!user) {\r\n throw new APIError(APIErrorCode.UserNotAuthorized);\r\n }\r\n\r\n if (!user.isLoggedIn) {\r\n throw new APIError(APIErrorCode.UserNotLoggedIn);\r\n }\r\n\r\n // If switching from or to mocked streamer mode, delete the old grid server\r\n if (this.mGridServer) {\r\n const isCurrentGridServerMocked = this.mGridServer.getZoneName() === MOCK_ZONE_NAME;\r\n if (isMockStreamer != isCurrentGridServerMocked) {\r\n this.mGridServer.uninitialize();\r\n this.mGridServer = null;\r\n }\r\n }\r\n\r\n // create grid server and setup listeners only once\r\n if (!this.mGridServer) {\r\n this.mGridServer = this.createGridServer(isMockStreamer);\r\n this.mGridServer.updateTelemetryEventIds({ systemInfoGuid: this.mTelemetry.systemInfoGuid, streamingProfileGuid: this.mSession?.streamingProfileTelemetryId });\r\n this.mGridServer.addListener(GS_EVENTS.TELEMETRY_EVENT, this.onGsTelemetryEvent.bind(this));\r\n this.mGridServer.addListener(GS_EVENTS.ACTIVE_SESSIONS_RESULT, this.onGsActiveSessionsResult.bind(this));\r\n this.mGridServer.addListener(GS_EVENTS.LOG_EVENT, this.onGsLogEvent.bind(this));\r\n this.mGridServer.addListener(GS_EVENTS.PROGRESS_UPDATE, this.onGsProgressUpdate.bind(this));\r\n }\r\n\r\n // update token info\r\n this.mGridServer.setAuthInfo(Streamer.GetAuthInfo(user));\r\n\r\n // initialize the grid server, this must be done each time since this is where the server\r\n // is provided... even though between streams it is unlikely to change\r\n this.initGridServer(this.mGridServer, this.mStartParameters!, {\r\n acceptLanguage: Utils.normalizeLanguageCode(this.mSettings.languageCode, \"-\"),\r\n appUserAgent: Streamer.GetSDKUserAgentString(this.mDevice, this.mSdkVersion),\r\n // The streamer docs say to use the chroma/LCARS client ID here\r\n clientId: this.mSettings.catalogClientId,\r\n clientIdentification: Streamer.ClientIdentification,\r\n clientPlatformName: ToGsPlatformName(this.mDevice.platformId, this.mDevice.os),\r\n clientStreamer: this.mDevice.isBrowser ? ClientStreamer.WEBRTC : ClientStreamer.CLASSIC,\r\n clientType: ClientType.GFNSDK, // always GFNSDK\r\n clientVersion: CLIENT_VERSION,\r\n clientAppVersion: this.mSdkVersion.version,\r\n deviceHashId: this.mDevice.id,\r\n deviceOs: ToGsDeviceOS(this.mDevice.os),\r\n deviceOsVer: this.mDevice.version,\r\n deviceType: Streamer.GetGsDeviceTypeFromDeviceKind(this.mDevice.kind),\r\n serverAddress: serverUrl,\r\n deviceMake: this.mDevice.manufacturer,\r\n deviceModel: this.mDevice.model,\r\n authTokenCallback: async (_:any) => {\r\n if (this.mAuth.authorizedUser && this.mAuth.authorizedUser.isLoggedIn) {\r\n return this.mAuth.authorizedUser.authInfo?.idToken.value;\r\n }\r\n\r\n return \"\";\r\n }\r\n });\r\n }\r\n\r\n protected onGsActiveSessionsResult(e: ActiveSessionResultEvent): void {\r\n if (e.error) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, \"Unable to get the users active sessions\", e.error.code);\r\n return;\r\n }\r\n\r\n if (e.sessionList.length > 0) {\r\n this.handleActiveSessions(e.sessionList);\r\n } else {\r\n if (this.mStartParameters) {\r\n this.start(this.mStartParameters);\r\n }\r\n }\r\n }\r\n\r\n protected onGsLogEvent(e: LogEvent): void {\r\n const msg: string = `${e.timeStamp} ${e.logLevel} ${e.logtag} ${e.logstr}`;\r\n\r\n switch (e.logLevel) {\r\n case LogLevel.DEBUG:\r\n logger.raw(LoggingLevel.Verbose, msg);\r\n break;\r\n case LogLevel.INFO:\r\n logger.raw(LoggingLevel.Info, msg);\r\n break;\r\n case LogLevel.WARN:\r\n logger.raw(LoggingLevel.Warning, msg);\r\n break;\r\n case LogLevel.ERROR:\r\n logger.raw(LoggingLevel.Error, msg);\r\n break;\r\n }\r\n }\r\n\r\n protected onGsTelemetryEvent(e: TelemetryEventPayload) {\r\n this.mTelemetry.onGridServerTelemetry(e);\r\n }\r\n\r\n protected onGsProgressUpdate(e: SessionProgressUpdateEvent): void {\r\n const evt: SessionSetupProgressEvent = {\r\n progress: Streamer.GetSessionProgressFromState(e.state)\r\n };\r\n\r\n // Update the sessionId if necessary. This is to help know what the current sessionId is before\r\n // session setup is completed, in case we need to stop it\r\n if (this.mSession && !this.mSession.sessionId && e.sessionId) {\r\n this.mSession.sessionId = e.sessionId;\r\n }\r\n\r\n if (e.state === SessionProgressState.IN_QUEUE) {\r\n evt.queuePosition = e.queuePosition;\r\n }\r\n\r\n // convert into seconds, will never need to show a wait time less\r\n // than 1 second...\r\n if (e.eta > 0) {\r\n evt.estimatedWaitTimeInSecs = Math.ceil(e.eta / 1000);\r\n }\r\n\r\n this.emit(\"sessionSetupProgress\", evt);\r\n }\r\n\r\n protected onQualityScoreChanged(score: number) {\r\n // Ignore the score if it is the same as before\r\n if (this.mQosScore == score) {\r\n return;\r\n }\r\n\r\n this.mQosScore = score;\r\n const evt: StreamerNetworkQualityChangedEvent = {score: this.mQosScore};\r\n if (score <= this.mConfiguration.networkIndicators.warningThreshold) {\r\n evt.quality = StreamerNetworkQuality.Warning;\r\n if (score <= this.mConfiguration.networkIndicators.alertThreshold) {\r\n evt.quality = StreamerNetworkQuality.Alert;\r\n }\r\n } else {\r\n evt.quality = StreamerNetworkQuality.Normal;\r\n }\r\n if (this.mNetworkQuality != evt.quality) {\r\n this.mNetworkQuality = evt.quality;\r\n this.emit(\"networkQualityChanged\", evt);\r\n }\r\n }\r\n\r\n private async openLink(urlData: UrlClickData): Promise {\r\n const url = new URL(urlData?.url);\r\n if (!AllowedUrlSchemes.includes(url.protocol)) {\r\n logger.error(`Invalid url scheme: ${urlData.url}`);\r\n }\r\n\r\n const success = await this.doOpenLink(urlData);\r\n if (!success) {\r\n logger.error(\"Error openening url\")\r\n }\r\n\r\n return success;\r\n }\r\n\r\n protected static GetUiUrl(config: Configuration): string {\r\n return `${Utils.getScriptOriginRootPath()}/ui/streamer-ui.html`;\r\n }\r\n\r\n protected static GetOscAssetsUrl(config: Configuration): string {\r\n return `${Utils.getScriptOriginRootPath()}/ui`;\r\n }\r\n\r\n protected static GetBestDisplay(device: Device, streamParams: StreamParameters): StreamParameters {\r\n const hasDisplayOverride = !!streamParams.width && !!streamParams.height;\r\n let bestDisplay: Nullable = null;\r\n if (!hasDisplayOverride) {\r\n for (const display of device.displays) {\r\n // Logical Res is a string in the format \"wxh\"\r\n const dims = display.logicalRes.split(\"x\");\r\n if (dims.length != 2) {\r\n logger.error(`Invalid display dimensions: ${display.logicalRes}`);\r\n continue;\r\n }\r\n const width = Math.trunc(Math.max(parseInt(dims[0]), parseInt(dims[1])) * device.scaleFactor);\r\n const height = Math.trunc(Math.min(parseInt(dims[0]), parseInt(dims[1])) * device.scaleFactor);\r\n if (!bestDisplay || bestDisplay.width < width) {\r\n logger.info(`Display found ${width}x${height}(${display.logicalRes} - Scale ${device.scaleFactor})`);\r\n bestDisplay = {\r\n width: width,\r\n height: height,\r\n fps: Math.trunc(display.refreshRate)\r\n }\r\n }\r\n }\r\n if (!bestDisplay) {\r\n logger.info(\"Using screen size in pixels for display size\");\r\n bestDisplay = {\r\n width: Math.max(device.screenSizeInPixels.width, device.screenSizeInPixels.height),\r\n height: Math.min(device.screenSizeInPixels.height, device.screenSizeInPixels.width),\r\n fps: 60\r\n }\r\n }\r\n if (!bestDisplay) {\r\n bestDisplay = streamParams;\r\n }\r\n } else {\r\n logger.info(\"Using display dimension override\");\r\n bestDisplay = streamParams;\r\n }\r\n\r\n return bestDisplay!;\r\n }\r\n\r\n protected static GetKeyboardLayoutOrDefault(device: Device, keyboardLayout?: string): string {\r\n return keyboardLayout ?? (device.os === DeviceOS.macOS ? \"m-us\" : \"en_US\");\r\n }\r\n\r\n private static GetMediaConnectionInfoFromGs(info: ConnectionInfo, useWebsockets: boolean, defaultServer: string): StreamerSessionConnection {\r\n logger.verbose(`adjust media connection info: webSockets=${useWebsockets}, ip=${info.ip}, port=${info.port}, protocol=${info.protocol}, usage=${info.usage}, appProtocol=${info.appLevelProtocol}`);\r\n // If we're using websocket signaling, GridServer doesn't tell us the correct protocols and we\r\n // must force it here\r\n let appLevelProtocol: StreamerAppLevelProtocol = info.appLevelProtocol as number;\r\n if ((info.usage as number) === StreamerUsage.RTSP) {\r\n appLevelProtocol = useWebsockets ? StreamerAppLevelProtocol.Socket : StreamerAppLevelProtocol.RTSP;\r\n }\r\n\r\n let host: Undefined = info.ip;\r\n\r\n if (!host) {\r\n logger.verbose(` No ip found for media connection info, trying resourcerPath: ${info.resourcePath}`);\r\n host = info.resourcePath\r\n\r\n if (!host) {\r\n logger.verbose(` The resoucePath is also empty. Falling back to default server: ${defaultServer}`);\r\n host = defaultServer;\r\n }\r\n }\r\n\r\n return {\r\n ip: host,\r\n port: info.port,\r\n protocol: info.protocol,\r\n appLevelProtocol: appLevelProtocol,\r\n usage: info.usage,\r\n }\r\n }\r\n\r\n private static GetSignalConnectionInfoFromGs(info: ServerInfo, useWebsockets: boolean, serverUrl: string): StreamerSessionConnection {\r\n logger.verbose(`adjust signal connection info: serverUrl=${serverUrl}, webSockets=${useWebsockets}, server=${info.server}, ip=${info.ip}, port=${info.port}, protocol=${info.protocol}`);\r\n\r\n const appLevelProtocolStr = info.protocol ?? \"\";\r\n const secure = appLevelProtocolStr.toLowerCase() === \"https\";\r\n let appLevelProtocol: StreamerAppLevelProtocol;\r\n\r\n // If we're using websocket signaling, GridServer doesn't tell us the correct protocols and we\r\n // must force it here\r\n if (useWebsockets) {\r\n appLevelProtocol = secure ? StreamerAppLevelProtocol.SocketSecure : StreamerAppLevelProtocol.Socket;\r\n } else {\r\n appLevelProtocol = secure ? StreamerAppLevelProtocol.RTSPS : StreamerAppLevelProtocol.RTSP;\r\n }\r\n\r\n return {\r\n ip: info.ip ?? serverUrl,\r\n port: info.port,\r\n usage: StreamerUsage.Signaling,\r\n protocol: StreamerProtocol.TCP,\r\n appLevelProtocol: appLevelProtocol\r\n };\r\n }\r\n\r\n protected static GetSessionStatusFromGsState(state: SessionState): SessionStatus {\r\n switch(state) {\r\n case SessionState.INITIALIZING:\r\n return SessionStatus.Initializing;\r\n case SessionState.READY_FOR_CONNECTION:\r\n return SessionStatus.Ready;\r\n case SessionState.PAUSED:\r\n return SessionStatus.PausedByUser;\r\n case SessionState.RESUMING:\r\n return SessionStatus.Resuming;\r\n case SessionState.STREAMING:\r\n return SessionStatus.Playing;\r\n case SessionState.FINISHED:\r\n return SessionStatus.Finished;\r\n case SessionState.UNKNOWN:\r\n default:\r\n return SessionStatus.Unknown;\r\n }\r\n }\r\n\r\n private static GetSessionProgressFromState(state: string): SessionSetupProgress {\r\n switch(state) {\r\n case SessionProgressState.CONFIGURING:\r\n return SessionSetupProgress.Configuring;\r\n case SessionProgressState.IN_QUEUE:\r\n return SessionSetupProgress.InQueue;\r\n case SessionProgressState.PREVIOUS_SESSION_CLEANUP:\r\n return SessionSetupProgress.SessionCleanup;\r\n case SessionProgressState.STARTING_STREAMER:\r\n return SessionSetupProgress.Starting;\r\n default:\r\n return SessionSetupProgress.Waiting;\r\n }\r\n }\r\n\r\n private static IsResumableSessionState(state: SessionState): boolean {\r\n return (state === SessionState.READY_FOR_CONNECTION || state === SessionState.PAUSED || state === SessionState.STREAMING);\r\n }\r\n\r\n private static NormalizeServerUrl(serverUrl: string): string {\r\n if (!serverUrl) {\r\n return \"\";\r\n }\r\n\r\n serverUrl = serverUrl.toLowerCase();\r\n\r\n // the url is fine\r\n if (serverUrl.startsWith(\"https://\")) {\r\n return serverUrl;\r\n }\r\n\r\n // switch to https\r\n if (serverUrl.startsWith(\"http://\")) {\r\n serverUrl.replace(\"http:\", \"https:\");\r\n return serverUrl;\r\n }\r\n\r\n // add the https scheme\r\n return `https://${serverUrl}`;\r\n }\r\n\r\n private static LimitResolution(resolution: Size, limits: Size[]): Size {\r\n if (limits.length === 0) {\r\n return resolution;\r\n }\r\n\r\n const ratios: AspectRatio[] = limits.map(sz => new AspectRatio(sz.width, sz.height));\r\n const r: AspectRatio = new AspectRatio(resolution.width, resolution.height);\r\n\r\n let b: AspectRatio = ratios[0];\r\n for (let i = 1; i < ratios.length; i++) {\r\n let a: AspectRatio = ratios[i];\r\n let rd: number = Math.abs(r.ratio - a.ratio);\r\n let bd: number = Math.abs(r.ratio - b.ratio);\r\n\r\n if (rd < bd) {\r\n b = a;\r\n }\r\n }\r\n\r\n const c: AspectRatio = b.clip(r);\r\n\r\n // limit to max\r\n if (c.width > b.width) {\r\n return b.toSize();\r\n }\r\n\r\n return c.toSize();\r\n }\r\n\r\n private static GetGsAppLaunchMode(launchMode: AppLaunchMode): GsAppLaunchMode {\r\n switch (launchMode) {\r\n case AppLaunchMode.GamepadFriendly:\r\n return GsAppLaunchMode.GamepadFriendly;\r\n case AppLaunchMode.TouchFriendly:\r\n return GsAppLaunchMode.TouchFriendly;\r\n default:\r\n return GsAppLaunchMode.Default;\r\n }\r\n }\r\n\r\n protected static GetGsDeviceTypeFromDeviceKind(kind: DeviceKind): DeviceType {\r\n switch (kind) {\r\n case DeviceKind.Laptop:\r\n return DeviceType.LAPTOP;\r\n case DeviceKind.Phone:\r\n return DeviceType.PHONE;\r\n case DeviceKind.Tablet:\r\n return DeviceType.TABLET;\r\n case DeviceKind.TV:\r\n return DeviceType.TV;\r\n case DeviceKind.Desktop:\r\n case DeviceKind.Other: // default to desktop if kind is unknown\r\n default:\r\n return DeviceType.DESKTOP;\r\n }\r\n }\r\n\r\n protected static IsZone(obj: any): boolean {\r\n if (!obj || typeof(obj) !== \"object\") {\r\n return false;\r\n }\r\n\r\n return (\"name\" in obj && \"address\" in obj);\r\n }\r\n\r\n protected static ValidateServerAddress(server: Zone | string): void {\r\n if (!server || (Streamer.IsZone(server) && !((server)).address)) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"The 'server' field must be provided.\");\r\n }\r\n }\r\n\r\n protected static GetSDKUserAgentString(device: Device, sdkVersion: Version): string {\r\n const platformName: string = ToClientIdentityPlatform(device.platformId);\r\n\r\n // https://confluence.nvidia.com/display/GENPCGRP/Client+identification+headers\r\n //\r\n // e.g. GFN-CLIENT-SDK/1.0 (Browser 86.1.2.3) Ragnarok/1.1.1 (abcdef) GFN-CLIENT-SDK-RT/1.0 (uvwxyz)\r\n //\r\n let ua: string = `GFN-CLIENT-SDK/${sdkVersion.version} (${platformName} ${device.version}) ${sdkVersion.streamerName}/${sdkVersion.streamerVersion} (${sdkVersion.streamerTag})`;\r\n\r\n if (sdkVersion.runtimeVersion) {\r\n ua += ` GFN-CLIENT-SDK-RT/${sdkVersion.runtimeVersion} (${sdkVersion.runtimeTag})`;\r\n }\r\n\r\n ua += ` [${sdkVersion.tag}]`;\r\n return ua;\r\n }\r\n\r\n /** @internal */\r\n protected static GetAspectRatio(width: number, height: number): string {\r\n const CommonAspectRatios = [\r\n {\r\n ratio: 16 / 10,\r\n formattedRatio: \"16:10\"\r\n },\r\n {\r\n ratio: 16 / 9,\r\n formattedRatio: \"16:9\"\r\n },\r\n {\r\n ratio: 4 / 3,\r\n formattedRatio: \"4:3\"\r\n },\r\n {\r\n ratio: 5 / 4,\r\n formattedRatio: \"5:4\"\r\n },\r\n {\r\n ratio: 19.5 / 9,\r\n formattedRatio: \"19.5:9\"\r\n }\r\n ];\r\n\r\n const displayRatio = width / height;\r\n let targetRatio = CommonAspectRatios[0];\r\n\r\n for (const item of CommonAspectRatios) {\r\n if (Math.abs(displayRatio - item.ratio) < Math.abs(displayRatio - targetRatio.ratio)) {\r\n targetRatio = item;\r\n }\r\n }\r\n return targetRatio.formattedRatio;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Updates Stream Parameters as per Entitlement\r\n */\r\n protected async updateStreamParams(isGuest: boolean) {\r\n let streamQualities: EntitlementStreamingQuality[] = [];\r\n if (isGuest) {\r\n const clientStreamingQuality: StreamingQualityResponseEntity = await this.mEntitlement.getClientStreamingQuality();\r\n streamQualities = clientStreamingQuality.streamingQualities;\r\n } else {\r\n streamQualities = this.mUserSubscription?.subscription?.streamingQualities ?? [];\r\n }\r\n\r\n if (streamQualities && streamQualities.length >= 3) {\r\n streamQualities.forEach((quality: EntitlementStreamingQuality) => {\r\n const resolution = quality.resolution;\r\n if (resolution && quality.clientStreamingQualityMode && (quality.clientStreamingQualityMode > ClientStreamingQualityMode.Unknown)) {\r\n logger.verbose(`streaming quality #${quality.clientStreamingQualityMode}: ${resolution.widthInPixels}x${resolution.heightInPixels} @ ${resolution.framesPerSecond}fps ${quality.maxBitRate?.bitrateValue}mbps`);\r\n this.mStreamParams[quality.clientStreamingQualityMode - 1] = {\r\n width: resolution.widthInPixels ?? 0,\r\n height: resolution.heightInPixels ?? 0,\r\n fps: resolution.framesPerSecond ?? 0,\r\n bitrate: quality.maxBitRate?.bitrateValue ?? 0\r\n };\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Gets the secure data for partner when applicable.\r\n */\r\n protected static GetPartnerSecureData(auth: Auth): Undefined {\r\n return auth.guestUser?.partnerSecureData ?? undefined;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Gets the auth info for authorized or guestmode users\r\n */\r\n protected static GetAuthInfo(user: Nullable): AuthInfo\r\n {\r\n if (!user) {\r\n throw new APIError(APIErrorCode.UserNotAuthorized);\r\n }\r\n return {\r\n type: user.isGuest ? AuthType.JWT_PARTNER : AuthType.JWT_GFN,\r\n token: user.idToken,\r\n };\r\n }\r\n}\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../../api-error\";\r\nimport { APIErrorCode } from \"../../api-error.types\";\r\nimport { Configuration } from \"../../configuration/configuration\";\r\nimport { Utils } from \"../../core/utils\";\r\nimport { Device } from \"../../device/device\";\r\nimport { Nullable } from \"../../core/util.types\";\r\nimport { I18N } from \"../../i18n/i18n\";\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { AppLaunchMode } from \"../../server/server.entities\";\r\nimport { Zone } from \"../../server/server.types\";\r\nimport { Streamer } from \"../streamer\";\r\nimport { EditBoxZone, StreamerDiagnosticLevel, StreamerState, StreamerTerminationReason, StreamStats, VideoBounds } from \"../streamer.types\";\r\nimport { AndroidStreamerConfiguration } from \"./android-streamer.types\";\r\nimport { Entitlement } from \"../../entitlement/entitlement\";\r\nimport { Auth } from \"../../idm/auth\";\r\nimport { Catalog } from \"../../catalog/catalog\";\r\nimport { ITelemetry, MISSING_VALUE } from \"../../telemetry/telemetry.types\";\r\nimport { Feedback } from \"../../telemetry/feedback\";\r\nimport { RemoteLogger } from \"../../logging/remote-logger\";\r\nimport { EntitlementUtils } from \"../../entitlement/entitlement-utils\";\r\nimport { SubscriptionFeatureMetadata } from \"../../entitlement/entitlement.entities\";\r\nimport { NetworkTest } from \"../../networktest/network-test\";\r\nimport { GuestMode } from \"../../guestmode/guestmode\";\r\nimport { UrlClickData } from \"../custom-message.types\";\r\nimport { GestureType, GestureHelperEvent } from \"../../input/gesture.types\";\r\nimport { PlatformGestureType } from \"../../shared-types\";\r\nimport { EditableRegion } from \"../editable-region\";\r\nimport { AndroidDevice } from \"../../device/android/android-device\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/android-streamer\");\r\n\r\nenum AndroidPlayerTerminationReason {\r\n Success = 0,\r\n StreamerStartError = 1,\r\n StreamerInternalError = 2,\r\n VideoDecoderSetupError = 3,\r\n NetworkError = 4,\r\n ClientServerCompatibilityError = 5,\r\n ServerTerminated = 6,\r\n ClientStopped = 7,\r\n NoVideoFramesError = 2147483647\r\n}\r\n\r\nenum AndroidTouchMode {\r\n DirectMouse = 1,\r\n Touch = 2,\r\n PassThrough = 3\r\n}\r\n\r\n/** @internal **/\r\nexport class AndroidStreamer extends Streamer {\r\n protected updateVolume(): void {\r\n logger.warn(\"Attempted to set the stream volume, but this device is fixed to the system volume.\");\r\n }\r\n\r\n protected updateMutedState(): void {\r\n logger.warn(\"Attempted to change the stream muted state, but this device is fixed to the system mute setting.\");\r\n }\r\n\r\n protected get defaultConfiguration(): AndroidStreamerConfiguration {\r\n return this.mConfiguration.streamer.android;\r\n }\r\n\r\n protected get defaultConfigurationOverrides(): Nullable {\r\n if (this.mSettings.configOverrides.streamer?.android) {\r\n return this.mSettings.configOverrides.streamer?.android;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n protected get canUseIntroPlayer(): boolean {\r\n // android must use its own intro player\r\n return false;\r\n }\r\n\r\n constructor(config: Configuration, device: Device, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, platformStreamer: AndroidPlatformStreamer, telemetry: ITelemetry, feedback: Feedback, remoteLogger: RemoteLogger, networkTest: NetworkTest, guestMode: GuestMode) {\r\n super(config, device, i18n, entitlement, auth, catalog, platformStreamer, telemetry, feedback, remoteLogger, networkTest, guestMode);\r\n }\r\n\r\n /** @internal **/\r\n protected doStreamingSupportCheck(): boolean {\r\n return true;\r\n }\r\n\r\n protected doToggleOsc(keyboardVisible: boolean): void {\r\n if (this.mPlatformStreamer) {\r\n this.mPlatformStreamer.toggleOSC(keyboardVisible);\r\n }\r\n }\r\n\r\n protected doToggleKeyboard(visible: boolean): void {\r\n // TODO: this needs to be updated to support ONLY showing the keyboard\r\n // and not the entire OSC; this should come with the OSC refactor.\r\n this.doToggleOsc(visible);\r\n }\r\n\r\n protected doToggleMicrophone(_: boolean): void {\r\n /** no-op on android at the moment **/\r\n }\r\n\r\n protected doStartStream(isResume: boolean): void {\r\n if (!this.mSession) {\r\n throw new APIError(APIErrorCode.NoStreamingSession);\r\n }\r\n\r\n let androidConfig: AndroidStreamerConfiguration = this.defaultConfiguration;\r\n androidConfig.enableDynamicResolutionChange = this.mSession.isDynamicResolutionChangeEnabled;\r\n var isInternalUser: boolean = false;\r\n if (this.mUserSubscription) {\r\n isInternalUser = EntitlementUtils.IsFeatureAvailable(this.mUserSubscription.subscription, SubscriptionFeatureMetadata.ENABLE_DEBUG_TOOLS);\r\n }\r\n if (this.mPlatformStreamer) {\r\n const zone: Nullable = this.serverZone;\r\n const startParams: PlatformStartStreamParameters = {\r\n appId: this.mSession.appId,\r\n sessionId: this.mSession.sessionId,\r\n subSessionId: this.mSession.subSessionId,\r\n config: androidConfig,\r\n clientLocale: Utils.normalizeLanguageCode(this.mSettings.languageCode),\r\n clientEnvironment: this.mConfiguration.build.flavor ?? \"UNK\",\r\n serverUrl: zone === null ? \"\" : zone.address,\r\n serverRegion: zone === null ? \"\" : zone.name,\r\n touchMode: this.mSession!.appLaunchMode === AppLaunchMode.TouchFriendly ? AndroidTouchMode.Touch : AndroidTouchMode.DirectMouse,\r\n gpuType: this.mSession.gpuType ?? \"\",\r\n clientVersion: this.mSdkVersion.version,\r\n clientVersionTag: this.mSdkVersion.tag,\r\n scriptPath: Utils.getScriptPath().toString(),\r\n hdr: !!this.mStartParameters?.hdr,\r\n connectionInfo: {\r\n signal: {\r\n ip: this.mSession.connectionInfo!.signal.ip,\r\n port: this.mSession.connectionInfo!.signal.port,\r\n usage: this.mSession.connectionInfo!.signal.usage,\r\n protocol: this.mSession.connectionInfo!.signal.protocol,\r\n appLevelProtocol: this.mSession.connectionInfo!.signal.appLevelProtocol,\r\n },\r\n media: this.mSession.connectionInfo!.media.map((v) => {\r\n return { ip: v.ip, port: v.port, usage: v.usage, protocol: v.protocol, appLevelProtocol: v.appLevelProtocol };\r\n })\r\n },\r\n streamInfo: this.mSession.streamInfo!.map((v) => {\r\n return {\r\n width: v.width,\r\n height: v.height,\r\n fps: v.fps,\r\n bitrate: v.bitrate\r\n };\r\n }),\r\n audioChannels: this.getSupportedAudioChannels(),\r\n settingsJson: this.getUiSettingsJson(),\r\n uiUrl: Streamer.GetUiUrl(this.mConfiguration),\r\n uiDataJson: this.getUiDataJson(),\r\n mockParams: {\r\n enabled: this.mStartParameters?.mockParams?.enabled ?? false\r\n },\r\n isResume: isResume,\r\n enableIntroAnimation: this.mSettings.enableIntroAnimation,\r\n systemInfoGuid: this.mSession.systemInfoTelemetryId ?? MISSING_VALUE,\r\n streamingProfileGuid: this.mSession.streamingProfileTelemetryId ?? MISSING_VALUE,\r\n allowMultipleControllers: this.mAppData ? this.mAppData.maxLocalPlayers > 1: false,\r\n isInternalUser: isInternalUser\r\n };\r\n\r\n // keep until native clients are updated to 0.12.2+\r\n this.setSystemInfoGuid(this.mSession.systemInfoTelemetryId ?? MISSING_VALUE);\r\n this.setStreamingProfileGuid(this.mSession.streamingProfileTelemetryId ?? MISSING_VALUE);\r\n\r\n logger.verbose(\"starting streamer...\");\r\n (this.mPlatformStreamer).start(JSON.stringify(startParams));\r\n }\r\n }\r\n\r\n protected doStopStream(): void {\r\n if (this.mSession) {\r\n logger.verbose(\"stopping streamer...\");\r\n (this.mPlatformStreamer).stop();\r\n }\r\n }\r\n\r\n protected doSendCustomMessage(message: string, messageType: string, messageRecipient: string): void {\r\n logger.info(\"Sending custom Message: \" + message);\r\n (this.mPlatformStreamer).sendCustomMessage(message, messageType, messageRecipient);\r\n }\r\n\r\n protected async doOpenLink(urlData: UrlClickData): Promise {\r\n logger.error(\"Not implemented\");\r\n return false;\r\n }\r\n\r\n protected doSendKeyboardEvent(event: KeyboardEvent): void {\r\n logger.info(\"Sending keyboard event: \" + event);\r\n (this.mPlatformStreamer).sendKeyboardEvent(event.key, event.keyCode, event.ctrlKey, event.metaKey, event.shiftKey, event.type == \"keydown\");\r\n }\r\n\r\n public onPlatformStreamerInitializationError(reason: number, code: number): void {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Error, `platform streamer failed to initialize. (reason=${Utils.string.hex(reason, 8)}, code=${Utils.string.hex(code, 8)})`, code);\r\n this.finish(StreamerTerminationReason.PlatformStreamerError, code);\r\n }\r\n\r\n public onPlatformStreamerStarted(): void {\r\n this.updateState(StreamerState.Streaming);\r\n this.emit(\"started\");\r\n }\r\n\r\n public onPlatformStreamerConnected(): void {\r\n this.emit(\"connected\");\r\n }\r\n\r\n public onPlatformStreamerDisconnected(): void {\r\n this.emit(\"stopped\");\r\n }\r\n\r\n public onPlatformStreamerPaused(): void {\r\n this.emit(\"paused\");\r\n }\r\n\r\n public onPlatformStreamerResumed(): void {\r\n this.emit(\"resumed\");\r\n }\r\n\r\n public onPlatformStreamerTerminated(reason: number, code: number): void {\r\n let terminationReason: StreamerTerminationReason = StreamerTerminationReason.SessionDone;\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `platform streamer has been terminated. (reason=${Utils.string.hex(reason, 8)}, code=${Utils.string.hex(code, 8)})`, code);\r\n\r\n switch(reason) {\r\n case AndroidPlayerTerminationReason.ClientStopped:\r\n case AndroidPlayerTerminationReason.Success:\r\n terminationReason = StreamerTerminationReason.SessionDone;\r\n break;\r\n case AndroidPlayerTerminationReason.NetworkError:\r\n terminationReason = StreamerTerminationReason.NetworkError;\r\n break;\r\n case AndroidPlayerTerminationReason.ClientServerCompatibilityError:\r\n terminationReason = StreamerTerminationReason.ServerCompatibilityError;\r\n break;\r\n case AndroidPlayerTerminationReason.ServerTerminated:\r\n terminationReason = StreamerTerminationReason.ServerTerminatedConnection;\r\n break;\r\n case AndroidPlayerTerminationReason.NoVideoFramesError:\r\n case AndroidPlayerTerminationReason.VideoDecoderSetupError:\r\n case AndroidPlayerTerminationReason.StreamerInternalError:\r\n case AndroidPlayerTerminationReason.StreamerStartError:\r\n default:\r\n terminationReason = StreamerTerminationReason.PlatformStreamerError;\r\n break;\r\n }\r\n\r\n this.deleteSession(this.sessionId);\r\n this.finish(terminationReason, code);\r\n }\r\n\r\n public onPlatformStreamerQualityScoreChanged(score: number): void {\r\n this.onQualityScoreChanged(score);\r\n }\r\n\r\n public onPlatformStreamerColorModeChanged(mode: number): void {\r\n\r\n }\r\n\r\n public onPlatformStreamingWarning(reason: number, secondsRemaining: number): void {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Info, `platform streamer warning. Reason=${reason} secondsRemaining=${secondsRemaining}`);\r\n }\r\n\r\n public onPlatformCustomMessage(message: string, messageType: string, messageRecipient: string): void {\r\n this.onCustomMessage(message, messageType, messageRecipient);\r\n }\r\n\r\n public onPlatformStreamStatsUpdate(json: string): void {\r\n this.mStreamStats = JSON.parse(json);\r\n }\r\n\r\n protected doCreateVideoBounds(): VideoBounds {\r\n const videoHeight = this.mStreamStats.resolutionHeight || 0;\r\n const videoWidth = this.mStreamStats.resolutionWidth || 0;\r\n const videoAspect = videoWidth / videoHeight;\r\n // window.screen.width/height doesn't work here. It returns a much smaller value than the actual proportions of HD screens\r\n const windowWidth = (this.mDevice as AndroidDevice).screenSizeInPixels.width;\r\n const windowHeight = (this.mDevice as AndroidDevice).screenSizeInPixels.height;\r\n const maxWidth = Math.max(windowWidth, windowHeight);\r\n const maxHeight = Math.min(windowWidth, windowHeight);\r\n const fullScreenAspect = maxWidth / maxHeight;\r\n let boundingWidth = maxWidth;\r\n let boundingHeight = maxHeight;\r\n let boundingLeft = 0;\r\n let boundingTop = 0;\r\n if (videoAspect <= fullScreenAspect) {\r\n // Pillarbox. Extra space is on the side\r\n boundingWidth = videoAspect * maxHeight;\r\n boundingLeft = (maxWidth - boundingWidth) / 2;\r\n } else {\r\n // Letterbox. Extra space is at the top/bottom\r\n boundingHeight = maxWidth / videoAspect;\r\n boundingTop = (maxHeight - boundingHeight) / 2;\r\n }\r\n const videoBounds: VideoBounds = {\r\n videoWidth: videoWidth,\r\n videoHeight: videoHeight,\r\n boundingWidth: boundingWidth,\r\n boundingHeight: boundingHeight,\r\n boundingTop: boundingTop,\r\n boundingLeft: boundingLeft\r\n }\r\n return videoBounds;\r\n };\r\n\r\n protected doAdjustVideoOffsetForActionRegion(_: EditableRegion): void\r\n {\r\n /** no-op */\r\n }\r\n\r\n /** @internal **/\r\n public onPlatformGesture(gestureType: PlatformGestureType, x: number, y:number) {\r\n // Ignore ongoing long presses, respond to the LongPressEnd only\r\n if (gestureType !== PlatformGestureType.LongPress) {\r\n const info: GestureHelperEvent = {\r\n gestureType: gestureType === PlatformGestureType.Tap ? GestureType.Tap : GestureType.LongPress,\r\n touchX: x,\r\n touchY: y\r\n }\r\n\r\n this.onGesture(info);\r\n }\r\n }\r\n\r\n /** @deprecated **/\r\n /** remove after clients have been updated to native runtime 0.12.2+ **/\r\n public setSystemInfoGuid(guid: string): void {\r\n const platformStreamer: AndroidPlatformStreamer = (this.mPlatformStreamer);\r\n\r\n if (platformStreamer.setSystemInfoGuid) {\r\n platformStreamer.setSystemInfoGuid(guid);\r\n } else {\r\n logger.warn(\"The runtime method 'setSystemInfoGuid' does not exist.\");\r\n }\r\n }\r\n\r\n /** @deprecated **/\r\n /** remove after clients have been updated to native runtime 0.12.2+ **/\r\n public setStreamingProfileGuid(guid: string): void {\r\n const platformStreamer: AndroidPlatformStreamer = (this.mPlatformStreamer);\r\n\r\n if (platformStreamer.setStreamingProfileGuid) {\r\n platformStreamer.setStreamingProfileGuid(guid);\r\n } else {\r\n logger.warn(\"The runtime method 'setStreamingProfileGuid' does not exist.\");\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nexport interface Message {\r\n method: string,\r\n uniqueid?: number,\r\n refuniqueid?: number,\r\n data?: any,\r\n}\r\n\r\n/**\r\n * Provides helper functionality to communicate back and forth between browser windows.\r\n */\r\nexport class MessageHandler {\r\n private readonly mHostWindow: Window;\r\n private readonly mTargetWindow: Window;\r\n private readonly mTargetOrigin: string;\r\n private readonly mBoundOnPostedMessage: (event: MessageEvent) => void;\r\n\r\n private mCurrentMessageUniqueId: number = 1;\r\n private mRequestCallbackMap: Map void> = new Map void>();\r\n private mResponseCallbackMap: Map void> = new Map void>();\r\n\r\n constructor(hostWindow: Window, targetWindow: Window, targetOrigin: string = \"*\") {\r\n this.mHostWindow = hostWindow;\r\n this.mTargetWindow = targetWindow;\r\n this.mTargetOrigin = targetOrigin;\r\n\r\n // Need to store the binding in order to remove it later\r\n this.mBoundOnPostedMessage = this.onPostedMessage.bind(this);\r\n this.mHostWindow.addEventListener(\"message\", this.mBoundOnPostedMessage);\r\n }\r\n\r\n public cleanup(): void {\r\n this.mHostWindow.removeEventListener(\"message\", this.mBoundOnPostedMessage);\r\n }\r\n\r\n public postMessage(method: string, data?: any) {\r\n this.mTargetWindow.postMessage({\r\n method: method,\r\n data: data\r\n }, this.mTargetOrigin);\r\n }\r\n\r\n public postMessageAndGetResponse(method: string, data: any = {}): Promise {\r\n const uniqueid = this.mCurrentMessageUniqueId++\r\n const promise = new Promise((res, rej) => {\r\n this.mResponseCallbackMap.set(uniqueid, res);\r\n });\r\n\r\n this.mTargetWindow.postMessage({\r\n method: method,\r\n uniqueid: uniqueid,\r\n data: data,\r\n }, this.mTargetOrigin);\r\n\r\n return promise.then(response => {\r\n return response.data;\r\n });\r\n }\r\n\r\n public postResponse(method: string, data: any, refuniqueid: number) {\r\n this.mTargetWindow.postMessage({\r\n method: method,\r\n refuniqueid: refuniqueid,\r\n data: data,\r\n }, this.mTargetOrigin);\r\n }\r\n\r\n public register(method: string, callback: (message: Message) => void): void {\r\n this.mRequestCallbackMap.set(method, callback);\r\n }\r\n\r\n protected onPostedMessage(event: MessageEvent) {\r\n if (this.mTargetOrigin === \"*\" || !event.origin || event.origin === this.mTargetOrigin) {\r\n const refid = event?.data?.refuniqueid;\r\n const method: string = event?.data?.method ?? \"\";\r\n if (refid && this.mResponseCallbackMap.has(refid)) {\r\n this.mResponseCallbackMap.get(refid)!(event.data);\r\n this.mResponseCallbackMap.delete(refid);\r\n } else if (method && this.mRequestCallbackMap.has(method)) {\r\n this.mRequestCallbackMap.get(method)!(event.data);\r\n }\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { AuthInfo, GridApp, GsErrorCode, InitParams, InputConfigFlags, RErrorCode, StopSessionResultEvent } from \"@gamestream-stable/ragnarok\";\r\nimport * as GS from \"@gamestream-stable/ragnarok\";\r\nimport { AuthInfo as GsAuthInfo, GridSession, GsInitParams, GS_EVENTS, SessionParams, SessionProgressUpdateEvent } from \"@gamestream-stable/gridserver\";\r\nimport { Nullable } from \"../../core/util.types\";\r\nimport { MockGridServer, MOCK_GPU_TYPE, MOCK_SESSION_ID, MOCK_ZONE_ADDRESS, MOCK_ZONE_NAME } from \"./mock-grid-server\";\r\nimport { MockGsInitParams } from \"./mock-streamer.types\";\r\nimport { StreamerTerminationReason } from \"../streamer.types\";\r\nimport { APIError } from \"../../api-error\";\r\nimport { APIErrorCode } from \"../../api-error.types\";\r\nimport { Logging } from \"../../logging/logging\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/mock-ragnarok\");\r\n\r\nconst ELEMENT_ID_VIDEO = \"gfn-stream-player-mock\";\r\n\r\nexport class MockRagnarok extends GridApp {\r\n private mGridServer: Nullable = null;\r\n private mMockStreamerElem: Nullable = null;\r\n private mMockStreamerRuntime: Object;\r\n\r\n public get mocked(): boolean {\r\n return true;\r\n }\r\n\r\n constructor(platformDetails: GS.PlatformDetails) {\r\n super(platformDetails);\r\n this.mMockStreamerRuntime = {\r\n terminate: (reason: StreamerTerminationReason, code: number) => {\r\n logger.info(`MockWebStreamer: terminate(reason=${reason}, code=${code})`);\r\n const event: GS.StreamingTerminatedEvent = {\r\n sessionId: MOCK_SESSION_ID,\r\n subSessionId: MOCK_SESSION_ID,\r\n error: {\r\n code: reason\r\n },\r\n isResumable: false,\r\n zoneName: MOCK_ZONE_NAME,\r\n zoneAddress: MOCK_ZONE_ADDRESS,\r\n };\r\n\r\n if (reason as number !== GS.RErrorCode.Success\r\n && reason as number !== GS.RErrorCode.ServerDisconnectedHotKey\r\n && reason as number !== GS.RErrorCode.ServerDisconnectedIntended) {\r\n event.exitcode = reason;\r\n }\r\n\r\n this.emit(GS.EVENTS.STREAM_STOPPED, event);\r\n },\r\n warn: (code: number, secondsRemaining: number) => {\r\n this.emit(GS.EVENTS.STREAMING_EVENT, {\r\n streamingWarnings: {\r\n code: code,\r\n secondsLeft: secondsRemaining\r\n }\r\n });\r\n logger.info(`MockWebStreamer: warn(code=${code}, secondsRemaining=${secondsRemaining})`);\r\n },\r\n sendClientMessage: (messageData: any, messageType: string, messageRecipient: string) => {\r\n logger.info(`MockWebStreamer: send client message: messageType: ${messageType} messageRecipient: ${messageRecipient}`);\r\n this.emit(GS.EVENTS.CUSTOM_MESSAGE, {\r\n data: messageData,\r\n messageType: messageType,\r\n messageRecipient: messageRecipient,\r\n })\r\n }\r\n };\r\n }\r\n\r\n public initialize(initializeParams: InitParams, inputConfigFlags: InputConfigFlags): boolean {\r\n this.mGridServer = new MockGridServer();\r\n this.mGridServer.addListener(GS.EVENTS.PROGRESS_UPDATE, this.onGamestreamProgressUpdate.bind(this));\r\n this.mGridServer.initialize(initializeParams as unknown as MockGsInitParams);\r\n return true;\r\n }\r\n\r\n public startSession(sessionStartParams: GS.SessionParams): void {\r\n this.mGridServer!.putOrPostSession(sessionStartParams as unknown as SessionParams, 0, \"\").then((gridSession: GridSession | undefined) => {\r\n if (gridSession) {\r\n // this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `new session - (${gridSession.sessionId} / ${this.mSession.subSessionId}) - not yet ready`);\r\n // this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `waiting for session to be ready... (${gridSession.state})`);\r\n this.mGridServer!.getSession(gridSession.sessionId, true).then((gridSession: GridSession | undefined) => {\r\n const videoTagId = sessionStartParams.streamParams![0]?.videoTagId || \"unknown\";\r\n const videoElem: Nullable = document.getElementById(videoTagId);\r\n if (!videoElem || !videoElem.parentElement) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, `Could not find element with id=${videoTagId}`);\r\n }\r\n this.mMockStreamerElem = MockRagnarok.GetOrCreateMockVideoElement(ELEMENT_ID_VIDEO, videoElem.parentElement, this.mMockStreamerRuntime);\r\n this.emit(GS.EVENTS.SESSION_START_RESULT, {\r\n sessionId: MOCK_SESSION_ID,\r\n subSessionId: MOCK_SESSION_ID,\r\n zoneName: MOCK_ZONE_NAME,\r\n zoneAddress: MOCK_ZONE_ADDRESS,\r\n gpuType: MOCK_GPU_TYPE\r\n });\r\n }, (reject) => {\r\n this.emit(GS.EVENTS.SESSION_START_RESULT, {\r\n sessionId: MOCK_SESSION_ID,\r\n subSessionId: MOCK_SESSION_ID,\r\n zoneName: MOCK_ZONE_NAME,\r\n zoneAddress: MOCK_ZONE_ADDRESS,\r\n gpuType: MOCK_GPU_TYPE,\r\n error: {\r\n code: reject.code\r\n }\r\n });\r\n });\r\n }\r\n });\r\n }\r\n\r\n stopSession(sessionId?: string, exitCode?: number): void {\r\n const stopEvent: StopSessionResultEvent = {\r\n sessionId: sessionId ?? MOCK_SESSION_ID,\r\n subSessionId: MOCK_SESSION_ID,\r\n };\r\n\r\n if (exitCode && exitCode != RErrorCode.Success) {\r\n stopEvent.error = {\r\n code: exitCode\r\n };\r\n }\r\n\r\n if (this.mMockStreamerElem) {\r\n this.mMockStreamerElem.remove();\r\n this.mMockStreamerElem = null;\r\n }\r\n\r\n this.emit(\"StreamStopped\", stopEvent);\r\n }\r\n\r\n // updateEventDataElements(eventDataElements: EventDataElements): void;\r\n // getActiveSessions(): void;\r\n // getSession(sessionId: string): void;\r\n // resume(): void;\r\n // resumeSession(sessionResumeParams: SessionParams, sessionId: string): void;\r\n\r\n // public isMicSupported(): boolean {\r\n // return true;\r\n // }\r\n // setMicRecordingEnabled(enabled: boolean): void;\r\n // getMicState(): void;\r\n // toggleUserInput(enable: boolean, inputs?: InputType): void;\r\n // sendCustomMessage(message: CustomMessage): void;\r\n // getVirtualGamepadHandler(): VirtualGamepadHandler | undefined;\r\n public setAuthInfo(authInfo: AuthInfo): void {\r\n this.mGridServer?.setAuthInfo(authInfo as unknown as GsAuthInfo);\r\n }\r\n // sendTextInput(text: ArrayBuffer): void;\r\n // setVirtualKeyboardState(visible: boolean): void;\r\n // setVideoTransforms(offsetX: number, offsetY: number, zoomFactor: number): void;\r\n // setKeyboardLayout(layout: string): void;\r\n // downloadAudio(): void;\r\n // toggleRsdmm(enable: boolean): void;\r\n // pauseSession(sessionId?: string): void;\r\n\r\n protected onGamestreamProgressUpdate(e: SessionProgressUpdateEvent): void {\r\n this.emit(GS_EVENTS.PROGRESS_UPDATE, e);\r\n }\r\n\r\n private static GetOrCreateMockVideoElement(elementId: string, container: HTMLElement, runtime: Object): HTMLElement {\r\n const elem = document.createElement(\"iframe\");\r\n elem.id = elementId;\r\n elem.src = \"mock-streamer.html\";\r\n elem.style.width = \"100%\";\r\n elem.style.height = \"100%\";\r\n elem.style.left = \"0\";\r\n elem.style.top = \"0\";\r\n elem.style.position = \"absolute\";\r\n elem.style.outline = \"none\";\r\n\r\n container.appendChild(elem);\r\n (elem.contentWindow as any).__GFN_MOCK_STREAMER__ = runtime;\r\n\r\n return elem;\r\n }\r\n}\r\n","import { GsErrorCode } from \"@gamestream-stable/gridserver\";\r\nimport { RErrorCode } from \"@gamestream-stable/ragnarok\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { STREAMER_GSERROR_TERMINATION_REASON_MAP } from \"./streamer-errors\";\r\nimport { StreamerTerminationReason } from \"./streamer.types\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/streamer-errors\");\r\n\r\n/** @internal **/\r\nconst STREAMER_RAGNAROK_TERMINATION_REASON_MAP: Map = new Map([\r\n [RErrorCode.StreamerGetRemotePeerTimedOut, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamErrorGeneric, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerSignInFailure, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerHangingGetFailure, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerNetworkError, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerVideoPlayError, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerNoVideoPacketsReceivedEver, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerIceConnectionFailed, StreamerTerminationReason.Unexpected],\r\n [RErrorCode.ServerDisconnectedUserEntitledMinutesExceeded, StreamerTerminationReason.ServerDisconnectedSessionEntitledTimeExceeded],\r\n [RErrorCode.ServerDisconnectedUserIdle, StreamerTerminationReason.ServerDisconnectedUserIdle],\r\n [RErrorCode.ClientDisconnectedUserIdle, StreamerTerminationReason.ServerDisconnectedUserIdle],\r\n [RErrorCode.ServerDisconnectedOperatorCommandedTermination, StreamerTerminationReason.ServerDisconnectedOperatorCommandedTermination],\r\n [RErrorCode.ServerDisconnectedIntended, StreamerTerminationReason.NetworkErrorIntended],\r\n [RErrorCode.ServerDisconnectedMaxSessionTimeLimitExceeded, StreamerTerminationReason.ServerDisconnectedMaxSessionTimeLimitExceeded],\r\n [RErrorCode.ServerDisconnectedSystemCommandTermination, StreamerTerminationReason.ServerDisconnectedSystemCommandTermination],\r\n [RErrorCode.ServerDisconnectedWindowedMode, StreamerTerminationReason.ServerDisconnectedWindowedMode],\r\n [RErrorCode.ServerDisconnectedUnAuthorizedProcessDetected, StreamerTerminationReason.Unexpected],\r\n [RErrorCode.ServerDisconnectedMaliciousProcessDetected, StreamerTerminationReason.Unexpected],\r\n [RErrorCode.ServerDisconnectedMinerProcessDetected, StreamerTerminationReason.Unexpected],\r\n [RErrorCode.ServerDisconnectedUnKnownProcessDetected, StreamerTerminationReason.Unexpected],\r\n [RErrorCode.ServerDisconnectedMultipleLogin, StreamerTerminationReason.ServerDisconnectedMultipleLogin],\r\n [RErrorCode.ServerDisconnectedAnotherClient, StreamerTerminationReason.ServerDisconnectedAnotherClient],\r\n [RErrorCode.StreamerNoVideoFramesLossyNetwork, StreamerTerminationReason.StreamerNetworkError],\r\n [RErrorCode.StreamerIceReConnectionFailed, StreamerTerminationReason.StreamerNetworkError],\r\n [RErrorCode.StreamerReConnectionFailed, StreamerTerminationReason.StreamerNetworkError],\r\n [RErrorCode.ServerDisconnectedGameNotOwnedByUser, StreamerTerminationReason.ServerDisconnectedGameNotOwnedByUser],\r\n [RErrorCode.NoInternetDuringStreaming, StreamerTerminationReason.StreamerNetworkError],\r\n [RErrorCode.ServerDisconnectedMaintenanceMode, StreamerTerminationReason.ServiceUnAvailable],\r\n [RErrorCode.NoNetwork, StreamerTerminationReason.NetworkError],\r\n [RErrorCode.StreamerNoStunResponsesReceived, StreamerTerminationReason.NetworkError],\r\n]);\r\n\r\n/** @internal **/\r\nexport function MapRagnarokErrorCodeToReason(errorCode: RErrorCode): StreamerTerminationReason {\r\n if (STREAMER_RAGNAROK_TERMINATION_REASON_MAP.has(errorCode)) {\r\n return STREAMER_RAGNAROK_TERMINATION_REASON_MAP.get(errorCode)!;\r\n }\r\n if (STREAMER_GSERROR_TERMINATION_REASON_MAP.has(errorCode as unknown as GsErrorCode)) {\r\n return STREAMER_GSERROR_TERMINATION_REASON_MAP.get(errorCode as unknown as GsErrorCode)!;\r\n }\r\n logger.error(`Could not map error session error code ${errorCode}, defaulting to SetupSessionFailure`);\r\n return StreamerTerminationReason.SetupSessionFailure;\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n// Standard mapping defined in https://www.w3.org/TR/gamepad/#remapping\r\nexport enum GamepadButtonName {\r\n A = 0,\r\n B = 1,\r\n X = 2,\r\n Y = 3,\r\n LeftBumper = 4,\r\n RightBumper = 5,\r\n LeftTrigger = 6,\r\n RightTrigger = 7,\r\n Back = 8,\r\n Start = 9,\r\n LeftStick = 10,\r\n RightStick = 11,\r\n DpadUp = 12,\r\n DpadDown = 13,\r\n DpadLeft = 14,\r\n DpadRight = 15,\r\n Center = 16 // e.g. XBox/PS button\r\n}\r\n\r\nexport interface GamepadKeypressCallback { (): void }","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { KeyboardLayout } from \"./streamer-ui.types\";\r\n\r\n// A placeholder mean that the nearby key takes up more than one row,\r\n// so there is special handling to make sure navigation works as\r\n// expected\r\n\r\nexport default {\r\n layout: [\r\n \"{} {} {} {} {} {} {} {} {} {} {\\\"width\\\":2}\",\r\n \"{} {} {} {} {} {} {} {} {} {} {} {}\",\r\n \"{} {} {} {} {} {} {} {} {} {} {\\\"width\\\":2,\\\"height\\\":2}\",\r\n \"{} {} {} {} {} {} {} {} {} {} {\\\"width\\\":2,\\\"placeholder\\\":true}\",\r\n \"{\\\"width\\\":2} {\\\"width\\\":6} {\\\"width\\\":2} {\\\"width\\\":2}\",\r\n ],\r\n default: [\r\n \"1 2 3 4 5 6 7 8 9 0 {backspace}\",\r\n \"q w e r t y u i o p {back} {forward}\",\r\n \"a s d f g h j k l @ {enter}\",\r\n \"z x c v b n m , . ?\",\r\n \"{shift} {space} {symbol} {hide}\",\r\n ],\r\n shift: [\r\n \"1 2 3 4 5 6 7 8 9 0 {backspace}\",\r\n \"Q W E R T Y U I O P {back} {forward}\",\r\n \"A S D F G H J K L @ {enter}\",\r\n \"Z X C V B N M , . ?\",\r\n \"{shift} {space} {symbol} {hide}\",\r\n ],\r\n symbol: [\r\n \"` ~ ! @ # $ % ^ & * {backspace}\",\r\n \"= + ( ) [ ] { } - _ {back} {forward}\",\r\n \"\\u20ac \\u00a3 ' \\\" | ; : , . ? {enter}\",\r\n \"\\u20b9 \\u00a5 \\u00a7 \\u00f7 \\u00a1 \\u00bf < > \\\\ /\",\r\n \"{shift} {space} {default} {hide}\",\r\n ],\r\n};\r\n","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { KeyCode } from \"../input/keycode\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { KeyboardKeyLayout, KeyboardLayout, VirtualKeyboardListener } from \"./streamer-ui.types\";\r\nimport QwertyLayout from \"./virtual-keyboard-qwerty.layout\";\r\n\r\nconst logger = Logging.getLogger(\"ui/virtual-keyboard\");\r\n\r\nconst CAPS_COOLDOWN_MS: number = 1000;\r\n\r\n/** @internal */\r\nenum ShiftState {\r\n Off,\r\n On,\r\n CapsLock\r\n};\r\n\r\n/** @internal */\r\nenum SymbolState {\r\n Off,\r\n On\r\n};\r\n\r\n/** @internal */\r\ninterface LayoutData {\r\n key: string;\r\n display: string;\r\n action?: (down: boolean) => void;\r\n}\r\n\r\n/** @internal */\r\nfunction mapKeyToLayoutData(keyboard: VirtualKeyboard, key: string): LayoutData {\r\n const layoutData: LayoutData = {\r\n key: key,\r\n display: key,\r\n action: keyboard.onActivateKey.bind(keyboard, key)\r\n };\r\n if (key.startsWith(\"{\") && key.endsWith(\"}\")) {\r\n switch (key) {\r\n case \"{space}\":\r\n layoutData.display = \"space\";\r\n layoutData.action = keyboard.onActivateKey.bind(keyboard, \" \");\r\n break;\r\n case \"{backspace}\":\r\n layoutData.display = \"backspace\";\r\n layoutData.action = keyboard.onActivateBackspace.bind(keyboard);\r\n break;\r\n case \"{enter}\":\r\n layoutData.display = \"enter\";\r\n layoutData.action = keyboard.onActivateEnter.bind(keyboard);\r\n break;\r\n case \"{hide}\":\r\n layoutData.display = \"hide\";\r\n layoutData.action = keyboard.onActivateHide.bind(keyboard);\r\n break;\r\n case \"{default}\":\r\n layoutData.display = \"abc\";\r\n layoutData.action = keyboard.onActivateSymbols.bind(keyboard);\r\n break;\r\n case \"{symbol}\":\r\n layoutData.display = \"*&$\";\r\n layoutData.action = keyboard.onActivateSymbols.bind(keyboard);\r\n break;\r\n case \"{shift}\":\r\n layoutData.display = \"^\";\r\n layoutData.action = keyboard.onActivateShift.bind(keyboard);\r\n break;\r\n case \"{back}\":\r\n layoutData.display = \"<-\";\r\n layoutData.action = keyboard.onActivateBack.bind(keyboard);\r\n break;\r\n case \"{forward}\":\r\n layoutData.display = \"->\";\r\n layoutData.action = keyboard.onActivateForward.bind(keyboard);\r\n break;\r\n case \"{}\":\r\n default:\r\n layoutData.display = \"\";\r\n layoutData.action = undefined;\r\n break;\r\n }\r\n }\r\n return layoutData;\r\n}\r\n\r\n/** @internal */\r\nclass KeyboardKey {\r\n public readonly elem: HTMLElement;\r\n public readonly width: number;\r\n public readonly layouts: { [key: string]: LayoutData } = {};\r\n public activeLayout: LayoutData = {\r\n key: \"\",\r\n display: \"\"\r\n };\r\n\r\n private mKeyboard: VirtualKeyboard;\r\n private mIsDown: boolean;\r\n private mCapsIndicatorElem: Nullable = null;\r\n\r\n public get focused(): boolean {\r\n return document.activeElement === this.elem;\r\n }\r\n\r\n public get placeholder(): boolean {\r\n return this.elem.tabIndex !== 0;\r\n }\r\n\r\n public get capsIndicator(): Nullable {\r\n return this.mCapsIndicatorElem;\r\n }\r\n\r\n constructor(keyboard: VirtualKeyboard, keyLayout: KeyboardKeyLayout, defaultKey: string, shiftKey: string, symbolKey: string) {\r\n this.mKeyboard = keyboard;\r\n this.mIsDown = false;\r\n\r\n const label: HTMLElement = document.createElement(\"span\");\r\n label.classList.add(\"virtual-keyboard-key-label\");\r\n\r\n this.elem = document.createElement(\"div\");\r\n this.elem.classList.add(\"virtual-keyboard-key\");\r\n this.elem.appendChild(label);\r\n\r\n this.elem.addEventListener(\"keydown\", this.handleKeyDown.bind(this));\r\n this.elem.addEventListener(\"keyup\", this.handleKeyUp.bind(this));\r\n this.elem.addEventListener(\"blur\", this.handleBlur.bind(this));\r\n\r\n if (keyLayout.width) {\r\n this.elem.classList.add(`width-${keyLayout.width}`);\r\n this.width = keyLayout.width;\r\n } else {\r\n this.width = 1;\r\n }\r\n if (keyLayout.height) {\r\n this.elem.classList.add(`height-${keyLayout.height}`);\r\n }\r\n if (keyLayout.placeholder) {\r\n this.elem.style.opacity = \"0\";\r\n } else {\r\n this.elem.tabIndex = 0;\r\n this.layouts[\"default\"] = mapKeyToLayoutData(keyboard, defaultKey);\r\n this.layouts[\"shift\"] = mapKeyToLayoutData(keyboard, shiftKey);\r\n this.layouts[\"symbol\"] = mapKeyToLayoutData(keyboard, symbolKey);\r\n }\r\n\r\n this.activateLayout(\"default\");\r\n\r\n // Special case, the shift key gets a caps-lock indicator\r\n if (this.activeLayout.key === \"{shift}\") {\r\n this.mCapsIndicatorElem = document.createElement(\"div\");\r\n this.mCapsIndicatorElem.classList.add(\"virtual-keyboard-caps-indicator\");\r\n this.elem.appendChild(this.mCapsIndicatorElem);\r\n }\r\n }\r\n\r\n public focus(): boolean {\r\n if (this.placeholder) {\r\n return false;\r\n }\r\n this.elem.focus();\r\n return true;\r\n }\r\n\r\n public activateLayout(layoutName: string): void {\r\n if (this.placeholder) {\r\n return;\r\n }\r\n this.activeLayout = this.layouts[layoutName];\r\n\r\n const label: Nullable = this.elem.querySelector(\".virtual-keyboard-key-label\");\r\n if (label) {\r\n label.textContent = this.activeLayout.display;\r\n }\r\n }\r\n\r\n protected handleKeyDown(event: KeyboardEvent): void {\r\n if (event.key === \"Enter\") {\r\n this.handleAction(true);\r\n }\r\n }\r\n\r\n protected handleKeyUp(event: KeyboardEvent): void {\r\n if (event.key === \"Enter\") {\r\n this.handleAction(false);\r\n }\r\n }\r\n\r\n protected handleBlur(event: FocusEvent): void {\r\n this.handleAction(false);\r\n }\r\n\r\n protected handleAction(down: boolean): void {\r\n if (down) {\r\n this.elem.classList.add(\"active\");\r\n } else {\r\n this.elem.classList.remove(\"active\");\r\n }\r\n\r\n // Send all down events. Only send up events if the key is actually down first\r\n if (down || this.mIsDown) {\r\n if (this.activeLayout.action) {\r\n this.activeLayout.action(down);\r\n }\r\n }\r\n this.mIsDown = down;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass KeyboardRow {\r\n public readonly elem: HTMLElement;\r\n public readonly keys: KeyboardKey[] = [];\r\n constructor() {\r\n this.elem = document.createElement(\"div\");\r\n this.elem.classList.add(\"virtual-keyboard-row\");\r\n }\r\n\r\n public addKey(key: KeyboardKey): void {\r\n this.keys.push(key);\r\n this.elem.appendChild(key.elem);\r\n }\r\n\r\n public focusNext(focusedSlot: number, direction: number): boolean {\r\n const focusedKey = this.getKeyInSlot(focusedSlot);\r\n const focusedIndex = this.keys.findIndex(key => key === focusedKey);\r\n const newFocusedIndex = Utils.math.mod(focusedIndex + direction, this.keys.length);\r\n return this.keys[newFocusedIndex].focus();\r\n }\r\n\r\n public getKeyInSlot(targetSlot: number): Nullable {\r\n let slot = 0;\r\n for (const key of this.keys) {\r\n slot += key.width;\r\n if (slot > targetSlot) {\r\n return key;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n public getFocusedSlot(): Nullable {\r\n let slot = 0;\r\n for (const key of this.keys) {\r\n if (key.focused) {\r\n return slot;\r\n }\r\n slot += key.width;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class VirtualKeyboard {\r\n private readonly mPlatformStreamerUI: PlatformStreamerUI;\r\n private readonly mListener;\r\n\r\n public readonly elem: HTMLElement;\r\n public readonly rows: KeyboardRow[] = [];\r\n private mShiftState: ShiftState = ShiftState.Off;\r\n private mSymbolState: SymbolState = SymbolState.Off;\r\n private mCapsIndicator: Nullable = null;\r\n private mShiftLastActivationTime: number = 0;\r\n\r\n public get runtime(): PlatformStreamerUI {\r\n return this.mPlatformStreamerUI;\r\n }\r\n\r\n public get visible(): boolean {\r\n return !!this.elem.style.display && !Utils.string.equals(this.elem.style.display, \"none\");\r\n }\r\n\r\n constructor(runtime: PlatformStreamerUI, listener: VirtualKeyboardListener) {\r\n this.mPlatformStreamerUI = runtime;\r\n this.mListener = listener;\r\n\r\n const id = \"virtual-keyboard\";\r\n const element: Nullable = window.document.getElementById(id);\r\n if (!element) {\r\n throw new APIError(APIErrorCode.UIError, `Unable to find HTML element ${id}`);\r\n }\r\n this.elem = element;\r\n\r\n this.buildLayout(QwertyLayout);\r\n\r\n this.elem.addEventListener(\"keydown\", this.handleKeyDown.bind(this));\r\n }\r\n\r\n public show(): void {\r\n this.elem.style.display = \"flex\";\r\n }\r\n\r\n public hide(): void {\r\n this.elem.style.display = \"none\";\r\n }\r\n\r\n public focus(): void {\r\n if (this.rows.length > 0 && this.rows[0].keys.length > 0) {\r\n this.rows[0].keys[0].focus();\r\n }\r\n }\r\n\r\n public onActivateKey(key: string, down: boolean): void {\r\n this.runtime.onVirtualKeyEvent(0, key, down);\r\n if (this.mShiftState === ShiftState.On) {\r\n this.mShiftState = ShiftState.Off;\r\n this.updateLayout();\r\n }\r\n }\r\n\r\n public onActivateHide(down: boolean): void {\r\n if (!down) {\r\n this.mListener.onVirtualKeyboardHideActivated();\r\n }\r\n }\r\n\r\n public onActivateEnter(down: boolean): void {\r\n this.runtime.onVirtualKeyEvent(KeyCode.Enter, \"\", down);\r\n }\r\n\r\n public onActivateBackspace(down: boolean): void {\r\n this.runtime.onVirtualKeyEvent(KeyCode.Backspace, \"\", down);\r\n }\r\n\r\n public onActivateShift(down: boolean): void {\r\n if (!down) {\r\n if (this.mShiftState === ShiftState.Off) {\r\n this.mShiftState = ShiftState.On;\r\n this.mShiftLastActivationTime = new Date().getTime();\r\n } else if (this.mShiftState === ShiftState.On) {\r\n this.mShiftState = (new Date().getTime() - this.mShiftLastActivationTime > CAPS_COOLDOWN_MS) ? ShiftState.Off : ShiftState.CapsLock;\r\n } else if (this.mShiftState === ShiftState.CapsLock) {\r\n this.mShiftState = ShiftState.Off;\r\n }\r\n\r\n this.updateLayout();\r\n }\r\n }\r\n\r\n public onActivateSymbols(down: boolean): void {\r\n if (!down) {\r\n this.mSymbolState = this.mSymbolState === SymbolState.On ? SymbolState.Off : SymbolState.On;\r\n this.updateLayout();\r\n }\r\n }\r\n\r\n public onActivateBack(down: boolean): void {\r\n this.runtime.onVirtualKeyEvent(KeyCode.ArrowLeft, \"\", down);\r\n }\r\n\r\n public onActivateForward(down: boolean): void {\r\n this.runtime.onVirtualKeyEvent(KeyCode.ArrowRight, \"\", down);\r\n }\r\n\r\n protected addRow(row: KeyboardRow): void {\r\n this.rows.push(row);\r\n this.elem.appendChild(row.elem);\r\n }\r\n\r\n protected focusNextKey(direction: number) {\r\n let focusedSlot: Nullable = 0;\r\n const focusedRowIndex = this.rows.findIndex(row => (focusedSlot = row.getFocusedSlot()) != null);\r\n if (focusedRowIndex !== undefined) {\r\n // Keep searching until we find a non-placeholder key to focus\r\n for (let i = focusedRowIndex; i >= 0; --i) {\r\n if (this.rows[i].focusNext(focusedSlot, direction)) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected focusNextRow(direction: number) {\r\n let slot: Nullable = 0;\r\n const focusedRowIndex = this.rows.findIndex(row => (slot = row.getFocusedSlot()) != null);\r\n if (focusedRowIndex !== undefined) {\r\n // Keep searching until we find a non-placeholder key to focus\r\n for (let i = 1; i < this.rows.length; ++i) {\r\n const newFocusedRowIndex = Utils.math.mod(focusedRowIndex + direction * i, this.rows.length);\r\n const key = this.rows[newFocusedRowIndex].getKeyInSlot(slot);\r\n if (key && key.focus()) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected handleKeyDown(e: KeyboardEvent): void {\r\n if (e.key === \"ArrowLeft\") {\r\n this.focusNextKey(-1);\r\n } else if (e.key === \"ArrowRight\") {\r\n this.focusNextKey(1);\r\n } else if (e.key === \"ArrowUp\") {\r\n this.focusNextRow(-1);\r\n } else if (e.key === \"ArrowDown\") {\r\n this.focusNextRow(1);\r\n }\r\n }\r\n\r\n protected updateLayout(): void {\r\n const layout = this.mSymbolState === SymbolState.On ? \"symbol\" :\r\n this.mShiftState !== ShiftState.Off ? \"shift\" : \"default\";\r\n this.rows.forEach(row => {\r\n row.keys.forEach(key => {\r\n key.activateLayout(layout);\r\n });\r\n });\r\n\r\n if (this.mCapsIndicator) {\r\n if (this.mShiftState === ShiftState.CapsLock) {\r\n this.mCapsIndicator.classList.add(\"active\");\r\n } else {\r\n this.mCapsIndicator.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n protected buildLayout(layout: KeyboardLayout) {\r\n layout.layout.forEach((rowStr: string, i: number) => {\r\n const row: KeyboardRow = new KeyboardRow();\r\n const defaultChars = layout.default[i].split(\" \");\r\n const shiftChars = layout.shift[i].split(\" \");\r\n const symbolChars = layout.symbol[i].split(\" \");\r\n\r\n rowStr.split(\" \").forEach((keyLayoutJson: string, j: number) => {\r\n const keyLayout: KeyboardKeyLayout = JSON.parse(keyLayoutJson);\r\n const key: KeyboardKey = new KeyboardKey(this, keyLayout, defaultChars[j], shiftChars[j], symbolChars[j]);\r\n row.addKey(key);\r\n\r\n if (key.capsIndicator) {\r\n this.mCapsIndicator = key.capsIndicator;\r\n }\r\n });\r\n\r\n this.addRow(row);\r\n });\r\n }\r\n}\r\n","/* Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { StreamerUI } from \"./streamer-ui\";\r\nimport { FocusOutHandler, TouchOscElems, VirtualKeyboardListener } from \"./streamer-ui.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { VirtualKeyboard } from \"./virtual-keyboard\";\r\nimport { Device } from \"../device/device\";\r\nimport { SdkConfiguration } from \"../configuration/configuration.types\";\r\nimport { GamepadButtonName } from \"../input/gamepad-handler.types\";\r\n\r\nconst logger = Logging.getLogger(\"ui/osc\");\r\n\r\nconst OSC_KB_ELEMENT_ID = \"show-keyboard\";\r\nconst OSC_QUIT_ELEMENT_ID = \"quit-session\";\r\nconst OSC_TOGGLE_ELEMENT_ID = \"osc-toggle\";\r\nconst OSC_PASTE_ELEMENT_ID = \"osc-clipboard\";\r\nconst OSC_BUTTONS_CONTAINER_ELEMENT_ID = \"osc-top-bar-buttons\";\r\n\r\n\r\n/* OSC support on different platform inputs:\r\n*\r\n* Virtual Keyboard Stream Exit Gamepad Hints\r\n* Touch | YES (native) | YES | NO |\r\n* Desktop | NO | YES | NO |\r\n* Gamepad | YES | YES | YES |\r\n*\r\n*/\r\n\r\nexport class OnScreenControl implements FocusOutHandler, VirtualKeyboardListener {\r\n private mMenuElem: HTMLElement;\r\n private mKeyboardButton: HTMLElement;\r\n private mQuit: HTMLElement;\r\n private mKeyboardHintLabel: HTMLElement;\r\n private mCloseHint: HTMLElement;\r\n private mTopBarElem: HTMLElement;\r\n private mOscHideElement?: HTMLElement;\r\n private mVirtualKeyboard: VirtualKeyboard;\r\n private mUI: StreamerUI;\r\n private mIsKeyboardVisible: boolean = false;\r\n private mTouchOscEnabled: boolean;\r\n private mIsGamepadConnected: boolean;\r\n\r\n public get visible(): boolean {\r\n return !!this.mMenuElem.style.display && !Utils.string.equals(this.mMenuElem.style.display, \"none\");\r\n }\r\n\r\n public get isKeyboardVisible(): boolean {\r\n return this.mIsKeyboardVisible;\r\n }\r\n\r\n constructor(ui: StreamerUI, device: Device, fts: SdkConfiguration) {\r\n this.mUI = ui;\r\n this.mTouchOscEnabled = fts.enableTouchOsc && device.isMobile;\r\n this.mIsGamepadConnected = device.isGamepadConnected;\r\n logger.info(`OSC touch:${this.mTouchOscEnabled}, gamepad:${this.mIsGamepadConnected}`);\r\n\r\n const menuElem: Nullable = window.document.getElementById(\"osc\");\r\n if (!menuElem) {\r\n throw new Error(\"Unable to find HTML element osc\");\r\n }\r\n\r\n this.mMenuElem = menuElem;\r\n this.mMenuElem.style.display = \"none\";\r\n this.mMenuElem.onkeydown = this.handleOscKeyEvent.bind(this, true);\r\n this.mMenuElem.onkeyup = this.handleOscKeyEvent.bind(this, false);\r\n\r\n this.mTopBarElem = window.document.getElementById(\"osc-top-bar\")!;\r\n this.mTopBarElem.addEventListener(\"focusout\", this.onFocusOut.bind(this));\r\n\r\n this.mKeyboardButton = window.document.getElementById(\"show-keyboard\")!;\r\n if (this.mTouchOscEnabled || this.mIsGamepadConnected) {\r\n this.mKeyboardButton.onclick = this.keyboardButtonSelected.bind(this);\r\n } else {\r\n // No virtual keyboard required for Desktop\r\n this.mKeyboardButton.style.display = \"none\";\r\n }\r\n\r\n this.mQuit = window.document.getElementById(\"quit-session\")!;\r\n this.mQuit.onclick = this.quitButtonSelected.bind(this);\r\n\r\n this.mCloseHint = window.document.getElementById(\"close-hint\")!;\r\n this.mKeyboardHintLabel = window.document.getElementById(\"keyboard-hint-label\")!;\r\n\r\n this.mVirtualKeyboard = new VirtualKeyboard(ui.runtime, this);\r\n\r\n // Disable Gamepad hints if no gamepad is connected\r\n if (!this.mIsGamepadConnected) {\r\n let elem = window.document.getElementById(\"osc-gamepad-hints\");\r\n if (elem) {\r\n elem.style.display = \"none\";\r\n }\r\n }\r\n }\r\n\r\n private hideOSC(e: MouseEvent) {\r\n this.hide();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n private handleOscKeyEvent(isDown: boolean, e: KeyboardEvent): void {\r\n if (isDown) {\r\n if (e.key === \"Escape\" || e.key === \"GoBack\") {\r\n // The \"B\" gamepad button on xbox-like controllers triggers \"GoBack\"\r\n if (this.mVirtualKeyboard.visible) {\r\n logger.info(`Got ${e.key} key. Hiding Virtual Keyboard`);\r\n this.toggleVirtualKeyboard();\r\n } else {\r\n logger.info(`Got ${e.key} key. Hiding OSC`);\r\n this.hide();\r\n }\r\n e.stopPropagation();\r\n e.preventDefault();\r\n } else if (e.key === \"ButtonY\" || (e.key == \"y\" && e.altKey)) {\r\n this.toggleVirtualKeyboard();\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n // Ignore Keyboard navigation if virtual keyboard button is not present\r\n // TODO: When we add more functionality to the OSC, hardcoding won't work anymore\r\n if (this.mKeyboardButton.style.display !== \"none\") {\r\n if (e.key === \"ArrowLeft\") {\r\n if (document.activeElement === this.mQuit) {\r\n this.mKeyboardButton.focus();\r\n }\r\n } else if (e.key === \"ArrowRight\") {\r\n if (document.activeElement === this.mKeyboardButton) {\r\n this.mQuit.focus();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public keyboardButtonSelected(e: MouseEvent | TouchEvent): void {\r\n logger.info(`OSC Keyboard Button ${e instanceof MouseEvent ? \"Clicked\": \"Touched\" }`);\r\n if (this.mIsGamepadConnected) {\r\n this.toggleVirtualKeyboard();\r\n } else if (this.mTouchOscEnabled) {\r\n // close OSC and invoke native virtual keyboard\r\n this.closeButtonClicked();\r\n this.mUI.runtime.onTextInput();\r\n }\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n public quitButtonSelected(e: MouseEvent | TouchEvent): void {\r\n logger.info(`OSC Quit Button ${e instanceof MouseEvent ? \"Clicked\": \"Touched\" }`);\r\n this.mUI.runtime.onQuitGame();\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n\r\n public closeButtonClicked(): void {\r\n this.hide();\r\n }\r\n\r\n public show(): void {\r\n logger.info(\"show OSC\");\r\n this.mMenuElem.style.display = \"flex\";\r\n this.restoreDefaultFocus();\r\n this.mUI.runtime.onShowOSC(true);\r\n }\r\n\r\n public hide(): void {\r\n logger.info(\"hide OSC\");\r\n this.mVirtualKeyboard.hide();\r\n this.mMenuElem.style.display = \"none\";\r\n this.mUI.runtime.onShowOSC(false);\r\n }\r\n\r\n public toggleVirtualKeyboard(): void {\r\n if (this.mVirtualKeyboard.visible) {\r\n this.mCloseHint.style.display = \"flex\";\r\n this.mKeyboardHintLabel.innerHTML = \"Show Keyboard\";\r\n this.mVirtualKeyboard.hide();\r\n this.restoreDefaultFocus();\r\n } else {\r\n this.mCloseHint.style.display = \"none\";\r\n this.mKeyboardHintLabel.innerHTML = \"Hide Keyboard\";\r\n this.mVirtualKeyboard.show();\r\n this.mVirtualKeyboard.focus();\r\n }\r\n }\r\n\r\n public onHideVirtualKeyboard(): void {\r\n this.restoreDefaultFocus();\r\n }\r\n\r\n public onFocusOut(e: FocusEvent): void {\r\n if (this.visible && !e.relatedTarget && !this.mTouchOscEnabled) {\r\n // Dismiss OSC if focus is lost\r\n // NOTE: This will not work on Safari as focusout event is not emitted there\r\n this.hide();\r\n } else {\r\n // Restores focus if the OSC is visible and focus is somehow lost\r\n if (e.relatedTarget !== this.mQuit && e.relatedTarget !== this.mKeyboardButton) {\r\n this.restoreDefaultFocus();\r\n }\r\n }\r\n }\r\n\r\n public onVirtualKeyboardHideActivated(): void {\r\n this.toggleVirtualKeyboard();\r\n }\r\n\r\n private restoreDefaultFocus(): void {\r\n if (this.mVirtualKeyboard.visible) {\r\n this.mVirtualKeyboard.focus();\r\n } else {\r\n if (this.mKeyboardButton.style.display !== \"none\") {\r\n this.mKeyboardButton.focus();\r\n } else {\r\n this.mQuit.focus();\r\n }\r\n }\r\n }\r\n\r\n private onVirtualKeyboardVisibilityChange(visible: boolean): void {\r\n logger.info(`onVirtualKeyboardVisibilityChange: visible=${visible}`);\r\n this.mIsKeyboardVisible = visible;\r\n }\r\n\r\n public onGamepadPress(button: GamepadButtonName) {\r\n if (!this.visible) {\r\n return;\r\n }\r\n\r\n switch (button) {\r\n case GamepadButtonName.DpadLeft:\r\n case GamepadButtonName.DpadRight:\r\n if (this.mKeyboardButton.style.display !== \"none\") {\r\n if (document.activeElement === this.mQuit) {\r\n this.mKeyboardButton.focus();\r\n } else {\r\n this.mQuit.focus();\r\n }\r\n }\r\n break;\r\n case GamepadButtonName.A:\r\n if (document.activeElement === this.mQuit) {\r\n logger.info(\"confirm selection to quit game\");\r\n this.mUI.runtime.onQuitGame();\r\n } else if (document.activeElement === this.mKeyboardButton) {\r\n logger.info(\"confirm selection to invoke keyboard\");\r\n if (this.mIsGamepadConnected) {\r\n this.toggleVirtualKeyboard();\r\n } else if (this.mTouchOscEnabled) {\r\n // close OSC and invoke native virtual keyboard\r\n this.closeButtonClicked();\r\n this.mUI.runtime.onTextInput();\r\n }\r\n }\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n static createSliderElement(id: string): HTMLElement {\r\n let existingElem = document.getElementById(id);\r\n if (existingElem) {\r\n return existingElem;\r\n }\r\n let elem = document.createElement(\"div\");\r\n elem.id = id;\r\n elem.innerText = \">\";\r\n return elem;\r\n }\r\n\r\n static createOscElement(id: string, imgSrc: string): HTMLElement {\r\n let existingElem = document.getElementById(id);\r\n if (existingElem) {\r\n return existingElem;\r\n }\r\n\r\n let containerElem = document.createElement(\"button\");\r\n containerElem.id = id;\r\n containerElem.classList.add(\"osc-hidden\");\r\n containerElem.classList.add(\"osc-top-bar-button\");\r\n containerElem.classList.add(\"mdc-icon-button\");\r\n containerElem.classList.add(\"osc-mdc-button-size\");\r\n\r\n let divElem = document.createElement(\"div\");\r\n divElem.classList.add(\"mdc-icon-button__ripple\");\r\n divElem.classList.add(\"osc-mdc-ripple-color\");\r\n\r\n let imgElem = document.createElement(\"img\");\r\n imgElem.classList.add(\"osc-top-bar-button-icon\");\r\n imgElem.src = imgSrc;\r\n\r\n containerElem.appendChild(divElem);\r\n containerElem.appendChild(imgElem);\r\n\r\n return containerElem;\r\n }\r\n\r\n static createTouchOsc(containerElem: HTMLElement, oscAssetsUrl: string): TouchOscElems {\r\n let toggleElem = OnScreenControl.createSliderElement(OSC_TOGGLE_ELEMENT_ID);\r\n let kbElem = OnScreenControl.createOscElement(OSC_KB_ELEMENT_ID, `${oscAssetsUrl}/keyboard.svg`);\r\n let quitElem = OnScreenControl.createOscElement(OSC_QUIT_ELEMENT_ID, `${oscAssetsUrl}/exit_to_app.svg`);\r\n let pasteElem = OnScreenControl.createOscElement(OSC_PASTE_ELEMENT_ID, `${oscAssetsUrl}/content_paste.svg`);\r\n\r\n // add all buttons to a container element (except toggle)\r\n let oscButtonsContainer = document.getElementById(OSC_BUTTONS_CONTAINER_ELEMENT_ID);\r\n if(!oscButtonsContainer) {\r\n oscButtonsContainer = document.createElement(\"div\");\r\n oscButtonsContainer.id = OSC_BUTTONS_CONTAINER_ELEMENT_ID;\r\n oscButtonsContainer.appendChild(pasteElem);\r\n oscButtonsContainer.appendChild(kbElem);\r\n oscButtonsContainer.appendChild(quitElem);\r\n oscButtonsContainer.appendChild(toggleElem);\r\n }\r\n containerElem.appendChild(oscButtonsContainer);\r\n\r\n return {\r\n containerElem: oscButtonsContainer,\r\n pasteElem: pasteElem,\r\n kbElem: kbElem,\r\n quitElem: quitElem,\r\n toggleElem: toggleElem,\r\n } as TouchOscElems;\r\n }\r\n}\r\n","import { Utils } from \"../../core/utils\";\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { OnScreenControl } from \"../../ui/on-screen-control\";\r\nimport { TouchOscElems } from \"../../ui/streamer-ui.types\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/touch-osc\");\r\n\r\nexport class StreamerTouchOsc {\r\n mTouchOsc: TouchOscElems | null = null;\r\n\r\n public toggle(event?: MouseEvent|TouchEvent|KeyboardEvent, showOsc?: boolean): void {\r\n if (this.mTouchOsc == null) {\r\n logger.error(\"display: Touch OSC not available\");\r\n return;\r\n }\r\n\r\n const oscButtons = [\r\n this.mTouchOsc.pasteElem,\r\n this.mTouchOsc.kbElem,\r\n this.mTouchOsc.quitElem\r\n ];\r\n\r\n const show: boolean = (showOsc === undefined)? this.mTouchOsc.toggleElem.innerText == \">\": showOsc;\r\n this.mTouchOsc.containerElem.style.transform = show? \"translateX(0px)\": `translateX(-${(oscButtons.length*50)+10}px)`;\r\n\r\n oscButtons.forEach((elem: HTMLElement) => {\r\n elem.classList.add(show? \"osc-visible\": \"osc-hidden\");\r\n elem.classList.remove(show? \"osc-hidden\": \"osc-visible\");\r\n });\r\n\r\n if (show) {\r\n this.mTouchOsc.containerElem.style.backgroundColor = \"rgba(41, 41, 41, 0.9)\";\r\n } else {\r\n this.mTouchOsc.containerElem.style.removeProperty(\"background-color\");\r\n }\r\n\r\n this.mTouchOsc.toggleElem.innerText = show? \"<\": \">\";\r\n event?.preventDefault();\r\n event?.stopPropagation();\r\n }\r\n\r\n public initialize(containerElem: HTMLElement, oscAssetsUrl: string) {\r\n Utils.dom.applyStylesheet(`${oscAssetsUrl}/streamer-osc.css`, \"streamer-osc\");\r\n Utils.dom.applyStylesheet(\"https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css\",\r\n \"material-components-stylesheet\");\r\n this.mTouchOsc = OnScreenControl.createTouchOsc(containerElem, oscAssetsUrl);\r\n this.mTouchOsc.toggleElem.onclick = this.toggle.bind(this);\r\n this.toggle(new MouseEvent(\"click\"), false);\r\n return this.mTouchOsc;\r\n }\r\n}\r\n","/* Copyright (c) 2024-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { Callback, Rect, Undefined } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { GestureHelperEvents, GestureType } from \"./gesture.types\";\r\n\r\ninterface TouchInfo {\r\n timestamp: number;\r\n clientX: number;\r\n clientY: number;\r\n}\r\n\r\nconst logger = Logging.getLogger(\"input/gesture-helper\");\r\n\r\n/** @internal **/\r\nexport class GestureHelper extends EventEmitter {\r\n private mHtmlElement: HTMLElement;\r\n private mHtmlElementPrevBounds: Rect = { x: 0, y: 0, width: 0, height: 0 };\r\n private mTouchStartMap = new Map();\r\n private mTouchMoveMap = new Map();\r\n private mGestureType: GestureType = GestureType.Tap;\r\n private mTouchStartHandler: Callback;\r\n private mTouchMoveHandler: Callback;\r\n private mTouchEndHandler: Callback;\r\n private mTouchCancelHandler: Callback;\r\n\r\n constructor(htmlElement: HTMLElement) {\r\n super();\r\n\r\n this.mHtmlElement = htmlElement;\r\n\r\n this.mTouchStartHandler = (e) => this.onTouchStart(e);\r\n this.mTouchMoveHandler = (e) => this.onTouchMove(e);\r\n this.mTouchEndHandler = (e) => this.onTouchEnd(e);\r\n this.mTouchCancelHandler = (e) => this.onTouchCancel(e);\r\n }\r\n\r\n public start(): void {\r\n this.mHtmlElementPrevBounds = GestureHelper.ToRectFromDOMRect(this.mHtmlElement.getBoundingClientRect());\r\n\r\n this.mHtmlElement.addEventListener(\"touchstart\", this.mTouchStartHandler);\r\n this.mHtmlElement.addEventListener(\"touchmove\", this.mTouchMoveHandler);\r\n this.mHtmlElement.addEventListener(\"touchend\", this.mTouchEndHandler);\r\n this.mHtmlElement.addEventListener(\"touchcancel\", this.mTouchCancelHandler);\r\n }\r\n\r\n public stop(): void {\r\n this.mHtmlElement.removeEventListener(\"touchstart\", this.mTouchStartHandler);\r\n this.mHtmlElement.removeEventListener(\"touchmove\", this.mTouchMoveHandler);\r\n this.mHtmlElement.removeEventListener(\"touchend\", this.mTouchEndHandler);\r\n this.mHtmlElement.removeEventListener(\"touchcancel\", this.mTouchCancelHandler);\r\n }\r\n\r\n private onTouchStart(event: TouchEvent): void {\r\n this.mGestureType = GestureType.Tap;\r\n\r\n event.preventDefault();\r\n\r\n for (let i: number = 0; i < event.changedTouches.length; i++) {\r\n const touch: Touch = event.changedTouches[i];\r\n\r\n this.mTouchStartMap.set(touch.identifier, {\r\n timestamp: event.timeStamp,\r\n clientX: touch.clientX,\r\n clientY: touch.clientY\r\n });\r\n }\r\n };\r\n\r\n private onTouchMove(event: TouchEvent): void {\r\n const pinchZoomed: boolean = this.hasHtmlElementBoundsChanged();\r\n\r\n event.preventDefault();\r\n\r\n // set gestureType to PinchZoom once touches includes pinchZoom touch.\r\n if (pinchZoomed) {\r\n this.mGestureType = GestureType.PinchZoom;\r\n }\r\n\r\n for (let i: number = 0; i < event.changedTouches.length; i++) {\r\n const touch: Touch = event.changedTouches[i];\r\n\r\n this.mTouchMoveMap.set(touch.identifier, {\r\n timestamp: event.timeStamp,\r\n clientX: touch.clientX,\r\n clientY: touch.clientY\r\n });\r\n }\r\n };\r\n\r\n private onTouchEnd(event: TouchEvent): void {\r\n event.preventDefault();\r\n\r\n for (let i: number = 0; i < event.changedTouches.length; i++) {\r\n const touch: Touch = event.changedTouches[i];\r\n\r\n if (this.mGestureType !== GestureType.PinchZoom) {\r\n // Check long press only when gesture is not pinch-zoom\r\n if (this.isLongPress(touch.identifier, event.timeStamp, touch)) {\r\n this.mGestureType = GestureType.LongPress;\r\n }\r\n }\r\n\r\n this.mTouchStartMap.delete(touch.identifier);\r\n this.mTouchMoveMap.delete(touch.identifier);\r\n\r\n logger.verbose(`Gesture: ${this.mGestureType} (${touch.clientX}, ${touch.clientY})`);\r\n\r\n this.emit(\"gesture\", {\r\n gestureType: this.mGestureType,\r\n touchX: touch.clientX,\r\n touchY: touch.clientY\r\n });\r\n }\r\n };\r\n\r\n private onTouchCancel(event: TouchEvent): void {\r\n event.preventDefault();\r\n\r\n for (let i: number = 0; i < event.changedTouches.length; i++) {\r\n const touch: Touch = event.changedTouches[i];\r\n this.mTouchStartMap.delete(touch.identifier);\r\n this.mTouchMoveMap.delete(touch.identifier);\r\n }\r\n };\r\n\r\n private hasHtmlElementBoundsChanged(): boolean {\r\n const currentRect: Rect = GestureHelper.ToRectFromDOMRect(this.mHtmlElement.getBoundingClientRect());\r\n const hasBoundsChanged =\r\n currentRect.x !== this.mHtmlElementPrevBounds.x ||\r\n currentRect.y !== this.mHtmlElementPrevBounds.y ||\r\n currentRect.width !== this.mHtmlElementPrevBounds.width ||\r\n currentRect.height !== this.mHtmlElementPrevBounds.height;\r\n\r\n this.mHtmlElementPrevBounds = { ...currentRect };\r\n\r\n return hasBoundsChanged;\r\n }\r\n\r\n private isLongPress(touchEndId: number, touchEndTimestamp: number, touchEnd: Touch): boolean {\r\n const touchStartInfo: Undefined = this.mTouchStartMap.get(touchEndId);\r\n const touchMoveInfo: Undefined = this.mTouchMoveMap.get(touchEndId);\r\n const touchEndInfo: TouchInfo = {\r\n timestamp: touchEndTimestamp,\r\n clientX: touchEnd.clientX,\r\n clientY: touchEnd.clientY\r\n };\r\n const moveThreshold: number = 10;\r\n const moveX: number = Math.abs((touchStartInfo ? touchStartInfo.clientX : touchEndInfo.clientX) - touchEndInfo.clientX);\r\n const moveY: number = Math.abs((touchStartInfo ? touchStartInfo.clientY : touchEndInfo.clientY) - touchEndInfo.clientY);\r\n const inMovementTolerance: boolean = moveX < moveThreshold && moveY < moveThreshold;\r\n\r\n if (touchMoveInfo && !inMovementTolerance) {\r\n return (GestureHelper.IsTouchInLongPressThreshold(touchStartInfo ?? touchMoveInfo, touchMoveInfo, true) &&\r\n GestureHelper.IsTouchInLongPressThreshold(touchMoveInfo, touchEndInfo, true));\r\n } else\r\n\r\n return GestureHelper.IsTouchInLongPressThreshold(touchStartInfo ?? touchEndInfo, touchEndInfo, false);\r\n }\r\n\r\n private static IsTouchInLongPressThreshold(firstTouchInfo: TouchInfo, secondTouchInfo: TouchInfo, isMoved: boolean): boolean {\r\n // If touch contains move, the lower bound should be smaller in each interval as we only record last touchmove.\r\n const timestampLowerBound: number = isMoved ? 10 : 500;\r\n // Finger is not moved a lot but just the touch surface changed by finger angles.\r\n const interval: number = secondTouchInfo.timestamp - firstTouchInfo.timestamp;\r\n\r\n return (interval >= timestampLowerBound);\r\n }\r\n\r\n private static ToRectFromDOMRect(rect: DOMRect): Rect {\r\n return {\r\n x: rect.left,\r\n y: rect.top,\r\n width: rect.width,\r\n height: rect.height\r\n }\r\n }\r\n}\r\n\r\n","/* Copyright (c) 2020-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Configuration } from \"../../configuration/configuration\";\r\nimport { BrowserPermissionName, IInitializable, Nullable } from \"../../core/util.types\";\r\nimport { Device } from \"../../device/device\";\r\nimport { DeviceOS } from \"../../device/device.types\";\r\nimport { I18N } from \"../../i18n/i18n\";\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { RemoteLogger } from \"../../logging/remote-logger\"\r\nimport { Streamer } from \"../streamer\";\r\nimport { StreamerTerminationReason, StreamerState, StreamerDiagnosticLevel, StreamerWarningCode, SessionSetupProgress, StreamerMicrophoneState, EditBoxZone, VideoBounds } from \"../streamer.types\";\r\nimport { WebStreamerConfiguration } from \"./web-streamer.types\";\r\nimport { IInitializeContext } from \"../../api.types\";\r\nimport { CHANGELIST, GS_EVENTS, SessionState, SessionParams } from \"@gamestream-stable/gridserver\";\r\nimport * as GS from \"@gamestream-stable/ragnarok\";\r\nimport RagnarokPackageJson from \"@gamestream-stable/ragnarok/package.json\"\r\nimport { Entitlement } from \"../../entitlement/entitlement\";\r\nimport { Auth } from \"../../idm/auth\";\r\nimport { Catalog } from \"../../catalog/catalog\";\r\nimport { Utils } from \"../../core/utils\";\r\nimport { ClickType, InputType, ITelemetry } from \"../../telemetry/telemetry.types\";\r\nimport { APIErrorCode } from \"../../api-error.types\";\r\nimport { APIError } from \"../../api-error\";\r\nimport { Message, MessageHandler } from \"../../core/message-handler\";\r\nimport { MockRagnarok } from \"../mock/mock-ragnarok\";\r\nimport { MockRagnarokInitParams } from \"../mock/mock-ragnarok.types\";\r\nimport { MapRagnarokErrorCodeToReason } from \"../streamer-errors-ragnarok\";\r\nimport { ErrorDetails } from \"@gamestream-stable/ragnarok/dist/rtcutils-core/src/interfaces\";\r\nimport { Feedback } from \"../../telemetry/feedback\";\r\nimport { OnScreenControl } from \"../../ui/on-screen-control\";\r\nimport { PlatformID } from \"../../platform/platform.types\";\r\nimport { EntitlementUtils } from \"../../entitlement/entitlement-utils\";\r\nimport { SubscriptionFeatureMetadata } from \"../../entitlement/entitlement.entities\";\r\nimport { User } from \"../../idm/user\";\r\nimport { GamepadHandler } from \"../../input/gamepad-handler\";\r\nimport { GamepadButtonName } from \"../../input/gamepad-handler.types\";\r\nimport { NetworkTest } from \"../../networktest/network-test\";\r\nimport { Zone } from \"../../server/server.types\";\r\nimport { GuestMode } from \"../../guestmode/guestmode\";\r\nimport { StreamerTouchOsc } from \"./web-streamer-touch-osc\";\r\nimport { TouchOscElems } from \"../../ui/streamer-ui.types\";\r\nimport { StreamerUI } from \"../../ui/streamer-ui\";\r\nimport { UrlClickData } from \"../custom-message.types\";\r\nimport { CloudVariableService } from \"../../gxtarget/cloud-variable-service\";\r\nimport { CloudFeatureConfigs } from \"../../gxtarget/cloud-feature-configs\";\r\nimport { GestureHelper } from \"../../input/gesture-helper\";\r\nimport { EditableRegion } from \"../editable-region\";\r\n\r\n\r\nconst ELEMENT_ID_VIDEO = \"gfn-stream-player-video\";\r\nconst ELEMENT_ID_AUDIO = \"gfn-stream-player-audio\";\r\nconst ELEMENT_ID_CONTAINER = \"gfn-stream-player-container\";\r\nconst ELEMENT_ID_VIDEO_CONTAINER = \"gfn-stream-player-video-container\";\r\nconst ELEMENT_ID_UI = \"gfn-stream-player-ui\";\r\nconst ELEMENT_ID_TEXT_INPUT = \"gfn-stream-text-input\";\r\n\r\nconst logger = Logging.getLogger(\"streamer/web-streamer\");\r\n\r\n// TODO: should define custom HTML element for the video/audio player\r\n// https://github.com/WICG/webcomponents\r\n\r\n/** @internal **/\r\nexport class WebStreamer extends Streamer implements IInitializable {\r\n private mGridApp: Nullable = null;\r\n private mRagnarokGridApp: Nullable = null;\r\n private mMockGridApp: Nullable = null;\r\n private mRuntimeMessageHandler: Nullable = null;\r\n private mSessionParams: Nullable = null;\r\n private mContainerElement: Nullable = null;;\r\n private mVideoContainerElement?: HTMLElement;\r\n private mAudioElement?: HTMLAudioElement;\r\n private mVideoElement?: HTMLVideoElement;\r\n private mStreamerUIElement: Nullable = null;\r\n private mWindowedStreamerContainerElement : Nullable = null;\r\n private mTextInputElement?: HTMLInputElement;\r\n private mActiveDialogsCount: number = 0;\r\n private mPlatformDetails: Nullable = null;\r\n private mGamepadHandler: GamepadHandler;\r\n private mTouchOscHandler: StreamerTouchOsc = new StreamerTouchOsc();\r\n private mTouchOscElems: Nullable = null;\r\n private mFeatureConfigSvc: CloudFeatureConfigs;\r\n private mGestureHelper: Nullable;\r\n private mAvailableScreenHeight: number = 0;\r\n\r\n protected get IsDialogOpen(): boolean {\r\n return this.mActiveDialogsCount > 0;\r\n }\r\n\r\n protected get defaultConfiguration(): WebStreamerConfiguration {\r\n return this.mConfiguration.streamer.web;\r\n }\r\n\r\n protected get defaultConfigurationOverrides(): Nullable {\r\n if (this.mSettings.configOverrides.streamer?.web) {\r\n return this.mSettings.configOverrides.streamer?.web;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private get isWindowMode() {\r\n return this.mWindowedStreamerContainerElement !== null;\r\n }\r\n\r\n private get isTouchOscEnabled() {\r\n return this.mConfiguration.sdk.enableTouchOsc && this.mDevice.isMobileTouch;\r\n }\r\n\r\n private get isClipboardPasteEnabled(): boolean {\r\n if(this.mStartParameters?.disableClipboardPaste != undefined) {\r\n return !this.mStartParameters?.disableClipboardPaste;\r\n }\r\n else if (this.mGuestMode.isGuestMode) {\r\n return this.mGuestMode.config.igoSettings?.pasteDefaultOn ?? this.mFeatureConfigSvc.clipboardPasteConfig.isEnabled;\r\n }\r\n return this.mFeatureConfigSvc.clipboardPasteConfig.isEnabled;\r\n }\r\n\r\n private get requiresPasteDialog(): boolean {\r\n return (this.mPlatformDetails?.os == GS.PlatformName.IOS)\r\n || (this.mPlatformDetails?.os == GS.PlatformName.IPADOS)\r\n || ((this.mPlatformDetails?.os == GS.PlatformName.MAC) && (this.mPlatformDetails?.browser == GS.BrowserName.SAFARI))\r\n }\r\n\r\n constructor(config: Configuration, device: Device, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, telemetry: ITelemetry, feedback: Feedback, remoteLogger: RemoteLogger, networkTest: NetworkTest, guestMode: GuestMode, gpHandler: GamepadHandler, featureConfigSvc: CloudFeatureConfigs) {\r\n super(config, device, i18n, entitlement, auth, catalog, null, telemetry, feedback, remoteLogger, networkTest, guestMode);\r\n\r\n this.mLibName = \"Ragnarok\";\r\n this.mLibVersion = RagnarokPackageJson.version;\r\n this.mLibVersionTag = CHANGELIST;\r\n this.mGamepadHandler = gpHandler;\r\n this.mFeatureConfigSvc = featureConfigSvc;\r\n this.mGestureHelper = null;\r\n }\r\n\r\n public async initialize(ctx: IInitializeContext): Promise {\r\n await super.initialize(ctx);\r\n\r\n this.mPlatformDetails = await GS.getPlatformDetails();\r\n this.mAvailableScreenHeight = window.innerHeight;\r\n\r\n return Promise.resolve();\r\n }\r\n\r\n protected SetDialogOpen(): void {\r\n this.mActiveDialogsCount += 1;\r\n this.focusStreamerUI();\r\n }\r\n\r\n protected SetDialogClose(): void {\r\n this.mActiveDialogsCount = Math.min(0, this.mActiveDialogsCount - 1);\r\n if (this.mActiveDialogsCount == 0) {\r\n this.focusStreamer();\r\n }\r\n }\r\n\r\n protected async initializeGridServer(serverUrl: string, isMockStreamer: boolean): Promise {\r\n if (!this.mPlatformDetails) {\r\n throw new APIError(APIErrorCode.SDKIsNotInitialized);\r\n }\r\n\r\n // create grid app only once, but re-registered listeners every time as they are removed after each session.\r\n // GridApp has no \"uninitialize\" function, so keeping it alive between sessions, and just choosing the\r\n // correct app here.\r\n if (isMockStreamer) {\r\n if (!this.mMockGridApp) {\r\n this.mMockGridApp = new MockRagnarok(this.mPlatformDetails);\r\n }\r\n\r\n this.addListeners(this.mMockGridApp);\r\n } else {\r\n if (!this.mRagnarokGridApp) {\r\n var isInternalUser: boolean = false;\r\n if (this.mUserSubscription) {\r\n isInternalUser = EntitlementUtils.IsFeatureAvailable(this.mUserSubscription.subscription, SubscriptionFeatureMetadata.ENABLE_DEBUG_TOOLS);\r\n }\r\n const ragnarokRemoteConfigData: GS.RemoteConfigData = this.mConfiguration.streamer.web.ragnarokConfigData.remoteConfigData;\r\n if (Object.keys(ragnarokRemoteConfigData).length > 0 || isInternalUser) {\r\n var configData: GS.RagnarokConfigData = {\r\n remoteConfigData: {...ragnarokRemoteConfigData}\r\n };\r\n configData.isInternalUser = isInternalUser;\r\n GS.ConfigureRagnarokSettings(configData);\r\n }\r\n this.mRagnarokGridApp = new GS.GridApp(this.mPlatformDetails);\r\n this.updateEventDataElements();\r\n this.mTelemetry.registerEventDataUpdateCallback(this.updateEventDataElements.bind(this));\r\n }\r\n\r\n this.addListeners(this.mRagnarokGridApp);\r\n }\r\n\r\n this.mGridApp = !isMockStreamer ? this.mRagnarokGridApp : this.mMockGridApp;\r\n\r\n const user: Nullable = this.mAuth.currentUser;\r\n if (!user) {\r\n throw new APIError(APIErrorCode.UserNotAuthorized);\r\n }\r\n\r\n if (!user.isLoggedIn) {\r\n throw new APIError(APIErrorCode.UserNotLoggedIn);\r\n }\r\n\r\n this.mWindowedStreamerContainerElement = this.getWindowStreamerContainerElement();\r\n this.mContainerElement = WebStreamer.GetOrCreateStreamContainerElement(this.mWindowedStreamerContainerElement);\r\n [this.mVideoElement, this.mVideoContainerElement] = WebStreamer.GetOrCreateVideoElement(this.mContainerElement, this.mWindowedStreamerContainerElement);\r\n this.mGestureHelper = new GestureHelper(this.mVideoElement);\r\n this.mGestureHelper.on(\"gesture\", this.onGesture.bind(this));\r\n this.mAudioElement = WebStreamer.GetOrCreateAudioElement(this.mContainerElement);\r\n this.mTextInputElement = WebStreamer.GetOrCreateTextInputElement(this.mContainerElement);\r\n if (this.isTouchOscEnabled) {\r\n this.mTouchOscElems = this.mTouchOscHandler.initialize(this.mContainerElement, Streamer.GetOscAssetsUrl(this.mConfiguration));\r\n this.mTouchOscElems.kbElem.onclick = this.onTextInput.bind(this);\r\n this.mTouchOscElems.quitElem.onclick = this.onMessageQuitGame.bind(this);\r\n this.mTouchOscElems.pasteElem.onclick = this.onMessagePasteText.bind(this);\r\n }\r\n\r\n this.mVideoElement.onplay = this.onVideoPlay.bind(this);\r\n\r\n this.mContainerElement.onfullscreenchange = this.onFullScreenChangeEvent.bind(this);\r\n\r\n if (this.isWindowMode) {\r\n this.mContainerElement.onmouseleave = this.toggleUserInput.bind(this, false);\r\n this.mContainerElement.onmouseenter = this.toggleUserInput.bind(this, true);\r\n }\r\n\r\n let initParams: GS.InitParams = {\r\n clientId: this.mSettings.catalogClientId,\r\n clientType: GS.ClientType.GFNSDK,\r\n clientIdentification: Streamer.ClientIdentification,\r\n clientVersion: GS.CLIENT_VERSION,\r\n clientAppVersion: this.mSdkVersion.version,\r\n deviceHashId: this.mDevice.id,\r\n serverAddress: serverUrl,\r\n textInputElement: this.mTextInputElement,\r\n authTokenCallback: async (_: any) => {\r\n if (this.mAuth.authorizedUser && this.mAuth.authorizedUser.isLoggedIn) {\r\n return this.mAuth.authorizedUser.authInfo?.idToken.value;\r\n }\r\n\r\n return \"\";\r\n }\r\n };\r\n\r\n if (this.mStartParameters?.mockParams?.enabled) {\r\n const mockInitParams = initParams as MockRagnarokInitParams;\r\n mockInitParams.mock = this.mStartParameters.mockParams?.session || {};\r\n initParams = mockInitParams;\r\n }\r\n\r\n let inputConfigFlags: GS.InputConfigFlags = GS.defaultInputConfigFlags;\r\n\r\n if (this.mWindowedStreamerContainerElement) {\r\n let cursorType: GS.CursorType = GS.CursorType.HARDWARE;\r\n\r\n if (this.mGuestMode.isGuestMode && this.mGuestMode.config.isWindowedModeCursorTypeFree) {\r\n cursorType = GS.CursorType.FREE;\r\n }\r\n\r\n if (this.mStartParameters?.disableHwCursorInWindowedMode) {\r\n cursorType = GS.CursorType.FREE;\r\n } else if (this.mConfiguration.streamer.defaultCursorTypeInWindowedMode) {\r\n switch (this.mConfiguration.streamer.defaultCursorTypeInWindowedMode) {\r\n case \"software\": cursorType = GS.CursorType.SOFTWARE; break;\r\n case \"hardware\": cursorType = GS.CursorType.HARDWARE; break;\r\n case \"free\": cursorType = GS.CursorType.FREE; break;\r\n }\r\n }\r\n\r\n inputConfigFlags = {\r\n ...GS.defaultInputConfigFlags,\r\n cursorType: cursorType,\r\n windowedStreaming: true,\r\n };\r\n }\r\n\r\n if (!this.mGridApp!.initialize(initParams, inputConfigFlags)) {\r\n throw new APIError(APIErrorCode.StreamingSessionSetupFailed);\r\n }\r\n\r\n this.mGridApp!.setAuthInfo(Streamer.GetAuthInfo(this.mAuth.currentUser) as any as GS.AuthInfo);\r\n\r\n logger.info(\"Web streamer init complete\");\r\n }\r\n\r\n /** @internal **/\r\n private toggleUserInput(enable: boolean) {\r\n this.mGridApp!.toggleUserInput(enable, GS.InputType.All);\r\n }\r\n\r\n /** @internal **/\r\n protected doStreamingSupportCheck(): boolean {\r\n if (!this.mPlatformDetails) {\r\n throw new APIError(APIErrorCode.SDKIsNotInitialized);\r\n }\r\n\r\n return GS.IsFeatureSupported(GS.BrowserFeature.Streaming, this.mPlatformDetails);\r\n }\r\n\r\n /** @internal **/\r\n protected async doCreateSession(sessionParams: SessionParams): Promise {\r\n // session creation happens in gridapp during the start call - here all\r\n // we want to do is map the parameters from the Grid Server type to the\r\n // Ragnarok type (which could different if the versions are not the same)\r\n this.mSessionParams = {\r\n ...Utils.object.map(sessionParams, (v: any) => v)\r\n }\r\n\r\n // only web streamer uses video/audio tags\r\n this.mSessionParams!.streamParams![0].videoTagId = ELEMENT_ID_VIDEO;\r\n this.mSessionParams!.streamParams![0].audioTagId = ELEMENT_ID_AUDIO;\r\n }\r\n\r\n protected addListeners(gridApp: GS.GridApp): void {\r\n // These are session events that normally come from the standalone gridserver. In this case they get routed\r\n // through ragnarok first\r\n gridApp.addListener(GS_EVENTS.ACTIVE_SESSIONS_RESULT, this.onGsActiveSessionsResult.bind(this));\r\n gridApp.addListener(GS_EVENTS.LOG_EVENT, this.onGsLogEvent.bind(this));\r\n gridApp.addListener(GS_EVENTS.PROGRESS_UPDATE, this.onGsProgressUpdate.bind(this));\r\n gridApp.addListener(GS_EVENTS.TELEMETRY_EVENT, this.onGsTelemetryEvent.bind(this));\r\n\r\n gridApp.addListener(GS.EVENTS.SESSION_START_RESULT, this.onGameStreamSessionStartResult.bind(this));\r\n gridApp.addListener(GS.EVENTS.SESSION_STOP_RESULT, this.onGameStreamSessionStopResult.bind(this));\r\n gridApp.addListener(GS.EVENTS.STREAMING_EVENT, this.onGameStreamStreamingEvent.bind(this));\r\n gridApp.addListener(GS.EVENTS.STREAM_STOPPED, this.onGameStreamStreamStopped.bind(this));\r\n gridApp.addListener(GS.EVENTS.STREAMING_QUALITY, this.onGameStreamStreamingQualityChanged.bind(this));\r\n gridApp.addListener(GS.EVENTS.CUSTOM_MESSAGE, this.onGameStreamCustomMessage.bind(this));\r\n gridApp.addListener(GS.EVENTS.STREAM_STATS_UPDATE, this.onGameStreamStatsUpdate.bind(this));\r\n gridApp.addListener(GS.EVENTS.MIC_CAPTURE, this.onGameStreamMicCapture.bind(this));\r\n }\r\n\r\n public updateEventDataElements(): void {\r\n logger.info(\"Update Event Data Elements\");\r\n var eventDataElements = this.mTelemetry.eventDataElements;\r\n eventDataElements.telemetryEventIds.streamingProfileGuid = this.mSession?.streamingProfileTelemetryId;\r\n this.mRagnarokGridApp?.updateEventDataElements(eventDataElements);\r\n }\r\n\r\n protected doToggleOsc(keyboardVisible: boolean): void {\r\n if (this.isTouchOscEnabled) {\r\n this.mTouchOscHandler.toggle();\r\n this.doToggleKeyboard(keyboardVisible);\r\n } else {\r\n this.focusStreamerUI();\r\n this.mRuntimeMessageHandler?.postMessage(\"toggleOSC\");\r\n }\r\n }\r\n\r\n protected doToggleKeyboard(visible: boolean): void {\r\n if (this.isTouchOscEnabled) {\r\n if (visible) {\r\n this.onTextInput();\r\n } else {\r\n if (this.mTextInputElement) {\r\n this.mTextInputElement.blur();\r\n }\r\n\r\n this.focusStreamer();\r\n }\r\n } else {\r\n logger.warn(\"Virtual keyboard toggle is not supported on this platform.\");\r\n }\r\n }\r\n\r\n protected doStartStream(isResume: boolean): void {\r\n if (!this.mVideoContainerElement || !this.mAudioElement) {\r\n throw new Error(\"Unable to start the stream. The video/audio elements are not setup.\");\r\n }\r\n this.updateEventDataElements();\r\n\r\n try {\r\n if (isResume) {\r\n this.mGridApp!.resumeSession(this.mSessionParams!, this.sessionId);\r\n } else {\r\n this.mGridApp!.startSession(this.mSessionParams!);\r\n }\r\n }\r\n catch (e: any) {\r\n this.handleSetupSessionError(e);\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected async deleteSession(sessionId: string): Promise {\r\n if (this.mGridApp) {\r\n try {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `deleting web session ${sessionId} from server...`);\r\n\r\n const p = new Promise((res) => this.mGridApp?.addListener(GS.EVENTS.SESSION_STOP_RESULT, res));\r\n this.mGridApp.stopSession(sessionId, GS.RErrorCode.Success);\r\n return p;\r\n } catch(e: any) {\r\n logger.error(e);\r\n }\r\n }\r\n }\r\n\r\n protected doStopStream(): void {\r\n if (this.mGridApp && this.mSession) {\r\n try {\r\n const existingSessionId: string = this.mSession ? this.mSession.sessionId : \"\";\r\n if (existingSessionId) {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `deleting session ${existingSessionId} from server...`);\r\n this.mGridApp.stopSession(existingSessionId, GS.RErrorCode.Success);\r\n } else {\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, \"deleting session with unknown id from server...\");\r\n this.mGridApp.stopSession(undefined, GS.RErrorCode.Success);\r\n }\r\n } catch (e: any) {\r\n // this.handleError(e);\r\n logger.error(e);\r\n }\r\n }\r\n }\r\n\r\n protected doCancelSessionSetup(): void {\r\n // stop stream will also cancel if the session is not yet setup\r\n this.doStopStream();\r\n }\r\n protected doSendCustomMessage(message: string, messageType: string, messageRecipient: string): void {\r\n const msg: GS.CustomMessage = {\r\n messageType: messageType,\r\n messageRecipient: messageRecipient,\r\n data: message\r\n };\r\n this.mGridApp?.sendCustomMessage(msg);\r\n }\r\n\r\n protected async doOpenLink(urlData: UrlClickData): Promise {\r\n let w: Nullable = null;\r\n const status = Utils.device.getUserActivationStatus();\r\n\r\n // Don't attempt to open a link unless the activation status is current.\r\n // This avoids the \"popup blocked\" message from browsers\r\n if (status.isActive) {\r\n w = window.open(urlData.url, \"_blank\");\r\n if (!w) {\r\n logger.error(`Open Link unexpectedly failed with user activation status isActive=${status.isActive}`)\r\n }\r\n }\r\n\r\n if (!w) {\r\n logger.info(\"Requesting for interaction via dialog in order to open link.\");\r\n const response: any = await this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"askDialog\", {\r\n msgKey: \"openLink.redirectBody\",\r\n affirmLabelKey: \"common.continue\",\r\n denyLabelKey: \"common.cancel\"\r\n });\r\n\r\n if (response.action === \"affirm\") {\r\n w = window.open(urlData.url, \"_blank\");\r\n if (!w) {\r\n logger.error(\"Open Link unexpectedly failed again after user interaction\");\r\n }\r\n }\r\n }\r\n\r\n if (w) {\r\n w.focus()\r\n const url = new URL(urlData.url);\r\n this.mTelemetry.sendClickEvent(ClickType.ClickedUrl, InputType.InGame, this.mAppData?.title + \": \" + url.hostname)\r\n return true;\r\n } else {\r\n logger.error(\"Failed to open link.\")\r\n return false;\r\n }\r\n }\r\n\r\n protected doSendKeyboardEvent(event: KeyboardEvent) : void {\r\n this.mGridApp?.sendKeyEvent(event);\r\n }\r\n\r\n protected finish(terminationReason: StreamerTerminationReason, errorCode?: number): void {\r\n this.mGridApp?.removeAllListeners();\r\n this.mGamepadHandler.stop();\r\n this.mGestureHelper?.stop();\r\n if (this.mRuntimeMessageHandler) {\r\n this.mRuntimeMessageHandler!.cleanup();\r\n this.mRuntimeMessageHandler = null;\r\n }\r\n if (this.mStreamerUIElement) {\r\n this.mStreamerUIElement.remove();\r\n this.mStreamerUIElement = null;\r\n }\r\n if (this.mContainerElement) {\r\n this.mContainerElement.remove();\r\n this.mContainerElement = null;\r\n }\r\n if (this.mWindowedStreamerContainerElement) {\r\n // Do not remove as this element is defined and owned by client\r\n this.mWindowedStreamerContainerElement = null;\r\n }\r\n\r\n Utils.dom.restoreContextMenu();\r\n Utils.dom.restoreDevTools();\r\n\r\n super.finish(terminationReason, errorCode);\r\n }\r\n\r\n private focusStreamer() {\r\n if (this.IsDialogOpen) {\r\n logger.info(`skip focus on Streamer (${this.mActiveDialogsCount} active dialogs)`);\r\n return;\r\n }\r\n if (this.mVideoContainerElement && this.mStreamerUIElement) {\r\n document.getElementById(ELEMENT_ID_VIDEO)?.focus();\r\n this.mStreamerUIElement.style.pointerEvents = \"none\";\r\n this.mGridApp?.toggleUserInput(true, GS.InputType.All);\r\n }\r\n }\r\n\r\n private focusStreamerUI() {\r\n if (this.mStreamerUIElement) {\r\n this.mStreamerUIElement.focus();\r\n this.mStreamerUIElement.style.pointerEvents = \"auto\";\r\n this.mGridApp?.toggleUserInput(false, GS.InputType.All);\r\n }\r\n }\r\n\r\n private onVideoPlay(): void {\r\n logger.info(`onVideoPlay: muted=${this.mVideoElement?.muted}, paused=${this.mVideoElement?.paused}, audioElementPaused=${this.mAudioElement?.paused}`);\r\n }\r\n\r\n private onGameStreamSessionStartResult(e: GS.StartSessionResultEvent): void {\r\n if (e.error) {\r\n logger.error(`onGameStreamSessionStartResult error=${Utils.string.hex(e.error.code, 8)}:${e.error.description}`);\r\n this.handleSetupSessionError(e.error);\r\n } else {\r\n logger.info(`onGameStreamSessionStartResult sessionId=${e.sessionId}, gpu=${e.gpuType}`);\r\n\r\n if (!this.mSession) {\r\n throw new APIError(APIErrorCode.StreamingSessionSetupFailed, \"The session object is null.\");\r\n }\r\n\r\n if (e.streamInfo && e.streamInfo.length > 0) {\r\n const stream: GS.StreamInfo = e.streamInfo[0];\r\n logger.info(`Connected stream info: ${stream.width}x${stream.height} @ ${stream.fps}fps`);\r\n }\r\n\r\n this.mSession.sessionId = e.sessionId;\r\n this.mSession.subSessionId = e.subSessionId;\r\n this.mSession.gpuType = e.gpuType;\r\n this.mSession.connectionInfo = undefined;\r\n this.mSession.streamInfo = undefined;\r\n\r\n if (e.sessionList && e.sessionList.length > 0) {\r\n this.mSession.status = Streamer.GetSessionStatusFromGsState(e.sessionList[0].state as SessionState);\r\n }\r\n\r\n this.mSession.zone = {\r\n name: e.zoneName,\r\n address: e.zoneAddress\r\n };\r\n\r\n this.dispatchDiagnosticEvent(StreamerDiagnosticLevel.Debug, `session '${this.mSession.sessionId}' is ready to stream. zone=${this.mSession.zone.name} (${this.mSession.zone.address})`);\r\n\r\n this.emit(\"connected\");\r\n this.updateState(StreamerState.Streaming);\r\n\r\n if (!this.mContainerElement) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Streamer container element not found\");\r\n }\r\n this.mStreamerUIElement = this.GetOrCreateStreamerUIElement(this.mConfiguration, this.mContainerElement!);\r\n this.mRemoteLogger.reset(this.mSession?.sessionId ?? \"\", [this.mSession?.subSessionId ?? \"\"]);\r\n\r\n this.mRuntimeMessageHandler = new MessageHandler(window, this.mStreamerUIElement.contentWindow!, Utils.getScriptOrigin());\r\n this.mRuntimeMessageHandler.register(\"onIntroFinished\", this.onMessageIntroFinished.bind(this));\r\n this.mRuntimeMessageHandler.register(\"getUiDataJson\", this.onMessageGetUIDataJSON.bind(this));\r\n this.mRuntimeMessageHandler.register(\"onInitializeFinished\", this.onMessageInitializeFinished.bind(this));\r\n this.mRuntimeMessageHandler.register(\"quitGame\", this.onMessageQuitGame.bind(this));\r\n this.mRuntimeMessageHandler.register(\"hideOSC\", this.onMessageHideOSC.bind(this));\r\n this.mRuntimeMessageHandler.register(\"textInput\", this.onTextInput.bind(this));\r\n this.mStreamerUIElement.onload = () => {\r\n this.mRuntimeMessageHandler?.postMessage(\"initialize\", JSON.stringify(this.mSettings));\r\n };\r\n\r\n if (this.mGridApp!.isMicSupported()) {\r\n this.mGridApp!.setMicRecordingEnabled(this.defaultConfiguration.enableMicrophone && !this.mStartParameters?.disableMicrophone);\r\n }\r\n this.mGridApp!.setDrcDfcState(this.mSession.isDynamicResolutionChangeEnabled);\r\n\r\n document.addEventListener(\"fullscreenchange\", () => {\r\n this.updateEditableRegions(200);\r\n });\r\n\r\n window.addEventListener(\"resize\", Utils.debounce(() => {\r\n this.updateEditableRegions(200);\r\n }, 100));\r\n\r\n const vp: Nullable = window.visualViewport;\r\n\r\n if (vp) {\r\n vp.addEventListener(\"resize\", () => {\r\n this.mAvailableScreenHeight = vp.height;\r\n this.updateEditableRegions(200);\r\n this.doAdjustVideoOffsetForActionRegion(this.getActionRegion());\r\n });\r\n }\r\n\r\n // log permissions\r\n [\"clipboard-read\", \"microphone\", \"notifications\"].forEach(permissionName => {\r\n Utils.device.getBrowserPermissionStatus(permissionName as BrowserPermissionName).then((isGranted) => {\r\n logger.info(`${permissionName} permission granted: ${isGranted}`);\r\n }).catch((error) => {\r\n logger.warn(error);\r\n });\r\n });\r\n\r\n this.emit(\"started\");\r\n }\r\n }\r\n\r\n private onGameStreamSessionStopResult(e: GS.StopSessionResultEvent): void {\r\n const stoppedSessionId = e.sessionId || \"\";\r\n logger.info(`onGameStreamSessionStopResult: sessionId=${stoppedSessionId}, error=${e.error}`);\r\n this.handleStreamStopped(stoppedSessionId, e.error);\r\n }\r\n\r\n private onGameStreamStreamingEvent(e: GS.StreamingEvent): void {\r\n if (e.streamingWarnings) {\r\n this.mRuntimeMessageHandler?.postMessage(\"warn\", {\r\n code: WebStreamer.StreamWarningCodeFromGs(e.streamingWarnings.code),\r\n secondsRemaining: e.streamingWarnings.secondsLeft\r\n });\r\n }\r\n }\r\n\r\n private onGameStreamStreamStopped(e: GS.StreamingTerminatedEvent): void {\r\n logger.info(\"onGameStreamStreamStopped\");\r\n const stoppedSessionId = e.sessionId || \"\";\r\n this.handleStreamStopped(stoppedSessionId, e.error);\r\n }\r\n\r\n private onGameStreamStreamingQualityChanged(e: GS.StreamingQuality): void {\r\n this.onQualityScoreChanged(e.qualityScore);\r\n }\r\n\r\n protected mapErrorCodeToReason(code: number): StreamerTerminationReason {\r\n return MapRagnarokErrorCodeToReason(code);\r\n }\r\n\r\n private handleStreamStopped(sessionId: string, error: ErrorDetails | undefined) {\r\n logger.verbose(`handleStreamStopped: sessionId=${sessionId}, error=${error}, lastSessionId=${this.mSession?.sessionId}`);\r\n\r\n this.emit(\"stopped\");\r\n\r\n //if (sessionId === this.mSession?.sessionId) {\r\n if (error) {\r\n const reason: StreamerTerminationReason = this.mapErrorCodeToReason(error.code)\r\n logger.error(`onGameStreamStreamStopped error=${Utils.string.hex(error.code, 8)}:${error.description}`);\r\n this.focusStreamerUI();\r\n this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"terminate\", {\r\n reason: reason,\r\n code: error.code\r\n }).then(_ => {\r\n this.finish(reason);\r\n });\r\n } else {\r\n logger.info(\"handleStreamStopped\");\r\n this.finish(StreamerTerminationReason.SessionDone);\r\n }\r\n //}\r\n }\r\n\r\n private handleStreamerKeydownEvent(event: KeyboardEvent) {\r\n if (event.metaKey && (event.key === \"g\" || event.code === \"KeyG\") && (this.mDevice.os === DeviceOS.macOS)) {\r\n if (this.isTouchOscEnabled) {\r\n this.mTouchOscHandler.toggle(event);\r\n } else {\r\n this.focusStreamerUI();\r\n this.mRuntimeMessageHandler?.postMessage(\"toggleOSC\");\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n // Clipboard paste\r\n if (this.isClipboardPasteEnabled && event.ctrlKey && (event.key === \"v\" || event.code === \"KeyV\")) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.pasteClipboardText();\r\n }\r\n }\r\n\r\n private pasteClipboardText(requirePasteDialog?: boolean) {\r\n try {\r\n if (requirePasteDialog ?? this.requiresPasteDialog) {\r\n logger.info(\"Display paste dialog\");\r\n this.pasteClipboardTextUsingDialog();\r\n } else {\r\n this.pasteClipboardTextInternal();\r\n }\r\n } catch (e: any) {\r\n logger.error(`Unable to paste clipboard text. Error ${e.name}: ${e.message}`);\r\n this.mTelemetry.onException(\"web-streamer.ts\", e.name, e.message, e.stack??\"WebStreamer.sendClipboardText()\", \"client\", this.sessionId);\r\n }\r\n }\r\n\r\n private pasteClipboardTextInternal() {\r\n // Clipboard API needs to be used in secure context, either https or localhost,\r\n // If not in secure context, it will be undefined, refer to https://w3c.github.io/clipboard-apis/#navigator-interface.\r\n if (!navigator.clipboard) {\r\n throw new APIError(APIErrorCode.NotSupported, \"navigator.clipboard not available\");\r\n }\r\n\r\n navigator.clipboard.readText().then((input: string) => {\r\n const size = new Blob([input]).size;\r\n if (size <= this.mFeatureConfigSvc.clipboardPasteConfig.maxPasteBuffer) {\r\n this.mGridApp?.sendTextInput(Utils.string.toArrayBuffer(input));\r\n } else {\r\n throw new APIError(APIErrorCode.InvalidParameter, `clipboard text size ${size} larger than maximum allowed ${this.mFeatureConfigSvc.clipboardPasteConfig.maxPasteBuffer}`);\r\n }\r\n });\r\n }\r\n\r\n private async pasteClipboardTextUsingDialog() {\r\n logger.info(\"Requesting for interaction via dialog to paste text from clipboard.\");\r\n this.SetDialogOpen();\r\n const response: any = await this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"askDialog\", {\r\n msgKey: \"pasteDialog.body\",\r\n affirmLabelKey: \"actions.yes\",\r\n denyLabelKey: \"actions.no\"\r\n });\r\n if (response.action === \"affirm\") {\r\n this.pasteClipboardTextInternal();\r\n }\r\n this.SetDialogClose();\r\n }\r\n\r\n private handleStreamerKeyupEvent(event: KeyboardEvent) {\r\n if (event.ctrlKey && (event.key === \"g\" || event.code === \"KeyG\") && (this.mDevice.os !== DeviceOS.macOS)) {\r\n if (this.isTouchOscEnabled) {\r\n this.mTouchOscHandler.toggle(event);\r\n } else {\r\n this.focusStreamerUI();\r\n this.mRuntimeMessageHandler?.postMessage(\"toggleOSC\");\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n }\r\n }\r\n\r\n private async requestUserGestureToStartStreaming(func: () => void) {\r\n this.SetDialogOpen();\r\n await this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"requestUserGestureToStartStreaming\", {\r\n msgKey: `error.requireUserGestureToStartStreaming.${(this.mAuth.currentUser?.isGuest)? \"gdn\": \"gfn\"}`,\r\n dismissLabelKey: \"actions.continue\"\r\n }).then(_ => {\r\n func();\r\n this.SetDialogClose();\r\n });\r\n }\r\n\r\n private async setVideoVolumeAndPlay(): Promise {\r\n logger.info(\"Unmuting video element...\");\r\n if (this.mVideoElement) {\r\n this.mVideoElement.muted = this.mMutedState;\r\n this.mVideoElement.volume = this.mVolume;\r\n\r\n try {\r\n let playPromise = this.mVideoElement!.play();\r\n if (playPromise !== undefined) {\r\n playPromise.then(_ => {\r\n logger.info(\"content streaming\");\r\n }).catch(error => {\r\n // chrome: https://developer.chrome.com/blog/autoplay/\r\n // safari: https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari/\r\n logger.warn(\"video play failed, requesting user interaction\");\r\n this.requestUserGestureToStartStreaming(() => {\r\n this.mVideoElement!.play();\r\n });\r\n });\r\n }\r\n }\r\n catch (e: any) {\r\n this.emit(\"sessionSetupProgress\", {\r\n progress: SessionSetupProgress.Error,\r\n errorDetails: {\r\n reason: StreamerTerminationReason.SetupSessionFailure,\r\n code: 0,\r\n message: e\r\n }\r\n });\r\n\r\n logger.error(`Unable to call play() on video element. ${e.name} : ${e.message}, activation=${JSON.stringify(Utils.device.getUserActivationStatus())}`);\r\n\r\n // use onException telemetry event to track this error\r\n this.mTelemetry.onException(\"web-streamer.ts\", e.name, e.toString(), e.stack ?? \"\", \"client\", this.sessionId);\r\n throw e;\r\n }\r\n }\r\n }\r\n\r\n protected updateVolume(): void {\r\n if (this.mVideoElement) {\r\n this.mVideoElement.volume = this.mVolume;\r\n }\r\n }\r\n\r\n protected updateMutedState(): void {\r\n if (this.mVideoElement) {\r\n try {\r\n this.mVideoElement.muted = this.mMutedState;\r\n }\r\n catch (e: any) {\r\n logger.warn(`Unable to change the video muted state to ${this.mMutedState ? \"MUTED\" : \"UNMUTED\"}. ${e.name} : ${e.message}, activation=${JSON.stringify(Utils.device.getUserActivationStatus())}`);\r\n\r\n // use onException telemetry event to track this error\r\n this.mTelemetry.onException(\"web-streamer.ts\", e.name, e.toString(), e.stack ?? \"\", \"client\", this.sessionId);\r\n };\r\n }\r\n }\r\n\r\n private onMessageIntroFinished(message?: Message) {\r\n this.onIntroFinished();\r\n if (!this.isWindowMode && (this.mPlatformDetails?.os == GS.PlatformName.MAC) && (this.mPlatformDetails?.browser == GS.BrowserName.SAFARI)) {\r\n this.SetDialogOpen();\r\n this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"hotkeyDialog\").then(_ => {\r\n this.SetDialogClose();\r\n });\r\n }\r\n }\r\n\r\n private onIntroFinished() {\r\n if (this.IsDialogOpen) {\r\n this.focusStreamerUI();\r\n } else {\r\n this.focusStreamer();\r\n }\r\n if (this.mVideoContainerElement) {\r\n this.mVideoContainerElement.style.display = \"block\";\r\n if (this.mConfiguration.sdk.enableDesktopOsc) {\r\n this.mVideoContainerElement.onkeydown = this.handleStreamerKeydownEvent.bind(this);\r\n this.mVideoContainerElement.onkeyup = this.handleStreamerKeyupEvent.bind(this);\r\n }\r\n }\r\n this.initializeGamepadHandler();\r\n }\r\n\r\n private initializeGamepadHandler() {\r\n this.mGamepadHandler.start();\r\n this.mGamepadHandler.registerLongPressCallback(GamepadButtonName.Start, () => {\r\n logger.info(\"toggle OSC on gamepad START/OPTION long press\");\r\n this.focusStreamerUI();\r\n if (this.isTouchOscEnabled) {\r\n this.mTouchOscHandler.toggle();\r\n } else {\r\n this.mRuntimeMessageHandler?.postMessage(\"toggleOSC\");\r\n }\r\n });\r\n this.mGamepadHandler.registerKeyPressCallback(GamepadButtonName.A, () => {\r\n this.mRuntimeMessageHandler?.postMessage(\"gamepadPress\", {\r\n button: GamepadButtonName.A\r\n });\r\n });\r\n this.mGamepadHandler.registerKeyPressCallback(GamepadButtonName.DpadLeft, () => {\r\n this.mRuntimeMessageHandler?.postMessage(\"gamepadPress\", {\r\n button: GamepadButtonName.DpadLeft\r\n });\r\n });\r\n this.mGamepadHandler.registerKeyPressCallback(GamepadButtonName.DpadRight, () => {\r\n this.mRuntimeMessageHandler?.postMessage(\"gamepadPress\", {\r\n button: GamepadButtonName.DpadRight\r\n });\r\n });\r\n\r\n this.mGestureHelper?.start();\r\n }\r\n\r\n private onMessageGetUIDataJSON(message: Message) {\r\n this.mRuntimeMessageHandler?.postResponse(message.method, this.getUiDataJson(), message.uniqueid!)\r\n }\r\n\r\n private onMessageQuitGame() {\r\n logger.info(\"onMessageQuitGame\");\r\n this.stop();\r\n }\r\n\r\n private onMessageHideOSC() {\r\n logger.info(\"onMessageHideOSC\");\r\n this.focusStreamer();\r\n }\r\n\r\n private onMessagePasteText() {\r\n logger.info(\"onMessagePasteText\");\r\n this.pasteClipboardText(false);\r\n }\r\n\r\n private onTextInput() {\r\n logger.info(\"onTextInput\");\r\n if (this.mTextInputElement) {\r\n this.mTextInputElement.focus();\r\n }\r\n }\r\n\r\n private setupContainer() {\r\n if (this.mContainerElement) {\r\n if (!this.mSettings.enableBrowserTools) {\r\n Utils.dom.disableDevTools();\r\n Utils.dom.disableContextMenu();\r\n }\r\n\r\n if (this.mSettings.enableIntroAnimation) {\r\n this.mRuntimeMessageHandler?.postMessage(\"playIntro\", {});\r\n this.mContainerElement!.focus();\r\n } else {\r\n this.onMessageIntroFinished();\r\n }\r\n }\r\n }\r\n\r\n private async onMessageInitializeFinished(message?: Message) {\r\n logger.info(\"StreamerUI Finished Initializing\");\r\n if (this.mContainerElement) {\r\n this.mContainerElement.style.display = \"block\";\r\n\r\n // If we're meant to be in fullscreen, and the user has no recent action, we need to\r\n // display a dialog asking the user to take action and get us into fullscreen mode.\r\n if (this.isFullscreenRequestRequired && this.isFullscreenRequested) {\r\n // If the user activation is current, we can most likely skip the dialog\r\n // Ask for forgiveness instead of permission to cover all cases\r\n try {\r\n await Utils.dom.requestFullscreen(this.mContainerElement!);\r\n try {\r\n await this.setVideoVolumeAndPlay();\r\n this.setupContainer()\r\n } catch (e: any) {\r\n logger.warn(\"Failed to unmute video: \" + e);\r\n };\r\n } catch (e: any) {\r\n logger.info(\"Did not get permission to go fullscreen. Requesting for interaction via dialog.\");\r\n this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"notifyDialog\", {\r\n msgKey: \"setup.continueFullscreen\",\r\n dismissLabelKey: \"actions.continue\"\r\n }).then(_ => {\r\n Utils.dom.requestFullscreen(this.mContainerElement!)\r\n .catch((e: any) => {\r\n logger.error(`Unexpectedly failed to get fullscreen after dialog: ${e}`);\r\n logger.error(\"Continuing anyway.\");\r\n })\r\n .finally(async () => {\r\n try {\r\n await this.setVideoVolumeAndPlay();\r\n this.setupContainer();\r\n } catch (e: any) {\r\n logger.warn(\"Failed to unmute video: \" + e);\r\n };\r\n });\r\n });\r\n }\r\n } else {\r\n // Windowed mode, or fullscreen not supported\r\n try {\r\n await this.setVideoVolumeAndPlay();\r\n this.setupContainer()\r\n } catch (e: any) {\r\n logger.warn(\"Failed to unmute video: \" + e);\r\n };\r\n }\r\n }\r\n }\r\n\r\n private onFullScreenChangeEvent(event: Event): void {\r\n const fullscreen: boolean = !!document.fullscreenElement;\r\n\r\n if (!fullscreen && this.mState === StreamerState.Streaming) {\r\n this.focusStreamerUI();\r\n\r\n //
.(webkit)requestFullscreen is not supported on iOS/ iPad\r\n // App should be launched in PWA mode on iOS/iPad for fullscreen experience\r\n if (this.isFullscreenRequestRequired) {\r\n // HACK: when fullscreen changes while the intro is playing, focus is on\r\n // streamer ui but once intro finishes and this dialog is still up\r\n // the intro finish callback focuses back into the streamer.\r\n // this is a quick solution until we can refactor focus handling\r\n this.SetDialogOpen();\r\n this.mRuntimeMessageHandler?.postMessageAndGetResponse(\"askDialog\", {\r\n msgKey: \"interface.igoFullscreenMessage\",\r\n affirmLabelKey: \"actions.fullscreen\",\r\n denyLabelKey: \"actions.quit_game\"\r\n }).then(response => {\r\n this.SetDialogClose();\r\n if (response.action === \"affirm\") {\r\n Utils.dom.requestFullscreen(this.mContainerElement!)\r\n .catch((e: any) => {\r\n logger.error(`Unexpectedly failed to get fullscreen after dialog: ${e}`);\r\n logger.error(\"Continuing anyway.\");\r\n })\r\n .finally(() => {\r\n this.focusStreamer();\r\n });\r\n } else {\r\n this.stop();\r\n }\r\n });\r\n } else {\r\n this.focusStreamer();\r\n }\r\n }\r\n }\r\n\r\n private onGameStreamCustomMessage(message: any): void {\r\n this.onCustomMessage(message.data, message.messageType, message.messageRecipient);\r\n }\r\n\r\n private onGameStreamMicCapture(event: GS.MicStateEvent): void {\r\n switch (event.state) {\r\n case GS.MicState.UNINITIALIZED:\r\n case GS.MicState.UNSUPPORTED:\r\n case GS.MicState.ERROR:\r\n case GS.MicState.PERMISSION_PENDING:\r\n this.updateMicState(StreamerMicrophoneState.WaitingForPermission);\r\n break;\r\n case GS.MicState.PERMISSION_DENIED:\r\n this.updateMicState(StreamerMicrophoneState.Blocked);\r\n break;\r\n case GS.MicState.STARTED:\r\n this.updateMicState(StreamerMicrophoneState.Active);\r\n break;\r\n case GS.MicState.STOPPED:\r\n this.updateMicState(StreamerMicrophoneState.Muted);\r\n break;\r\n case GS.MicState.NO_SUITABLE_DEVICE:\r\n this.updateMicState(StreamerMicrophoneState.NotFound);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Toggles the capture state of the microphone to either muted or unmuted.\r\n *\r\n * This will be a no-op if there is no microphone or the user has not yet\r\n * given permission to the microphone or has blocked access to the microphone.\r\n *\r\n * @param muted\r\n * True to stop capturing the microphone input (mute); Otherwise, false, to\r\n * start capturing the microphone input (unmute).\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidState}. The streamer has not yet been initialized.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.NotSupported}. The microphone has been disabled by local or remote configuration.\r\n */\r\n protected doToggleMicrophone(muted: boolean): void {\r\n if (!this.mGridApp) {\r\n throw new APIError(APIErrorCode.InvalidState, \"The streamer has not yet been initialized.\");\r\n }\r\n\r\n if (!this.defaultConfiguration.enableMicrophone) {\r\n throw new APIError(APIErrorCode.NotSupported, \"The microphone has been disabled by configuration.\");\r\n }\r\n\r\n // don't allow mic to be toggled unless it can be (e.g. there is a mic and the user has given permission to use it)\r\n if (this.mMicState === StreamerMicrophoneState.Active || this.mMicState === StreamerMicrophoneState.Muted) {\r\n this.mGridApp.setMicRecordingEnabled(!muted);\r\n }\r\n }\r\n\r\n public get isWindowModeSupported(): boolean {\r\n return true;\r\n }\r\n\r\n public get isFullscreenRequested(): boolean {\r\n return !!this.mContainerElement\r\n && Utils.dom.supportsRequestFullscreen(this.mContainerElement)\r\n && !this.mWindowedStreamerContainerElement;\r\n }\r\n\r\n private get isFullscreenRequestRequired(): boolean {\r\n return (this.mDevice.os !== DeviceOS.iOS && this.mDevice.os !== DeviceOS.iPadOS);\r\n }\r\n\r\n private getWindowStreamerContainerElement() : Nullable{\r\n let elem: Nullable = null;\r\n if (this.mStartParameters?.windowElementId && this.isWindowModeSupported) {\r\n elem = document.getElementById(this.mStartParameters?.windowElementId);\r\n if (!elem) {\r\n logger.warn(`Windowed Mode Streamer Element ${this.mStartParameters?.windowElementId} not found. Fullscreen mode enabled.`);\r\n elem = null;\r\n }\r\n }\r\n return elem;\r\n }\r\n\r\n private static GetOrCreateStreamContainerElement(streamerContainerElement: Nullable): HTMLElement {\r\n let elem: Nullable = document.getElementById(ELEMENT_ID_CONTAINER);\r\n\r\n if (!elem) {\r\n logger.warn(`The container element '${ELEMENT_ID_CONTAINER}' could not be found. Element will be created instead.`);\r\n elem = document.createElement(\"div\");\r\n elem.id = ELEMENT_ID_CONTAINER;\r\n\r\n elem.style.display = \"none\";\r\n elem.style.zIndex = \"100\";\r\n\r\n elem.style.width = \"100%\";\r\n elem.style.height = \"100%\";\r\n // If there's no top-level touchmove handler, chrome prints out a ton of input \"errors\" even though things work fine.\r\n // TODO: Remove below line once Ragnarok fixes this on their end.\r\n elem.addEventListener(\"touchmove\", (ev) => {});\r\n\r\n if (streamerContainerElement) {\r\n elem.style.position = \"relative\";\r\n streamerContainerElement.appendChild(elem);\r\n } else {\r\n elem.style.position = \"fixed\";\r\n document.body.appendChild(elem);\r\n }\r\n }\r\n\r\n if (!elem) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Unabled to get or create the streamer container element\");\r\n }\r\n\r\n return elem;\r\n }\r\n\r\n private static GetOrCreateVideoElement(container: HTMLElement, streamerContainerElement: Nullable): [HTMLVideoElement, HTMLElement] {\r\n let videoContainerElem: Nullable = document.getElementById(ELEMENT_ID_VIDEO_CONTAINER) as HTMLElement;\r\n let videoElem: Nullable = null;\r\n\r\n if (!videoContainerElem) {\r\n videoContainerElem = document.createElement(\"div\");\r\n videoContainerElem.id = ELEMENT_ID_VIDEO_CONTAINER;\r\n videoContainerElem.style.background = \"black\";\r\n videoContainerElem.style.display = \"none\";\r\n\r\n videoElem = document.createElement(\"video\");\r\n videoElem.id = ELEMENT_ID_VIDEO;\r\n videoElem.tabIndex = 1;\r\n videoElem.autoplay = true;\r\n videoElem.muted = true;\r\n videoElem.playsInline = true;\r\n\r\n videoElem.style.outline = \"none\";\r\n videoElem.style.width = \"100%\";\r\n videoElem.style.height = \"100%\";\r\n\r\n if (streamerContainerElement) {\r\n videoElem.style.position = \"absolute\";\r\n videoElem.style.left = \"0\";\r\n videoElem.style.top = \"0\";\r\n } else {\r\n videoElem.style.left = \"0\";\r\n videoElem.style.top = \"0\";\r\n videoElem.style.position = \"fixed\";\r\n videoElem.style.backgroundColor = \"black\";\r\n }\r\n videoElem.disablePictureInPicture = true;\r\n\r\n videoContainerElem.appendChild(videoElem);\r\n container.appendChild(videoContainerElem);\r\n\r\n let videoStyleElem: Nullable = document.getElementById(`${ELEMENT_ID_VIDEO}-style`) as HTMLElement;\r\n if (!videoStyleElem) {\r\n const css = \"video::-webkit-media-controls { display: none; }\"\r\n const styleElem = document.createElement(\"style\");\r\n styleElem.id = `${ELEMENT_ID_VIDEO}-style`;\r\n styleElem.type = \"text/css\";\r\n styleElem.appendChild(document.createTextNode(css));\r\n document.body.appendChild(styleElem);\r\n }\r\n }\r\n\r\n if (!videoContainerElem) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Unabled to get or create the streamer video element\");\r\n }\r\n\r\n // video element is already available\r\n if (!videoElem) {\r\n videoElem = document.getElementById(ELEMENT_ID_VIDEO) as HTMLVideoElement;\r\n }\r\n\r\n return [videoElem!, videoContainerElem];\r\n }\r\n\r\n private static GetOrCreateTextInputElement(container: HTMLElement): HTMLInputElement {\r\n let elem: HTMLInputElement = document.getElementById(ELEMENT_ID_TEXT_INPUT) as HTMLInputElement;\r\n\r\n if (!elem) {\r\n elem = document.createElement(\"input\");\r\n elem.id = ELEMENT_ID_TEXT_INPUT;\r\n elem.type = \"text\";\r\n elem.autocomplete = \"off\";\r\n elem.autocapitalize = \"off\";\r\n\r\n elem.style.position = \"absolute\";\r\n elem.style.opacity = \"0\";\r\n elem.style.pointerEvents = \"none\";\r\n elem.style.caretColor = \"transparent\";\r\n elem.style.fontSize = \"24em\"; // large enough such that Safari does not auto zoom\r\n\r\n container.appendChild(elem);\r\n }\r\n\r\n if (!elem) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Unabled to get or create the streamer text element\");\r\n }\r\n\r\n return elem;\r\n }\r\n\r\n private static GetOrCreateAudioElement(container: HTMLElement): HTMLAudioElement {\r\n let elem: Nullable = document.getElementById(ELEMENT_ID_AUDIO) as HTMLAudioElement;\r\n\r\n if (!elem) {\r\n logger.warn(`The audio element '${ELEMENT_ID_AUDIO}' could not be found. Element will be created instead.`);\r\n elem = document.createElement(\"audio\");\r\n elem.id = ELEMENT_ID_AUDIO;\r\n elem.autoplay = true;\r\n container.appendChild(elem);\r\n }\r\n\r\n if (!elem) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Unabled to get or create the streamer audio element\");\r\n }\r\n\r\n return elem;\r\n }\r\n\r\n private GetOrCreateStreamerUIElement(config: Configuration, container: HTMLElement): HTMLIFrameElement {\r\n let elem: Nullable = document.getElementById(ELEMENT_ID_UI) as HTMLIFrameElement;\r\n\r\n if (!elem) {\r\n logger.warn(`The ui element '${ELEMENT_ID_UI}' could not be found. Element will be created instead.`);\r\n elem = document.createElement(\"iframe\");\r\n if (!elem) {\r\n throw new APIError(APIErrorCode.StreamerDOMError, \"Unabled to get or create the StreamerUI element\");\r\n }\r\n\r\n elem.setAttribute(\"allowfullscreen\", this.mWindowedStreamerContainerElement ? \"true\" : \"false\");\r\n elem.setAttribute(\"frameBorder\", \"false\");\r\n elem.setAttribute(\"scrolling\", \"false\");\r\n elem.id = ELEMENT_ID_UI;\r\n elem.src = Streamer.GetUiUrl(config);\r\n\r\n if(this.mWindowedStreamerContainerElement) {\r\n elem.style.width = \"100%\";\r\n elem.style.height = \"100%\";\r\n elem.style.position = \"absolute\";\r\n elem.style.left = \"0\";\r\n elem.style.top = \"0\";\r\n } else {\r\n elem.style.width = \"100vw\";\r\n elem.style.height = \"100vh\";\r\n elem.style.left = \"0\";\r\n elem.style.top = \"0\";\r\n elem.style.position = \"fixed\";\r\n }\r\n elem.style.colorScheme = \"normal\";\r\n elem.style.borderWidth = \"0\";\r\n elem.style.zIndex = \"102\";\r\n elem.tabIndex = -1;\r\n\r\n container.appendChild(elem);\r\n }\r\n\r\n return elem;\r\n }\r\n\r\n private static StreamWarningCodeFromGs(gscode: GS.RNotificationCode): StreamerWarningCode {\r\n switch (gscode) {\r\n case GS.RNotificationCode.ApproachingEntitlementTimeout:\r\n return StreamerWarningCode.ApproachingEntitlementTimeout;\r\n case GS.RNotificationCode.ApproachingIdleTimeout:\r\n return StreamerWarningCode.ApproachingIdleTimeout;\r\n case GS.RNotificationCode.ApproachingSessionMaxTimeLimit:\r\n return StreamerWarningCode.ApproachingSessionMaxTimeLimit;\r\n case GS.RNotificationCode.ClearUserIdleTimeOut:\r\n return StreamerWarningCode.ClearUserIdleTimeOut;\r\n case GS.RNotificationCode.Unknown:\r\n default:\r\n return StreamerWarningCode.Unknown;\r\n }\r\n }\r\n\r\n private onGameStreamStatsUpdate(e: GS.StreamUpdateEvent): void {\r\n this.updateStreamStats(e);\r\n }\r\n\r\n private updateStreamStats(e: GS.StreamUpdateEvent) {\r\n this.mStreamStats.roundTripDelayMs = e.rtd || 0;\r\n this.mStreamStats.streamingFps = e.fps || 0;\r\n this.mStreamStats.gameEngineFps = Math.round(e.avgGameFps || 0);\r\n this.mStreamStats.frameLoss = e.frameLoss;\r\n this.mStreamStats.totalFrameLoss = (this.mStreamStats.totalFrameLoss ? this.mStreamStats.totalFrameLoss : 0) + e.frameLoss;\r\n this.mStreamStats.packetLoss = e.packetLoss - (this.mStreamStats.totalPacketLoss? this.mStreamStats.totalPacketLoss : 0);\r\n this.mStreamStats.totalPacketLoss = e.packetLoss;\r\n this.mStreamStats.totalAvailableBandwidth = e.totalBandwidth;\r\n this.mStreamStats.bandwidthPercentage = e.utilizedBandwidth;\r\n this.mStreamStats.bandwidthUsed = ((e.totalBandwidth * e.utilizedBandwidth) / 100);\r\n this.mStreamStats.resolutionHeight = e.streamingResolution.height;\r\n this.mStreamStats.resolutionWidth = e.streamingResolution.width;\r\n }\r\n\r\n protected doCreateVideoBounds(): VideoBounds {\r\n const boundingRect: DOMRect = this.mVideoElement!.getBoundingClientRect();\r\n const elementBounds: VideoBounds = {\r\n videoWidth: this.mVideoElement?.videoWidth || 0,\r\n videoHeight: this.mVideoElement?.videoHeight || 0,\r\n boundingWidth: boundingRect.width,\r\n boundingHeight: boundingRect.height,\r\n boundingTop: boundingRect.top,\r\n boundingLeft: boundingRect.left\r\n }\r\n\r\n return elementBounds;\r\n }\r\n\r\n protected doAdjustVideoOffsetForActionRegion(activeRegion: EditableRegion): void\r\n {\r\n if (!activeRegion || activeRegion?.screenRect.rect.bottom <= this.mAvailableScreenHeight) {\r\n return;\r\n }\r\n\r\n const padding: number = 5;\r\n const statusBarHeight: number = window.matchMedia(\"(orientation: landscape)\").matches ? window.outerHeight - window.innerHeight : 0;\r\n const offsetY: number = -1 * (activeRegion.screenRect.rect.bottom + padding - this.mAvailableScreenHeight + statusBarHeight);\r\n\r\n this.mGridApp?.setVideoTransforms(0, offsetY, 1);\r\n\r\n logger.verbose(`setting video transform offsetY=${offsetY}`);\r\n }\r\n}\r\n","/* Copyright (c) 2021-2025, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Catalog } from \"../../catalog/catalog\";\r\nimport { Configuration } from \"../../configuration/configuration\";\r\nimport { Nullable } from \"../../core/util.types\";\r\nimport { Device } from \"../../device/device\";\r\nimport { Entitlement } from \"../../entitlement/entitlement\";\r\nimport { GuestMode } from \"../../guestmode/guestmode\";\r\nimport { I18N } from \"../../i18n/i18n\";\r\nimport { Auth } from \"../../idm/auth\";\r\nimport { RemoteLogger } from \"../../logging/remote-logger\";\r\nimport { NetworkTest } from \"../../networktest/network-test\";\r\nimport { Feedback } from \"../../telemetry/feedback\";\r\nimport { Telemetry } from \"../../telemetry/telemetry\";\r\nimport { ITelemetry } from \"../../telemetry/telemetry.types\";\r\nimport { BaseStreamerConfiguration } from \"../base/base-streamer.types\";\r\nimport { UrlClickData } from \"../custom-message.types\";\r\nimport { Streamer } from \"../streamer\";\r\nimport { StreamerTerminationReason, VideoBounds } from \"../streamer.types\";\r\nimport { EditableRegion } from \"../editable-region\";\r\nimport { EditBoxZone } from \"../streamer.types\";\r\n\r\n\r\n/**\r\n * Null streamer, used for environments where a streamer is not possible\r\n * for example, node/jsdom only environment. Which sadly, are used for\r\n * tests, once our test framework can handle mocking the missing components\r\n * then we can update how the platform creates a null streamer.\r\n *\r\n * @internal\r\n */\r\nexport class NullStreamer extends Streamer {\r\n protected get defaultConfiguration(): BaseStreamerConfiguration {\r\n return {\r\n useWebSocketSignaling: true,\r\n enableMicrophone: true\r\n }\r\n }\r\n\r\n protected get defaultConfigurationOverrides(): Nullable {\r\n return null;\r\n }\r\n\r\n protected get canUseIntroPlayer(): boolean {\r\n return false;\r\n }\r\n\r\n constructor(config: Configuration, device: Device, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, telemetry: ITelemetry, feedback: Feedback, remoteLogger: RemoteLogger, networkTest: NetworkTest, guestMode: GuestMode) {\r\n super(config, device, i18n, entitlement, auth, catalog, null, telemetry, feedback, remoteLogger, networkTest, guestMode);\r\n }\r\n\r\n protected doStreamingSupportCheck(): boolean { return false; }\r\n protected doToggleOsc(_: boolean): void { }\r\n protected doToggleKeyboard(_: boolean): void { }\r\n protected doToggleMicrophone(_: boolean): void { }\r\n protected doStartStream(isResume: boolean): void { }\r\n protected doStopStream(): void { }\r\n protected doSendCustomMessage(message: string, messageType: string, messageRecipient: string): void { }\r\n protected async doOpenLink(urlData: UrlClickData): Promise { return false; }\r\n protected doSendKeyboardEvent(event: KeyboardEvent): void {}\r\n protected doCreateVideoBounds(): VideoBounds {\r\n return {\r\n videoWidth: 0,\r\n videoHeight: 0,\r\n boundingWidth: 0,\r\n boundingHeight: 0,\r\n boundingTop: 0,\r\n boundingLeft: 0\r\n };\r\n }\r\n protected doAdjustVideoOffsetForActionRegion(_: EditableRegion): void { }\r\n protected updateVolume(): void { }\r\n protected updateMutedState(): void { }\r\n protected mapErrorCodeToReason(): StreamerTerminationReason { return StreamerTerminationReason.SessionDone;}\r\n}\r\n","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Version } from \"../version/version\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Nullable } from \"../core/util.types\";\r\n\r\n// each runtime is a bit different in how native bindings are exposed and\r\n// the types that can be serialized\r\n//\r\n// Currently, Android is the only host runtime that needs it's own proxies\r\n// as it only supports native POD types to be serialized, in contrast to\r\n// other runtimes like JavaScriptCore where we can expose full class types\r\n// with properties and such to create standard api's that are available in\r\n// a desktop browser like environment e.g. we can re-use most of the browser\r\n// based abstractions.\r\ntype HostRuntime = \"android\" | \"jsc\" | \"test\";\r\n\r\n/**\r\n * Class that handles platform-dependant features.\r\n */\r\nexport class PlatformBase {\r\n /** @internal */\r\n public mSdkVersion: Nullable = null;\r\n\r\n /**\r\n * Gets this version of the GFN Client SDK.\r\n */\r\n public get sdkVersion(): Version {\r\n if (!this.mSdkVersion) {\r\n throw new Error(\"sdkVersion has not been initialized\");\r\n }\r\n\r\n return this.mSdkVersion;\r\n }\r\n\r\n protected static Host(name: HostRuntime): boolean {\r\n const winObj: any = window;\r\n\r\n switch (name) {\r\n case \"android\":\r\n return !!winObj[\"__GFN_RUNTIME_ANDROID__\"] || !!winObj[\"__GFN_STREAMER_UI_RUNTIME_ANDROID__\"];\r\n case \"jsc\":\r\n return !!winObj[\"__GFN_RUNTIME_JSC__\"] || !!winObj[\"__GFN_STREAMER_UI_RUNTIME_JSC__\"];\r\n case \"test\":\r\n return PlatformBase.IsHostTestEnvironment();\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n protected static IsHostTestEnvironment(): boolean {\r\n if (Utils.string.contains(navigator.userAgent, \"jsdom/\")) {\r\n return true;\r\n }\r\n\r\n if (\"process\" in window) {\r\n const winObj: any = window;\r\n return (winObj.process.title === \"nodejs\" || winObj.process.title === \"npm\");\r\n }\r\n\r\n return false;\r\n }\r\n}","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { ITelemetry } from \"./telemetry.types\";\r\n\r\n/** @internal */\r\nexport abstract class TelemetryHelper\r\n{\r\n protected readonly mTelemetry: ITelemetry;\r\n protected readonly mHelper: Nullable;\r\n\r\n /** @internal **/\r\n constructor(telemetry: ITelemetry, platformHelper: Nullable) {\r\n this.mTelemetry = telemetry;\r\n this.mHelper = platformHelper;\r\n }\r\n\r\n /** @internal */\r\n public initialize(): void {\r\n this.mHelper?.setTelemetrySessionId(this.mTelemetry.sessionId);\r\n this.doInitialize();\r\n }\r\n\r\n protected abstract doInitialize(): void;\r\n}\r\n","/* Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { TelemetryHelper } from \"../telemetry-helper\";\r\nimport { NativeEvent, NativeException, NativeNames } from \"../telemetry.types\";\r\n\r\nconst logger = Logging.getLogger(\"telemetry/android/android-telemetry-helper\");\r\n\r\nexport class AndroidTelemetryHelper extends TelemetryHelper {\r\n protected doInitialize(): void {\r\n if (this.mHelper) {\r\n const androidHelper = this.mHelper as AndroidNativeTelemetryHelper;\r\n const storedTelemetryStr = androidHelper.getAndClearStoredTelemetry();\r\n const storedTelemetry: NativeEvent[] = JSON.parse(storedTelemetryStr);\r\n for (const telemetryItem of storedTelemetry) {\r\n switch (telemetryItem.eventName) {\r\n case NativeNames.NativeException:\r\n const exception: NativeException = telemetryItem.eventBody as NativeException;\r\n this.mTelemetry.onException(exception.fileName, exception.type, exception.message, exception.stackTrace, \"native\", telemetryItem.telemetrySessionId);\r\n break;\r\n default:\r\n logger.error(\"Invalid telemetry event sent from native code: \" + telemetryItem.eventName);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Logging } from \"../../logging/logging\";\r\nimport { TelemetryHelper } from \"../telemetry-helper\";\r\n\r\nconst logger = Logging.getLogger(\"telemetry/android/android-telemetry-helper\");\r\n\r\nexport class NullTelemetryHelper extends TelemetryHelper {\r\n protected doInitialize(): void {\r\n }\r\n}","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { Feedback } from \"../telemetry/feedback\";\r\nimport { Logging } from \"./logging\";\r\nimport { LogFile, LoggingLevel } from \"./logging.types\";\r\nimport { RemoteLoggerConfiguration } from \"./remote-logger.types\";\r\n\r\nconst logger = Logging.getLogger(\"logging/remote-logger\");\r\n\r\nexport class RemoteLogger implements IInitializable {\r\n private mRemoteLoggerConfig: RemoteLoggerConfiguration;\r\n\r\n protected readonly mPlatformLogController: Nullable;\r\n private mSessionParams: Record = {};\r\n private mBuffer: string = \"\";\r\n private mFileName: string = \"\";\r\n private mFeedback: Feedback;\r\n private mLogOffset: number = 0;\r\n private mLogStreamInProgress: boolean = false;\r\n private mLastFlushTimestamp: number = 0;\r\n\r\n private get isStreamConfigured() {\r\n return (this.mSessionParams.streamSessionId.length > 0 && this.mSessionParams.streamSubSessionIds.length > 0);\r\n }\r\n\r\n constructor(feedback: Feedback, filename: string, configuration: Configuration, platformLogger: Nullable = null) {\r\n this.mFeedback = feedback;\r\n this.mFileName = filename;\r\n this.mPlatformLogController = platformLogger;\r\n this.mSessionParams = {\r\n streamSessionId: \"\",\r\n streamSubSessionIds: []\r\n };\r\n this.mRemoteLoggerConfig = configuration.remoteLogger;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Initialize remote logger\r\n */\r\n public async initialize(ctx: IInitializeContext): Promise {\r\n }\r\n\r\n /**\r\n * @internal\r\n * Start recording device logs\r\n */\r\n public start() {\r\n if (this.mPlatformLogController) {\r\n this.mPlatformLogController.start();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Stop recording device logs\r\n */\r\n public stop() {\r\n if (this.mPlatformLogController) {\r\n this.mPlatformLogController.stop();\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Writes a log message directly to the remote logger.\r\n */\r\n public write(_: LoggingLevel, message: string) {\r\n this.addToBuffer([message]);\r\n }\r\n\r\n /** @internal\r\n * Finalizes existing Log stream session.\r\n * Configures Log streaming with new stream SessionIds.\r\n */\r\n public async reset(streamSessionId: string = \"\", streamSubSessionIds: string[] = []) {\r\n await this.flushRemoteLogAsync(true);\r\n this.mSessionParams.streamSessionId = streamSessionId;\r\n this.mSessionParams.streamSubSessionIds = streamSubSessionIds;\r\n }\r\n\r\n /** @internal\r\n * Flush log buffer for GFC feedback streaming.\r\n * Pass isFinal=true if no further attachments are expected.\r\n */\r\n public async flushRemoteLog(isFinal: boolean, buffer: string) {\r\n if (buffer.length > 0) {\r\n let logFile: LogFile = {\r\n filename: this.mFileName,\r\n contents: buffer\r\n };\r\n try {\r\n this.mLogOffset = await this.mFeedback.streamLog(logFile, this.mLogOffset, isFinal, this.mSessionParams);\r\n } catch (e: unknown) {\r\n if( e instanceof APIError) {\r\n logger.error(\"Remote Logger: \" + e.message);\r\n } else {\r\n logger.error(\"Remote Logger: Stream Log API failed\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** @internal\r\n * Flushes remote log asynchronously\r\n */\r\n private async flushRemoteLogAsync(isFinal: boolean) {\r\n if (!this.mLogStreamInProgress && this.isStreamConfigured) {\r\n this.mLogStreamInProgress = true;\r\n const buffer = this.mBuffer;\r\n this.mBuffer = \"\";\r\n let elapsedMs: number = Date.now() - this.mLastFlushTimestamp;\r\n let waitMs: number = Math.max(0, this.mRemoteLoggerConfig.flushIntervalMs - elapsedMs);\r\n setTimeout(async (final: boolean, logBuffer: string) => {\r\n await this.flushRemoteLog(final, logBuffer);\r\n if (final) {\r\n this.mLogOffset = 0;\r\n }\r\n this.mLogStreamInProgress = false;\r\n this.mLastFlushTimestamp = Date.now();\r\n }, waitMs, isFinal, buffer);\r\n }\r\n }\r\n\r\n /** @internal\r\n * Adds log line to buffer and flushes it to GFC feedback\r\n * every time it reaches buffer length limit\r\n */\r\n public async addToBuffer(args: any []) {\r\n let logLine: string = args.join(\" \") + \"\\n\";\r\n if (this.mRemoteLoggerConfig.bufferFlushLength < this.mBuffer.length) {\r\n this.flushRemoteLogAsync(false);\r\n }\r\n if(this.mRemoteLoggerConfig.bufferLengthMax > this.mBuffer.length) {\r\n this.mBuffer += logLine;\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Feedback } from \"../telemetry/feedback\";\r\nimport { RemoteLogger } from \"./remote-logger\";\r\n\r\nexport class BrowserRemoteLogger extends RemoteLogger {\r\n\r\n public static defaultError = console.error.bind(console);\r\n public static defaultWarn = console.warn.bind(console);\r\n public static defaultInfo = console.info.bind(console);\r\n public static defaultLog = console.log.bind(console);\r\n public static defaultGroup = console.group.bind(console);\r\n public static defaultGroupEnd = console.groupEnd.bind(console);\r\n\r\n constructor(feedback: Feedback, filename: string, configuration: Configuration) {\r\n super(feedback, filename, configuration);\r\n }\r\n\r\n public start() {\r\n this.hookConsole();\r\n }\r\n\r\n public stop() {\r\n this.unhookConsole();\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * Hook into console APIs to route all logging to single buffer.\r\n */\r\n private hookConsole() {\r\n const remoteLogger = this;\r\n console.error = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultError.apply(console, args);\r\n }\r\n\r\n console.warn = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultWarn.apply(console, args);\r\n }\r\n\r\n console.info = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultInfo.apply(console, args);\r\n }\r\n\r\n console.log = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultLog.apply(console, args);\r\n }\r\n\r\n console.group = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultGroup.apply(console, args);\r\n }\r\n\r\n console.groupEnd = function () {\r\n let args = Array.from(arguments);\r\n remoteLogger.addToBuffer(args);\r\n BrowserRemoteLogger.defaultGroupEnd.apply(console);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * Unhook the console APIs. Not currently used but here for consistency.\r\n */\r\n private unhookConsole() {\r\n console.error = BrowserRemoteLogger.defaultError;\r\n console.warn = BrowserRemoteLogger.defaultWarn;\r\n console.info = BrowserRemoteLogger.defaultInfo;\r\n console.log = BrowserRemoteLogger.defaultLog;\r\n console.group = BrowserRemoteLogger.defaultGroup;\r\n console.groupEnd = BrowserRemoteLogger.defaultGroupEnd;\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { AndroidDevice } from \"../device/android/android-device\";\r\nimport { AndroidStreamer } from \"../streamer/android/android-streamer\";\r\nimport { Device } from \"../device/device\";\r\nimport { I18N } from \"../i18n/i18n\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { Streamer } from \"../streamer/streamer\";\r\nimport { WebStreamer } from \"../streamer/web/web-streamer\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Version } from \"../version/version\";\r\nimport { NullStreamer } from \"../streamer/null/null-streamer\";\r\nimport { NetworkTest } from \"../networktest/network-test\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Entitlement } from \"../entitlement/entitlement\";\r\nimport { Auth } from \"../idm/auth\";\r\nimport { Catalog } from \"../catalog/catalog\";\r\nimport { PlatformBase } from \"./platform-base\";\r\nimport { AndroidTelemetryHelper } from \"../telemetry/android/android-telemetry-helper\";\r\nimport { ITelemetry } from \"../telemetry/telemetry.types\";\r\nimport { TelemetryHelper } from \"../telemetry/telemetry-helper\";\r\nimport { NullTelemetryHelper } from \"../telemetry/null/null-telemetry-helper\";\r\nimport { Feedback } from \"../telemetry/feedback\";\r\nimport { RemoteLogger } from \"../logging/remote-logger\";\r\nimport { LoggingLevel } from \"../shared-types\";\r\nimport { BrowserRemoteLogger } from \"../logging/browser-remote-logger\";\r\nimport { GamepadHandler } from \"../input/gamepad-handler\";\r\nimport { GuestMode } from \"../guestmode/guestmode\";\r\nimport { CloudVariableService } from \"../gxtarget/cloud-variable-service\";\r\nimport { CloudFeatureConfigs } from \"../gxtarget/cloud-feature-configs\";\r\n\r\nconst logger = Logging.getLogger(\"platform\");\r\n\r\n// each runtime is a bit different in how native bindings are exposed and\r\n// the types that can be serialized\r\n//\r\n// Currently, Android is the only host runtime that needs it's own proxies\r\n// as it only supports native POD types to be serialized, in contrast to\r\n// other runtimes like JavaScriptCore where we can expose full class types\r\n// with properties and such to create standard api's that are available in\r\n// a desktop browser like environment e.g. we can re-use most of the browser\r\n// based abstractions.\r\ntype HostRuntime = \"android\" | \"jsc\" | \"test\";\r\n\r\nconst DEFAULT_LOG_FILE_NAME: string = \"console.log\";\r\nconst ANDROID_LOG_FILE_NAME: string = \"logcat.txt\";\r\n\r\n/**\r\n * Class that handles platform-dependant features.\r\n */\r\nexport class Platform extends PlatformBase {\r\n\r\n /** @internal **/\r\n public readonly device: Device;\r\n /** @internal **/\r\n public mNetworkTest!: NetworkTest;\r\n /** @internal **/\r\n public mStreamer?: Streamer;\r\n /** @internal **/\r\n public mRemoteLogger?: RemoteLogger;\r\n\r\n /**\r\n * Gets the requested streamer implementation\r\n *\r\n * @internal\r\n */\r\n public get streamer(): Streamer {\r\n if (!this.mStreamer) {\r\n throw new APIError(APIErrorCode.InvalidState, \"The streamer has not been initialized.\");\r\n }\r\n\r\n return this.mStreamer;\r\n }\r\n\r\n /**\r\n * Gets the requested remote logger implementation.\r\n *\r\n * @internal\r\n */\r\n public get remoteLogger(): RemoteLogger {\r\n if (!this.mRemoteLogger) {\r\n throw new APIError(APIErrorCode.InvalidState, \"The remote logger has not been initialized\");\r\n }\r\n\r\n return this.mRemoteLogger;\r\n }\r\n\r\n /** @internal **/\r\n public onNativeLog(level: LoggingLevel, message: string) {\r\n this.remoteLogger?.write(level, message);\r\n }\r\n\r\n /** @internal **/\r\n constructor() {\r\n super();\r\n this.device = Platform.CreateDevice();\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(configuration: Configuration, settings: Settings, storage: IStorage, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, telemetry: ITelemetry, feedback: Feedback, guestMode: GuestMode, gpHandler: GamepadHandler, featureConfigSvc: CloudFeatureConfigs): Promise {\r\n this.mRemoteLogger = Platform.CreateRemoteLogger(feedback, configuration);\r\n this.mNetworkTest = Platform.CreateNetworkTest(this.device, entitlement);\r\n this.mStreamer = Platform.CreateStreamer(configuration, settings, this.device, i18n, entitlement, auth, catalog, telemetry, feedback, this.remoteLogger, this.mNetworkTest, guestMode, gpHandler, featureConfigSvc);\r\n\r\n this.mSdkVersion = new Version(configuration, {\r\n version: this.device.runtimeVersion,\r\n tag: this.device.runtimeVersionTag\r\n }, {\r\n name: this.streamer.libraryName,\r\n version: this.streamer.libraryVersion,\r\n tag: this.streamer.libraryVersionTag\r\n }, {\r\n // The device hasn't been initialized yet, so it doesn't have the settings override for appName/Version yet.\r\n name: settings.appName || this.device.appName,\r\n version: settings.appVersion || this.device.appVersion,\r\n tag: \"\"\r\n });\r\n\r\n const telemetryHelper: TelemetryHelper = Platform.CreateTelemetryHelper(telemetry);\r\n telemetry.setTelemetryHelper(telemetryHelper);\r\n\r\n const initContext: IInitializeContext = {\r\n configuration: configuration,\r\n device: null,\r\n settings: settings,\r\n storage: storage,\r\n sdkVersion: this.mSdkVersion\r\n };\r\n\r\n await this.device.initialize(initContext);\r\n await Promise.all([\r\n this.remoteLogger.initialize(initContext),\r\n this.streamer.initialize(initContext),\r\n this.mNetworkTest.initialize(initContext)\r\n ]);\r\n return Promise.resolve();\r\n }\r\n\r\n private static CreateRemoteLogger(feedback: Feedback, configuration: Configuration): RemoteLogger {\r\n if (PlatformBase.Host(\"android\") && __GFN_RUNTIME_ANDROID__.getLogController) {\r\n return new RemoteLogger(feedback, ANDROID_LOG_FILE_NAME, configuration, __GFN_RUNTIME_ANDROID__.getLogController());\r\n }\r\n\r\n // TODO: add client device support for JSC runtimes when the time comes\r\n if (PlatformBase.Host(\"jsc\")) {\r\n throw new APIError(APIErrorCode.RuntimeHostNotSupported);\r\n }\r\n\r\n return new BrowserRemoteLogger(feedback, DEFAULT_LOG_FILE_NAME, configuration);\r\n }\r\n\r\n private static CreateDevice(): Device {\r\n if (PlatformBase.Host(\"android\")) {\r\n return new AndroidDevice(__GFN_RUNTIME_ANDROID__.getDevice());\r\n }\r\n\r\n // TODO: add client device support for JSC runtimes when the time comes\r\n if (PlatformBase.Host(\"jsc\")) {\r\n throw new APIError(APIErrorCode.RuntimeHostNotSupported);\r\n }\r\n\r\n return new Device();\r\n }\r\n\r\n private static CreateStreamer(config: Configuration, settings: Settings, device: Device, i18n: I18N, entitlement: Entitlement, auth: Auth, catalog: Catalog, telemetry: ITelemetry, feedback: Feedback, remoteLogger: RemoteLogger, networkTest: NetworkTest, guestMode: GuestMode, gpHandler: GamepadHandler, featureConfigSvc: CloudFeatureConfigs): Streamer {\r\n if (PlatformBase.Host(\"android\")) {\r\n return new AndroidStreamer(config, device, i18n, entitlement, auth, catalog, __GFN_RUNTIME_ANDROID__.getStreamer(), telemetry, feedback, remoteLogger, networkTest, guestMode);\r\n }\r\n\r\n // TODO: add client streamer support for JSC runtimes when the time comes\r\n if (PlatformBase.Host(\"jsc\")) {\r\n throw new APIError(APIErrorCode.RuntimeHostNotSupported);\r\n }\r\n\r\n if (PlatformBase.Host(\"test\")) {\r\n return new NullStreamer(config, device, i18n, entitlement, auth, catalog, telemetry, feedback, remoteLogger, networkTest, guestMode);\r\n }\r\n\r\n return new WebStreamer(config, device, i18n, entitlement, auth, catalog, telemetry, feedback, remoteLogger, networkTest, guestMode, gpHandler, featureConfigSvc);\r\n }\r\n\r\n private static CreateNetworkTest(device: Device, entitlement: Entitlement): NetworkTest {\r\n if (PlatformBase.Host(\"android\")) {\r\n return new NetworkTest(device, entitlement, __GFN_RUNTIME_ANDROID__.getNetworkTest());\r\n }\r\n\r\n // TODO: add client network test support for JSC runtimes when the time comes\r\n if (PlatformBase.Host(\"jsc\")) {\r\n throw new APIError(APIErrorCode.RuntimeHostNotSupported);\r\n }\r\n\r\n return new NetworkTest(device, entitlement);\r\n }\r\n\r\n private static CreateTelemetryHelper(telemetry: ITelemetry): TelemetryHelper {\r\n if (PlatformBase.Host(\"android\") && __GFN_RUNTIME_ANDROID__.getTelemetryHelper) {\r\n return new AndroidTelemetryHelper(telemetry, __GFN_RUNTIME_ANDROID__.getTelemetryHelper());\r\n }\r\n\r\n return new NullTelemetryHelper(telemetry, null);\r\n }\r\n}","/* Copyright (c) 2021-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { IInitializeContext } from \"../api.types\";\r\n\r\nimport { Settings } from \"../settings/settings\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\n\r\nconst logger = Logging.getLogger(\"i18n\");\r\n\r\n/**\r\n * Provides translations to strings that GFN Clients may commonly require,\r\n * but are not provided by the Catalog or other NVIDIA servers.\r\n *\r\n * @internal\r\n */\r\nexport class I18N {\r\n private mSettings!: Settings;\r\n private readonly mRestClient: RestClient;\r\n\r\n private mCachedLanguageCode: Nullable = null;\r\n private mCachedLanguageData: Nullable> = null;\r\n\r\n public get languageCode() {\r\n return this.mSettings.languageCode;\r\n }\r\n\r\n /** @internal **/\r\n constructor(restClient: RestClient) {\r\n this.mRestClient = restClient;\r\n }\r\n\r\n public async initialize(context: IInitializeContext) {\r\n this.mSettings = context.settings;\r\n\r\n // If we know our language already, preload the translations to speed up the first\r\n // translation request\r\n if (this.mSettings.languageCode) {\r\n try {\r\n await this.getTranslations();\r\n } catch (e) {\r\n logger.error(\"Could not pre-load translation data: \" + e);\r\n }\r\n }\r\n }\r\n\r\n // Translates a given key to the language specified in Settings. If the language is not set,\r\n // or the key does not exist, fallback to returning the key name\r\n public async translate(key: string) : Promise {\r\n if (!this.mSettings.languageCode) {\r\n return key;\r\n }\r\n\r\n try {\r\n return Utils.object.dereference(await this.getTranslations(), key) || key;\r\n } catch (e) {\r\n logger.error(\"Translation lookup failure: \" + e);\r\n }\r\n\r\n return key;\r\n }\r\n\r\n // Translates and flattens an entire key:object pair\r\n // For example, if the translation json of the desired language has this:\r\n // {\r\n // \"foo\": {\r\n // \"bar\": \"TRANSLATED_BAR\",\r\n // \"baz\": \"TRANSLATED_BAZ\",\r\n // }\r\n // }\r\n // Then the result will be\r\n // {\r\n // \"foo.bar\": \"TRANSLATED_BAR\",\r\n // \"foo.baz\": \"TRANSLATED_BAZ\"\r\n // }\r\n public async flatten(key: string): Promise<{ [key: string]: string }> {\r\n let ret = {};\r\n if (!this.mSettings.languageCode) {\r\n return ret;\r\n }\r\n\r\n try {\r\n const translations = Utils.object.dereference(await this.getTranslations(), key);\r\n if (Utils.object.isObject(translations)) {\r\n return this._flatten(translations);\r\n }\r\n } catch (e) {\r\n logger.error(\"Translation lookup failure: \" + e);\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n private _flatten(obj: Object, keypath: string[] = []): { [key: string]: string } {\r\n let ret: any = {};\r\n for (const [k,v] of Object.entries(obj)) {\r\n let new_keypath = keypath.concat([k])\r\n if (Utils.object.isObject(v)) {\r\n ret = Object.assign(ret, this._flatten(v, new_keypath));\r\n } else {\r\n ret[new_keypath.join(\".\")] = v;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n private async getTranslations(): Promise {\r\n if (this.mSettings.languageCode !== this.mCachedLanguageCode || !this.mCachedLanguageData) {\r\n this.mCachedLanguageCode = this.mSettings.languageCode;\r\n this.mCachedLanguageData = this.loadTranslations();\r\n }\r\n\r\n return this.mCachedLanguageData;\r\n }\r\n\r\n private async loadTranslations(): Promise {\r\n if (!this.mSettings.languageCode) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Cannot load translations, no GFN.settings.languageCode available.\");\r\n }\r\n\r\n const languageCode = this.mSettings.languageCode;\r\n return this.mRestClient.getTranslationData(languageCode).then((json) => {\r\n logger.info(`Loaded translation data for ${languageCode}`)\r\n return json;\r\n });\r\n }\r\n}\r\n","/* Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { IInitializable, Nullable, Undefined } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { I18N } from \"../i18n/i18n\";\r\nimport { DeviceKind, DeviceOS } from \"../device/device.types\";\r\nimport { Auth } from \"../idm/auth\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { KeyboardLayout, ServerInfo, ServerType, Zone, ZoneTable, serverLatencyEntry } from \"./server.types\";\r\nimport {\r\n MetadataEntity,\r\n ServerInfoResponseEntity,\r\n SessionEntity,\r\n SessionResponseEntity,\r\n SessionsResponseEntity\r\n} from \"./server.entities\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { Platform } from \"../platform/platform\";\r\nimport KEYBOARD_LAYOUTS from \"../../config/keyboard-layouts.json\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { IDBStorage } from \"../storage/idb-storage\";\r\n\r\nconst HTTP_REPLACEMENT_REGEX: RegExp = /^(?:http|https)\\:\\/\\/(.*)$/i;\r\nconst DEFAULT_ZONE_NAME: string = \"default\";\r\nconst SERVER_LATENCY_DB_NAME: string = \"cachedServerLatencies\";\r\nconst logger = Logging.getLogger(\"server\");\r\n\r\nenum ServerInfoServerType {\r\n Unknown = 0,\r\n Nimbus,\r\n PC,\r\n PCRoamingProxy,\r\n CS,\r\n QS,\r\n GS\r\n}\r\n\r\n/**\r\n * Class for getting server and session information.\r\n */\r\nexport class Server implements IInitializable {\r\n private readonly mPlatform: Platform;\r\n private readonly mAuth: Auth;\r\n private readonly mRestClient: RestClient;\r\n private readonly mI18N: I18N;\r\n private mConfiguration!: Configuration;\r\n private mSettings!: Settings;\r\n private mDB: IDBStorage;\r\n\r\n /** @internal **/\r\n constructor(platform: Platform, auth: Auth, restClient: RestClient, i18n: I18N) {\r\n this.mPlatform = platform;\r\n this.mAuth = auth;\r\n this.mRestClient = restClient;\r\n this.mI18N = i18n;\r\n this.mDB = new IDBStorage(\"GFN-Client-SDK\", \"Telemetry\"); // TODO: Attempting to create a second DB with a name other than \"Telemetry\" exposes a bug in the underlying IDBStorage.\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext) {\r\n this.mConfiguration = context.configuration;\r\n this.mSettings = context.settings;\r\n await this.mDB.init();\r\n }\r\n\r\n /**\r\n * Gets the streaming service server information.\r\n *\r\n * See [Server Information](../guides/server-info.html) for more details.\r\n *\r\n * @param serviceUrl\r\n * An optional service url. If omitted, the default service url will be used.\r\n * @param skipLatencyBasedRouting\r\n * An optional paremeter which allows the caller to skip latency-based routing.\r\n * This can speed up stream start times at the cost of potentially choosing a sub-optimal streaming server\r\n *\r\n * @returns\r\n * The server information.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidServerInfo}. The data returned from the server is invalid.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n *\r\n * @async\r\n */\r\n public async getServerInfo(serviceUrl?: string, skipLatencyBasedRouting?: boolean): Promise {\r\n const url: string = this.resolveServiceUrl(serviceUrl);\r\n const serverInfoResponse: ServerInfoResponseEntity = await this.mRestClient.getServerInfo(url);\r\n\r\n // ensure we have valid server info to work with\r\n if (!serverInfoResponse.requestStatus || !serverInfoResponse.metaData) {\r\n throw new APIError(APIErrorCode.InvalidServerInfo);\r\n }\r\n\r\n let defaultZone: Zone = {\r\n name: DEFAULT_ZONE_NAME,\r\n address: \"\"\r\n };\r\n\r\n // no zones were sent back, use this server as the default zone\r\n if (serverInfoResponse.metaData.length === 0) {\r\n defaultZone.address = Utils.url.create(url).hostname;\r\n\r\n const serverInfo: ServerInfo = {\r\n version: serverInfoResponse.version,\r\n vpcId: serverInfoResponse.requestStatus.serverId,\r\n serverType: Server.getServerType(serverInfoResponse.serverType),\r\n monitorSettings: serverInfoResponse.monitorSettings,\r\n defaultZone: defaultZone,\r\n zones: {}\r\n };\r\n\r\n logger.warn(`No zones were returned in the server info response, using zone=${serverInfo.defaultZone.address}, vpcId=${serverInfo.vpcId}`);\r\n return serverInfo;\r\n }\r\n\r\n // create a list of zones from the server metadata and\r\n // remove the protocol portion from the url, so it is just\r\n // the zone address\r\n const zones: Zone[] = serverInfoResponse.metaData.filter((item: MetadataEntity) => {\r\n return (item.value && Utils.string.startsWith(item.value, \"http\"));\r\n }).map((item: MetadataEntity) => {\r\n const addr: string = item.value ? item.value.toLowerCase().replace(HTTP_REPLACEMENT_REGEX, \"$1\") : \"\";\r\n return {\r\n name: item.key,\r\n address: addr\r\n };\r\n });\r\n\r\n // figure out what the default zone should be using LBR\r\n if (skipLatencyBasedRouting !== true) {\r\n defaultZone = await this.getOptimalZone(zones) || defaultZone;\r\n }\r\n\r\n // still no zone - just use the resolved service url\r\n if (!defaultZone.address) {\r\n defaultZone.address = Utils.url.create(url).hostname;\r\n }\r\n\r\n // TODO: save default zone to storage?\r\n\r\n // create a zone mapping\r\n const zoneTable: ZoneTable = {};\r\n\r\n for (const z of zones) {\r\n zoneTable[z.address] = z;\r\n }\r\n\r\n const serverInfo: ServerInfo = {\r\n version: serverInfoResponse.version,\r\n vpcId: serverInfoResponse.requestStatus.serverId,\r\n serverType: Server.getServerType(serverInfoResponse.serverType),\r\n monitorSettings: serverInfoResponse.monitorSettings,\r\n defaultZone: defaultZone,\r\n zones: zoneTable\r\n };\r\n\r\n logger.info(`Resolved server info: zone=${serverInfo.defaultZone.address}, vpcId=${serverInfo.vpcId}`);\r\n\r\n return serverInfo;\r\n }\r\n\r\n private static getServerType(type: Undefined): ServerType {\r\n switch (type) {\r\n case ServerInfoServerType.Nimbus:\r\n return ServerType.Nimbus;\r\n case ServerInfoServerType.PC:\r\n return ServerType.GameStream;\r\n case ServerInfoServerType.PCRoamingProxy:\r\n return ServerType.GameStreamRoamingProxy;\r\n case ServerInfoServerType.CS:\r\n return ServerType.CloudStation;\r\n case ServerInfoServerType.QS:\r\n return ServerType.QuadroStation;\r\n default:\r\n logger.warn(`Unexpected server type ${type}.`);\r\n return ServerType.Unknown;\r\n }\r\n }\r\n\r\n /**\r\n * Gets a list of active sessions for the currently logged in user.\r\n *\r\n * @param serviceUrl\r\n * An optional service url. If omitted, the default service url will be used.\r\n *\r\n * @returns\r\n * A list of a sessions.\r\n *\r\n * @throws {@link MissingTokenError}\r\n * when no user has been authenticated.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async getActiveSessions(serviceUrl?: string): Promise {\r\n const url: string = this.resolveServiceUrl(serviceUrl);\r\n const entity: SessionsResponseEntity = await this.mAuth.authenticatedRestCall((token: string) => {\r\n return this.mRestClient.getActiveSessions(url, token);\r\n });\r\n\r\n return entity.sessions ?? [];\r\n }\r\n\r\n /**\r\n * Gets a session for the currently logged in user.\r\n *\r\n * @param sessionId\r\n * The unique identifier of the session.\r\n *\r\n * @param serviceUrl\r\n * An optional service url. If omitted, the default service url will be used.\r\n *\r\n * @returns\r\n * A session; otherwise, null if the session id was not found.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. See error details for information on the missing parameter.\r\n * @throws {@link HttpError}\r\n *\r\n * @async\r\n */\r\n public async getSession(sessionId: string, serviceUrl?: string): Promise {\r\n const url: string = this.resolveServiceUrl(serviceUrl);\r\n const entity: SessionResponseEntity = await this.mRestClient.getSession(url, sessionId);\r\n\r\n // getSession either guarantees a session object\r\n // or an error is thrown\r\n return entity.session!;\r\n }\r\n\r\n /**\r\n * Gets the available keyboard layouts with descriptions for this Device\r\n *\r\n * The descriptions provided with the list of keyboard layouts is localized\r\n * depending on {@link Settings.languageCode}\r\n *\r\n * @returns\r\n * An array of KeyboardLayouts\r\n *\r\n * @async\r\n */\r\n public async getKeyboardLayouts(): Promise {\r\n let layouts;\r\n if (this.mPlatform.device.os === DeviceOS.macOS) {\r\n if (this.mPlatform.device.kind === DeviceKind.Desktop) {\r\n layouts = KEYBOARD_LAYOUTS[\"mac\"][\"desktop\"];\r\n } else {\r\n layouts = KEYBOARD_LAYOUTS[\"mac\"][\"default\"];\r\n }\r\n } else {\r\n if (this.mPlatform.device.os === DeviceOS.Windows && this.mPlatform.device.kind === DeviceKind.Desktop) {\r\n layouts = KEYBOARD_LAYOUTS[\"win\"][\"desktop\"];\r\n } else {\r\n layouts = KEYBOARD_LAYOUTS[\"win\"][\"default\"];\r\n }\r\n }\r\n\r\n return Promise.all(layouts.map(async (layout: string): Promise => {\r\n return {\r\n localeCode: layout,\r\n description: await this.mI18N.translate(`keyboardLayouts.${layout}`)\r\n }\r\n }));\r\n }\r\n\r\n private resolveServiceUrl(serviceUrl?: string): string {\r\n let url: string = serviceUrl ?? this.mSettings.serviceUrl;\r\n\r\n // no service url was directly provided or configured at runtime\r\n if (!url) {\r\n\r\n // if we have a logged-in user, pull the service url from it\r\n if (this.mAuth.authorizedUser) {\r\n url = this.mAuth.authorizedUser.streamingServiceUrl;\r\n }\r\n\r\n // otherwise, fallback to the pre-configured service url\r\n if (!url) {\r\n url = this.mConfiguration.grid.serverUrl;\r\n }\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Get the optimal zone based on latency\r\n */\r\n private async getOptimalZone(zones: Zone[]): Promise> {\r\n try {\r\n const servers = zones.map((zone: Zone) => zone.address);\r\n const networkFingerprint = this.mPlatform.mNetworkTest.getNetworkFingerprint();\r\n let optimalServer = await this.getCachedOptimalServer(networkFingerprint, servers);\r\n if (!optimalServer) {\r\n optimalServer = await this.mPlatform.mNetworkTest.runLatencyTest(servers);\r\n this.updateOptimalServerCache(networkFingerprint, servers, optimalServer);\r\n } else {\r\n logger.info(\"Using cached latency info\")\r\n }\r\n const arrayWithSingleZone = zones.filter((zone: Zone) => zone.address === optimalServer);\r\n logger.info(\"Optimal zone chosen based on latency: \" + optimalServer);\r\n return arrayWithSingleZone[0];\r\n } catch (e) {\r\n logger.info(\"Unable to get optimal zone for streaming based on latency. Estimating based on region instead.\");\r\n logger.info(\"Error was: \" + e);\r\n }\r\n return null;\r\n }\r\n\r\n /** @internal */\r\n private async getCachedOptimalServer(fingerprint: string, serverList: string[]): Promise> {\r\n // Cache is assumed to still be valid so long as:\r\n // 1) There exists a cached zone and zone list for a given network fingerprint\r\n // 2) The cached optimal zone still exists in the server list\r\n // 3) No new zones have been added since the last cache\r\n // The network fingerprint = sha1(\"\")\r\n // For the client SDK, we leave it up to the platform implementation\r\n try {\r\n const serverLatencyDb: serverLatencyEntry[] = await this.mDB.get(SERVER_LATENCY_DB_NAME);\r\n if (!serverLatencyDb) {\r\n return null;\r\n }\r\n const serverLatencyEntry = serverLatencyDb.find((item) => item.fingerprint === fingerprint);\r\n if (!serverList.includes(serverLatencyEntry?.lowestLatencyServer || \"error\")) {\r\n return null;\r\n }\r\n if (!serverList.every((server: string) => serverLatencyEntry?.serverList.includes(server))) {\r\n // server list has something that wasn't there before\r\n return null;\r\n }\r\n return serverLatencyEntry?.lowestLatencyServer || null;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /** internal */\r\n private async updateOptimalServerCache(fingerprint: string, serverList: string[], optimalServer: string) {\r\n try {\r\n const serverLatencyDb = await this.mDB.get(SERVER_LATENCY_DB_NAME);\r\n if (serverLatencyDb) {\r\n let dbEntry = serverLatencyDb.find((item: serverLatencyEntry) => item.fingerprint === fingerprint);\r\n if (!dbEntry) {\r\n serverLatencyDb.push({ fingerprint: fingerprint, serverList: serverList, lowestLatencyServer: optimalServer });\r\n } else {\r\n dbEntry.lowestLatencyServer = optimalServer;\r\n dbEntry.serverList = serverList;\r\n }\r\n this.mDB.set(SERVER_LATENCY_DB_NAME, serverLatencyDb);\r\n } else {\r\n await this.mDB.set(SERVER_LATENCY_DB_NAME, [{ fingerprint: fingerprint, serverList: serverList, lowestLatencyServer: optimalServer }]);\r\n }\r\n } catch (e) {\r\n await this.mDB.set(SERVER_LATENCY_DB_NAME, [{ fingerprint: fingerprint, serverList: serverList, lowestLatencyServer: optimalServer }]);\r\n }\r\n }\r\n}","function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\n// Staging base url (dev)\nvar STAGING_URL = 'https://events.gfestage.nvidia.com'; // Production base url (prod)\n\nvar PROD_URL = 'https://events.gfe.nvidia.com'; // API supports a maximum of 128 events sent in one call\n\nvar MAX_EVENTS_SENT = 128; // Default interval check for queued events\n\nvar DEFAULT_INTERVAL = 5000;\nvar DEFAULT_COMMON_EVENT_ATTRIBUTES = {\n deviceId: '',\n externalUserId: '',\n idpId: '',\n sessionId: '',\n userId: '',\n eventProtocol: '1.2'\n};\nvar GXTelemetry = function GXTelemetry(_ref) {\n var _this2 = this;\n\n var _this = this,\n _this3 = this,\n _this4 = this;\n\n var commonEventAttributes = _ref.commonEventAttributes,\n _ref$isProd = _ref.isProd,\n isProd = _ref$isProd === void 0 ? false : _ref$isProd,\n _ref$intervalDelay = _ref.intervalDelay,\n intervalDelay = _ref$intervalDelay === void 0 ? DEFAULT_INTERVAL : _ref$intervalDelay;\n\n // Immediately send an event\n this.sendEvent = function (_ref2) {\n var name = _ref2.name,\n parameters = _ref2.parameters,\n _ref2$timestamp = _ref2.timestamp,\n timestamp = _ref2$timestamp === void 0 ? '' : _ref2$timestamp;\n\n try {\n return Promise.resolve(_this.sendEvents([{\n name: name,\n parameters: parameters,\n ts: timestamp ? timestamp : new Date().toISOString()\n }]));\n } catch (e) {\n return Promise.reject(e);\n }\n }; // Queue up an event to be sent in the next interval\n\n\n this.queueEvent = function (_ref3) {\n var name = _ref3.name,\n parameters = _ref3.parameters,\n _ref3$timestamp = _ref3.timestamp,\n timestamp = _ref3$timestamp === void 0 ? '' : _ref3$timestamp;\n\n _this2.queuedEvents.push({\n name: name,\n parameters: parameters,\n ts: timestamp ? timestamp : new Date().toISOString()\n });\n }; // Actually make the call to send event(s)\n\n\n this.sendEvents = function (events) {\n try {\n return Promise.resolve(fetch(_this3.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Event-Protocol': _this3.commonEventAttributes.eventProtocol\n },\n body: JSON.stringify(_extends({}, _this3.commonEventAttributes, {\n sentTs: new Date().toISOString(),\n events: events\n }))\n })).then(function (response) {\n return Promise.resolve(response.ok); // Returns boolean whether event logged successfully or not\n });\n } catch (e) {\n return Promise.reject(e);\n }\n }; // Starts the interval to check for and send queued events\n\n\n this.startQueue = function () {\n // Stop or clear any existing intervals\n _this2.stopQueue(); // Now start our new interval\n\n\n _this2.intervalID = window.setInterval(_this2.flushQueue, _this2.intervalDelay);\n }; // Immediately flush the queue and send any pending events\n\n\n this.flushQueue = function () {\n try {\n if (_this4.queuedEvents.length > 0) {\n return Promise.resolve(_this4.sendEvents(_this4.queuedEvents.splice(0, MAX_EVENTS_SENT)));\n }\n\n return Promise.resolve(0);\n } catch (e) {\n return Promise.reject(e);\n }\n }; // Stops the queued events from being sent, call startQueue to resume\n\n\n this.stopQueue = function () {\n clearInterval(_this2.intervalID);\n _this2.intervalID = undefined;\n }; // Set common attributes if something changes\n\n\n this.overrideCommonEventsAttributes = function (override) {\n _this2.commonEventAttributes = _extends({}, _this2.commonEventAttributes, override);\n };\n\n if (!commonEventAttributes) {\n throw new Error('please provide commonEventAttributes to GXTelemetry constructor');\n }\n\n this.endpoint = (isProd ? PROD_URL : STAGING_URL) + \"/v1.0/events/json\";\n this.commonEventAttributes = _extends({}, DEFAULT_COMMON_EVENT_ATTRIBUTES, commonEventAttributes);\n this.queuedEvents = [];\n this.intervalDelay = intervalDelay;\n this.startQueue();\n};\n\nexport default GXTelemetry;\nexport { GXTelemetry };\n//# sourceMappingURL=telemetry-sdk.esm.js.map\n","/* Copyright (c) 2022-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n\r\nimport { GXTelemetry } from \"@kodiak/telemetry-sdk\";\r\nimport gxTelemetryPackageJson from \"@kodiak/telemetry-sdk/package.json\";\r\nimport schema from \"../../telemetry/EventsSchema-GFN_Client_SDK.json\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Platform } from \"../platform/platform\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { Version } from \"../version/version\";\r\nimport { ITelemetry, NativeStreamerConfig, StreamingQualityType, VSyncMode, TelemetryDest, StorableEvent, StoredEventAttributes, GDPRCategory, KodiakGDPRType, StreamerType, ClickType, InputType } from \"./telemetry.types\";\r\nimport { ClientType, TelemetryEventPayload, PackageVersion } from \"@gamestream-stable/gridserver\";\r\nimport { ToGsBrowserName, ToNvDeviceType, ToNvDeviceOs } from \"../platform/platform-mappings\";\r\nimport { HttpBackoffStrategy, IHttpRequest, IHttpResponse, IHttpResponseStats, ServiceInfo } from \"../core/http-client.types\";\r\nimport { ServiceSubUseCase } from \"../rest/rest-client.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { TelemetryHelper } from \"./telemetry-helper\";\r\nimport { IDBStorage } from \"../storage/idb-storage\";\r\nimport { Consent } from \"../idm/consent\";\r\nimport { User } from \"../idm/user\";\r\n\r\nconst logger = Logging.getLogger(\"telemetry/telemetry\");\r\nconst STORED_CLIENT_EVENTS_KEY = \"storedClientEvents\";\r\nconst STORED_STREAMER_EVENTS_KEY = \"storedStreamerEvents\";\r\nconst STORED_GRID_EVENTS_KEY = \"storedGridEvents\";\r\nconst PENDING_CLIENT_EVENTS_KEY = \"pendingClientEvents\";\r\nconst PENDING_STREAMER_EVENTS_KEY = \"pendingStreamerEvents\";\r\nconst PENDING_GRID_EVENTS_KEY = \"pendingGridEvents\";\r\nconst MAX_EVENTS_SENT = 128;\r\nconst UNDEFINED = \"undefined\";\r\n\r\n/** @internal */\r\nexport class Telemetry implements ITelemetry {\r\n private readonly mPlatform: Platform;\r\n private readonly mConsent: Consent;\r\n private mConfiguration!: Configuration;\r\n private mSettings!: Settings;\r\n private mGxTelemetry: Nullable;\r\n private mStreamerGxTelemetry: Nullable;\r\n private mSystemInfoGuid!: string;\r\n private mTelemetrySessionId!: string;\r\n private mTelemetryHelper!: TelemetryHelper;\r\n private mHeldTelemetry: { event: any, dest: TelemetryDest, overrideSessionId?: string}[];\r\n private mDB: IDBStorage;\r\n private mQueuedOp: Promise;\r\n private mStoredUserId = UNDEFINED;\r\n private mStoredIdpId = UNDEFINED;\r\n private mStoredExternalUserId = UNDEFINED;\r\n private mStoredGdprBehOptIn = KodiakGDPRType.None;\r\n private mStoredGdprTechOptIn = KodiakGDPRType.None;\r\n private mIsInitialized = false;\r\n private mGridGxTelemetry: Map = new Map();\r\n private mEventDataUpdateCallbacks : Array<() => void> = new Array<() => void>();\r\n\r\n public get sessionId(): string {\r\n return this.mTelemetrySessionId;\r\n }\r\n\r\n public get systemInfoGuid(): string {\r\n return this.mSystemInfoGuid;\r\n }\r\n\r\n private get streamerType(): StreamerType {\r\n return this.mPlatform.device.isBrowser? StreamerType.WebRTC: StreamerType.Native;\r\n }\r\n\r\n /** @internal **/\r\n constructor(platform: Platform, consent: Consent) {\r\n this.mPlatform = platform;\r\n this.mConsent = consent;\r\n this.mStreamerGxTelemetry = null;\r\n this.mGridGxTelemetry.clear();\r\n this.mGxTelemetry = null;\r\n this.mHeldTelemetry = [];\r\n this.mDB = new IDBStorage(\"GFN-Client-SDK\", \"Telemetry\");\r\n this.mQueuedOp = Promise.resolve();\r\n\r\n this.mConsent.on(\"eulaAcceptanceUpdate\", this.onEulaAcceptanceUpdate.bind(this));\r\n this.mConsent.on(\"userUpdate\", this.onUserUpdate.bind(this));\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext) {\r\n this.mConfiguration = context.configuration;\r\n this.mSettings = context.settings;\r\n this.mTelemetrySessionId = Utils.uuid.create();\r\n // An unconfigured Client ID might be expected when in guest mode.\r\n if (this.mSettings.clientId === \"YOUR_CLIENT_ID\") {\r\n this.mSettings.clientId = \"\";\r\n }\r\n this.mGxTelemetry = new GXTelemetry({\r\n commonEventAttributes: {\r\n clientId: schema.schemaMeta.clientId,\r\n clientVer: this.mPlatform.sdkVersion.version,\r\n deviceId: this.mPlatform.device.id,\r\n eventProtocol: this.mConfiguration.telemetry.eventProtocol,\r\n eventSchemaVer: schema.schemaMeta.schemaVersion,\r\n eventSysVer: gxTelemetryPackageJson.version,\r\n externalUserId: this.mStoredExternalUserId,\r\n deviceGdprTechOptIn: KodiakGDPRType.None,\r\n deviceGdprBehOptIn: KodiakGDPRType.None,\r\n gdprBehOptIn: this.mStoredGdprBehOptIn,\r\n gdprTechOptIn: this.mStoredGdprTechOptIn,\r\n idpId: this.mStoredIdpId,\r\n sessionId: this.mTelemetrySessionId,\r\n userId: this.mStoredUserId,\r\n // Adding ts-ignore for properties that were added in event-schema 1.4 but are\r\n // not yet present in @kodiak/telemetry-sdk\r\n // https://docs.google.com/document/d/18w5ap6rnt1mxzbZPBwucY9BK6LmnsOkQx4wvbXUBEsk\r\n // @ts-ignore\r\n // Added in eventProtocol 1.3\r\n clientType: ClientType.GFNSDK,\r\n clientVariant: UNDEFINED,\r\n deviceOS: ToNvDeviceOs(this.mPlatform.device.os, this.mPlatform.device.platformId),\r\n deviceOSVersion: this.mPlatform.device.version,\r\n deviceType: ToNvDeviceType(this.mPlatform.device.kind),\r\n deviceModel: this.mPlatform.device.model || UNDEFINED,\r\n deviceMake: this.mPlatform.device.manufacturer || UNDEFINED,\r\n // Added in eventProtocol 1.4\r\n browserType: ToGsBrowserName(this.mPlatform.device.browserId),\r\n integrationId: this.mSettings.clientId || this.mSettings.partnerId,\r\n gdprFuncOptIn: \"Full\",\r\n deviceGdprFuncOptIn: \"Full\",\r\n },\r\n isProd: this.mConfiguration.telemetry.isProd,\r\n intervalDelay: this.mConfiguration.telemetry.intervalDelayMs\r\n });\r\n\r\n await this.mDB.init();\r\n this.mTelemetryHelper.initialize();\r\n\r\n const appInfoEvent = this.createAppInfoEvent(context.sdkVersion);\r\n const systemInfoEvent = this.createSystemInfoEvent();\r\n\r\n this.queueEvent(appInfoEvent, TelemetryDest.GxT);\r\n this.queueEvent(systemInfoEvent, TelemetryDest.GxT);\r\n\r\n window.addEventListener(\"unhandledrejection\", this);\r\n window.setInterval(this.flushAllQueues.bind(this), this.mConfiguration.telemetry.intervalDelayMs);\r\n this.mIsInitialized = true;\r\n this.sendHeldTelemetry();\r\n }\r\n\r\n private sendHeldTelemetry() {\r\n if (this.mConsent.acceptEula && this.mStoredUserId !== UNDEFINED && this.mIsInitialized) {\r\n for (const telemetryItem of this.mHeldTelemetry) {\r\n this.sendEvent(telemetryItem.event, telemetryItem.dest, telemetryItem.overrideSessionId);\r\n }\r\n this.mHeldTelemetry = [];\r\n }\r\n }\r\n\r\n private getGridEventsKey(clientId : string) : string {\r\n return `${STORED_GRID_EVENTS_KEY}-${clientId}`;\r\n }\r\n\r\n private getPendingGridEventsKey(clientId : string) : string {\r\n return `${PENDING_GRID_EVENTS_KEY}-${clientId}`;\r\n }\r\n\r\n /** @internal **/\r\n public onEulaAcceptanceUpdate(accepted: boolean): void {\r\n logger.info(`System has ${!accepted?\"not\":\"\"} accepted the EULA`)\r\n if (accepted && this.mStoredUserId !== UNDEFINED) {\r\n this.sendHeldTelemetry();\r\n }\r\n this.mEventDataUpdateCallbacks.forEach(cb => cb());\r\n }\r\n\r\n /** @internal **/\r\n public registerEventDataUpdateCallback(callback: () => void) : void {\r\n this.mEventDataUpdateCallbacks.push(callback);\r\n }\r\n\r\n /** @internal **/\r\n public get eventDataElements() {\r\n return {\r\n commonData: {\r\n clientId: this.mGxTelemetry?.commonEventAttributes.clientId,\r\n clientVer: this.mGxTelemetry?.commonEventAttributes.clientVer,\r\n clientType: ClientType.GFNSDK,\r\n clientVariant: UNDEFINED,\r\n eventSchemaVer: this.mGxTelemetry?.commonEventAttributes.eventSchemaVer,\r\n eventSysVer: this.mGxTelemetry?.commonEventAttributes.eventSysVer,\r\n deviceId: this.mGxTelemetry?.commonEventAttributes.deviceId,\r\n userId: this.mGxTelemetry?.commonEventAttributes.userId,\r\n externalUserId: this.mGxTelemetry?.commonEventAttributes.externalUserId,\r\n idpId: this.mGxTelemetry?.commonEventAttributes.idpId,\r\n browserType: ToGsBrowserName(this.mPlatform.device.browserId),\r\n integrationId: this.mSettings.clientId || this.mSettings.partnerId,\r\n sessionId: this.mGxTelemetry?.commonEventAttributes.sessionId,\r\n deviceOS: ToNvDeviceOs(this.mPlatform.device.os, this.mPlatform.device.platformId),\r\n deviceOSVersion: this.mPlatform.device.version,\r\n deviceType: ToNvDeviceType(this.mPlatform.device.kind),\r\n deviceModel: this.mPlatform.device.model || UNDEFINED,\r\n deviceMake: this.mPlatform.device.manufacturer || UNDEFINED,\r\n platform: \"Web\",\r\n eventProtocol: this.mGxTelemetry?.commonEventAttributes.eventProtocol,\r\n deviceGdprFuncOptIn: \"Full\",\r\n deviceGdprTechOptIn: this.mGxTelemetry?.commonEventAttributes.deviceGdprTechOptIn,\r\n deviceGdprBehOptIn: this.mGxTelemetry?.commonEventAttributes.deviceGdprBehOptIn,\r\n gdprFuncOptIn: \"Full\",\r\n gdprTechOptIn: this.mGxTelemetry?.commonEventAttributes.gdprTechOptIn,\r\n gdprBehOptIn: this.mGxTelemetry?.commonEventAttributes.gdprBehOptIn\r\n },\r\n config: this.mConfiguration.telemetry.ragnarokConfig,\r\n experiments: [],\r\n telemetryEventIds: {\r\n systemInfoGuid: this.mSystemInfoGuid\r\n }\r\n };\r\n }\r\n\r\n /** @internal **/\r\n public onUserUpdate(user: Nullable): void {\r\n this.executeQueuedOps(() => {\r\n logger.info(`Updating userId to ${user?.id}`);\r\n this.mStoredUserId = user?.id ?? UNDEFINED;\r\n this.mStoredIdpId = user?.idpId ?? UNDEFINED;\r\n this.mStoredExternalUserId = user?.externalId ?? UNDEFINED;\r\n this.mStoredGdprBehOptIn = user?.consents.trackBehavioralData? KodiakGDPRType.Full : KodiakGDPRType.None;\r\n this.mStoredGdprTechOptIn = user?.consents.trackTechnicalData? KodiakGDPRType.Full : KodiakGDPRType.None;\r\n if (this.mGxTelemetry) {\r\n this.mGxTelemetry.commonEventAttributes.userId = this.mStoredUserId;\r\n this.mGxTelemetry.commonEventAttributes.idpId = this.mStoredIdpId;\r\n this.mGxTelemetry.commonEventAttributes.externalUserId = this.mStoredExternalUserId;\r\n this.mGxTelemetry.commonEventAttributes.gdprBehOptIn = this.mStoredGdprBehOptIn;\r\n this.mGxTelemetry.commonEventAttributes.gdprTechOptIn = this.mStoredGdprTechOptIn;\r\n }\r\n if (this.mStreamerGxTelemetry) {\r\n this.mStreamerGxTelemetry.commonEventAttributes.userId = this.mStoredUserId;\r\n this.mStreamerGxTelemetry.commonEventAttributes.idpId = this.mStoredIdpId;\r\n this.mStreamerGxTelemetry.commonEventAttributes.externalUserId = this.mStoredExternalUserId;\r\n this.mStreamerGxTelemetry.commonEventAttributes.gdprBehOptIn = this.mStoredGdprBehOptIn;\r\n this.mStreamerGxTelemetry.commonEventAttributes.gdprTechOptIn = this.mStoredGdprTechOptIn;\r\n }\r\n for (const [clientId, teleInstance] of this.mGridGxTelemetry) {\r\n teleInstance.commonEventAttributes.userId = this.mStoredUserId;\r\n teleInstance.commonEventAttributes.idpId = this.mStoredIdpId;\r\n teleInstance.commonEventAttributes.externalUserId = this.mStoredExternalUserId;\r\n teleInstance.commonEventAttributes.gdprBehOptIn = this.mStoredGdprBehOptIn;\r\n teleInstance.commonEventAttributes.gdprTechOptIn = this.mStoredGdprTechOptIn;\r\n }\r\n if (this.mConsent.acceptEula) {\r\n this.sendHeldTelemetry();\r\n }\r\n this.mEventDataUpdateCallbacks.forEach(cb => cb());\r\n });\r\n }\r\n\r\n private isCommonEventDataEqual(data1: StoredEventAttributes, data2: StoredEventAttributes) {\r\n const allValues1 = Object.values(data1);\r\n const allValues2 = Object.values(data2);\r\n for (let i = 0; i < allValues1.length; i++) {\r\n if (allValues1[i] !== allValues2[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Pulls all events from the database specified by dbKey and sends them to the server.\r\n *\r\n * Due to limitations on what can be sent in a single chunk, a call to this function will\r\n * move everything that can be sent at once into the pending database and send the data.\r\n *\r\n * It is expected that any remaining data will get sent in the next telemetry interval\r\n *\r\n * However, calling this function will resend any currently pending data in the database,\r\n * so be sure previous data has had a chance to finish processing before calling again.\r\n */\r\n private flushQueue(dbKey: string, pendingDbKey: string, telemetryInstance: GXTelemetry) {\r\n this.executeQueuedOps(()=> Promise.all([this.mDB.get(pendingDbKey), this.mDB.get(dbKey)]), ([oldPendingEvents, storedEvents]: [StorableEvent[], StorableEvent[]]) => {\r\n // If there is still pending telemetry that hasn't been sent, move it back to the front of the normal queue\r\n storedEvents = [...(oldPendingEvents ?? []), ...(storedEvents ?? [])];\r\n if (storedEvents.length === 0) {\r\n return;\r\n }\r\n\r\n const storedEventAttributes = telemetryInstance.commonEventAttributes;\r\n let previousEventAttributes = storedEvents[0].attributes;\r\n telemetryInstance.commonEventAttributes = {\r\n ...telemetryInstance.commonEventAttributes,\r\n ...storedEvents[0].attributes,\r\n };\r\n let i = 0;\r\n const eventsToSend: any[] = [];\r\n for (;i < storedEvents.length && i < MAX_EVENTS_SENT; i++) {\r\n if (!this.isCommonEventDataEqual(previousEventAttributes, storedEvents[i].attributes)) {\r\n break;\r\n }\r\n eventsToSend.push(storedEvents[i].event);\r\n }\r\n // Put the reminder back in the queue\r\n const pendingEvents = storedEvents.splice(0, i);\r\n const storedEventsOp = this.mDB.set(dbKey, storedEvents);\r\n // Put the events we're currently trying to send in the PENDING list\r\n const pendingEventsOp = this.mDB.set(pendingDbKey, pendingEvents);\r\n\r\n return telemetryInstance.sendEvents(eventsToSend).then((success: boolean) => {\r\n telemetryInstance.commonEventAttributes = storedEventAttributes;\r\n if (success) {\r\n logger.info(`Telemetry sent ${eventsToSend.length} events`);\r\n return Promise.all([this.mDB.remove(pendingDbKey), storedEventsOp, pendingEventsOp]);\r\n } else {\r\n logger.error(\"Failed to send some telemetry events! Will attempt to resend\");\r\n return Promise.all([undefined, storedEventsOp, pendingEventsOp]);\r\n }\r\n }, (e) => {\r\n console.log(\"An error occurred while sending telemetry: \" + e);\r\n return Promise.all([undefined, storedEventsOp, pendingEventsOp]);\r\n });\r\n });\r\n }\r\n\r\n private flushAllQueues() {\r\n if (this.mGxTelemetry) {\r\n this.flushQueue(STORED_CLIENT_EVENTS_KEY, PENDING_CLIENT_EVENTS_KEY, this.mGxTelemetry);\r\n }\r\n for (const [clientId, teleInstance] of this.mGridGxTelemetry) {\r\n this.flushQueue(this.getGridEventsKey(clientId), this.getPendingGridEventsKey(clientId), teleInstance!);\r\n }\r\n if (this.mStreamerGxTelemetry) {\r\n this.flushQueue(STORED_STREAMER_EVENTS_KEY, PENDING_STREAMER_EVENTS_KEY, this.mStreamerGxTelemetry);\r\n }\r\n }\r\n\r\n private sendEvent(event: any, dest: TelemetryDest, overrideSessionId?: string) {\r\n this.executeQueuedOps(() => {\r\n let telemetryInst: GXTelemetry;\r\n let dbKey: string;\r\n switch(dest) {\r\n case TelemetryDest.GxT: {\r\n dbKey = STORED_CLIENT_EVENTS_KEY;\r\n telemetryInst = this.mGxTelemetry!;\r\n break;\r\n }\r\n case TelemetryDest.Grid: {\r\n dbKey = this.getGridEventsKey(event.clientId);\r\n if (this.mGridGxTelemetry.has(event.clientId)) {\r\n telemetryInst = this.mGridGxTelemetry.get(event.clientId)!;\r\n delete event[\"clientId\"]; // strip off clientId from event\r\n } else {\r\n logger.error(`No Telemetry instance found for clientId:${event.clientId}`)\r\n }\r\n break;\r\n }\r\n case TelemetryDest.Streamer: {\r\n dbKey = STORED_STREAMER_EVENTS_KEY;\r\n telemetryInst = this.mStreamerGxTelemetry!;\r\n break;\r\n }\r\n default: {\r\n logger.error(\"Invalid telemetry dest \" + dest);\r\n return;\r\n }\r\n }\r\n this.executeQueuedOps(() => Promise.all([this.mDB.get(dbKey), Promise.resolve(telemetryInst)]), ([storedEvents, telemetryInst]: [StorableEvent[], GXTelemetry]) => {\r\n if (!storedEvents) {\r\n storedEvents = [];\r\n }\r\n const storedEvent: StorableEvent = {\r\n event: event,\r\n attributes: {\r\n clientVer: this.mPlatform.sdkVersion.version,\r\n eventProtocol: telemetryInst.commonEventAttributes.eventProtocol,\r\n eventSchemaVer: telemetryInst.commonEventAttributes.eventSchemaVer,\r\n eventSysVer: gxTelemetryPackageJson.version,\r\n externalUserId: telemetryInst.commonEventAttributes.externalUserId || \"\",\r\n idpId: telemetryInst.commonEventAttributes.idpId || \"\",\r\n sessionId: this.mTelemetrySessionId,\r\n userId: telemetryInst.commonEventAttributes.userId || \"\",\r\n deviceOSVersion: this.mPlatform.device.version,\r\n gdprBehOptIn: telemetryInst.commonEventAttributes.gdprBehOptIn === \"Full\" ? KodiakGDPRType.Full : KodiakGDPRType.None,\r\n gdprTechOptIn: telemetryInst.commonEventAttributes.gdprTechOptIn === \"Full\" ? KodiakGDPRType.Full : KodiakGDPRType.None\r\n }\r\n }\r\n storedEvents.push(storedEvent);\r\n return this.mDB.set(dbKey, storedEvents);\r\n });\r\n });\r\n }\r\n\r\n private queueEvent(event: any, dest: TelemetryDest, overrideSessionId?: string) {\r\n if (this.mConsent.acceptEula && this.mStoredUserId !== UNDEFINED && this.mIsInitialized) {\r\n this.sendEvent(event, dest, overrideSessionId);\r\n return;\r\n }\r\n const heldData = overrideSessionId ? {event: event, dest: dest, overrideSessionId: overrideSessionId} : {event: event, dest: dest}\r\n this.mHeldTelemetry.push(heldData);\r\n }\r\n\r\n /** @internal **/\r\n public onException(fileName: string,\r\n type: string,\r\n message: string,\r\n stackTrace: string,\r\n exceptionSource: string,\r\n telemetrySessionId?: string): void {\r\n logger.error(`Exception received: ${fileName}: ${type} - \"${message}\" at`);\r\n logger.error(stackTrace);\r\n this.queueEvent(this.createExceptionEvent(fileName, type, message, stackTrace, exceptionSource), TelemetryDest.GxT, telemetrySessionId);\r\n }\r\n\r\n /** @internal **/\r\n public handleEvent(event: Event) {\r\n if (event.type === \"unhandledrejection\") {\r\n const e = event as PromiseRejectionEvent;\r\n logger.error(`Unhandled exception ${e.reason}, attempting to report telemetry`);\r\n const exceptionEvent = this.createExceptionEvent(\"Unknown\", \"Unhandled exception with no stack trace\", `${e.reason}`, \"Unknown\", \"Javascript\");\r\n this.queueEvent(exceptionEvent, TelemetryDest.GxT);\r\n }\r\n return false;\r\n }\r\n\r\n /** @internal **/\r\n public onNativeTelemetryConfig(configStr: string /*NativeStreamerConfig*/) {\r\n const config: NativeStreamerConfig = JSON.parse(configStr);\r\n try {\r\n this.executeQueuedOps(() => {\r\n this.mStreamerGxTelemetry = new GXTelemetry({\r\n commonEventAttributes: {\r\n clientId: config.clientId,\r\n clientVer: this.mPlatform.sdkVersion.version,\r\n deviceId: this.mPlatform.device.id,\r\n eventProtocol: this.mConfiguration.telemetry.eventProtocol,\r\n eventSchemaVer: config.eventSchemaVer,\r\n eventSysVer: gxTelemetryPackageJson.version,\r\n externalUserId: this.mStoredExternalUserId,\r\n deviceGdprTechOptIn: KodiakGDPRType.None,\r\n deviceGdprBehOptIn: KodiakGDPRType.None,\r\n gdprBehOptIn: this.mStoredGdprBehOptIn,\r\n gdprTechOptIn: this.mStoredGdprTechOptIn,\r\n idpId: this.mStoredIdpId,\r\n sessionId: this.mTelemetrySessionId,\r\n userId: this.mStoredUserId,\r\n\r\n // Adding ts-ignore for properties that were added in event-schema 1.4 but are\r\n // not yet present in @kodiak/telemetry-sdk\r\n // https://docs.google.com/document/d/18w5ap6rnt1mxzbZPBwucY9BK6LmnsOkQx4wvbXUBEsk\r\n // TODO: Can we remove this?\r\n // @ts-ignore\r\n // Added in eventProtocol 1.3\r\n clientType: ClientType.GFNSDK,\r\n clientVariant: UNDEFINED,\r\n deviceOS: ToNvDeviceOs(this.mPlatform.device.os, this.mPlatform.device.platformId),\r\n deviceOSVersion: this.mPlatform.device.version,\r\n deviceType: ToNvDeviceType(this.mPlatform.device.kind),\r\n deviceModel: this.mPlatform.device.model || UNDEFINED,\r\n deviceMake: this.mPlatform.device.manufacturer || UNDEFINED,\r\n // Added in eventProtocol 1.4\r\n browserType: ToGsBrowserName(this.mPlatform.device.browserId),\r\n integrationId: this.mSettings.clientId || this.mSettings.partnerId,\r\n gdprFuncOptIn: \"Full\",\r\n deviceGdprFuncOptIn: \"Full\",\r\n },\r\n isProd: this.mConfiguration.telemetry.isProd,\r\n intervalDelay: this.mConfiguration.telemetry.intervalDelayMs\r\n });\r\n });\r\n } catch (e) {\r\n logger.error(\"Failed to initialize GXT for native callback\");\r\n throw e;\r\n }\r\n logger.info(\"Successfully created GXT instance for native events\");\r\n }\r\n\r\n /** @internal **/\r\n public onNativeTelemetry(eventStr: string) {\r\n // Sample event: {\"name\":\"Streamer_Exit\",\"GDPRCategory\":\"functional\",\"parameters\":{\r\n // \"zoneAddress\":\"24-51-14-228.cloudmatchbeta.nvidiagrid.net\",\"networkSessionId\":\"NOT_SET\",\"sessionId\":\"78a1d7e5-8588-92e7-94e5-59aee32877f9\",\"subSessionId\":\"NOT_SET\",\r\n // \"resumeType\":\"NONE\",\"overrideConfigType\":\"UNKNOWN\",\"overrideConfigVersion\":\"NOT_SET\",\"exitReason\":\"SUCCESS\",\"result\":\"80320004\",\"frameCount\":0,\"codec\":\"UNKNOWN\",\r\n // \"ipVersion\":\"UNKNOWN\",\"streamDuration\":220,\"networkType\":\"WIFI_2_4\",\"streamingProfileGuid\":\"NOT_SET\",\"systemInfoGuid\":\"NOT_SET\",\"cmsId\":\"NOT_SET\"},\r\n // \"ts\":1652392506789}\r\n const event = JSON.parse(eventStr);\r\n\r\n // Per the StreamPlayer docs: Listener has to extract the GDPRCategory and compare the user consent level with the category\r\n // to make the decision to forward events to Telemetry Endpoint or drop.\r\n this.executeQueuedOps(() => {\r\n if (event.GDPRCategory === GDPRCategory.Functional || event.GDPRCategory === undefined || event.GDPRCategory.length === 0\r\n || (event.GDPRCategory === GDPRCategory.Technical && this.mStreamerGxTelemetry?.commonEventAttributes.gdprTechOptIn === KodiakGDPRType.Full)\r\n || (event.GDPRCategory === GDPRCategory.Behavioral && this.mStreamerGxTelemetry?.commonEventAttributes.gdprBehOptIn === KodiakGDPRType.Full) ) {\r\n logger.info(`Forwarding GXT event ${event.name}`);\r\n delete event.GDPRCategory;\r\n event.ts = new Date(event.ts).toISOString();\r\n this.queueEvent(event, TelemetryDest.Streamer);\r\n return;\r\n }\r\n logger.info(`Dropping native event ${event.name} because it had ${event.GDPRCategory} data classification ${!event.GDPRCategory} --- ${event}`);\r\n });\r\n }\r\n\r\n /** @internal **/\r\n public flushTelemetry() {\r\n this.mGxTelemetry?.flushQueue();\r\n this.mStreamerGxTelemetry?.flushQueue();\r\n for (const [clientId, teleInstance] of this.mGridGxTelemetry) {\r\n teleInstance?.flushQueue();\r\n }\r\n }\r\n\r\n /** @internal **/\r\n public onGridServerTelemetry(event: TelemetryEventPayload): void {\r\n if (this.mGridGxTelemetry.size == 0 || !this.mGridGxTelemetry.has(event.clientConfig.clientId)) {\r\n this.executeQueuedOps(() => {\r\n if(this.mGridGxTelemetry.has(event.clientConfig.clientId)) {\r\n logger.info(`Telemetry instance for clientId:${event.clientConfig.clientId} already exists`);\r\n return;\r\n }\r\n this.mGridGxTelemetry.set(event.clientConfig.clientId, new GXTelemetry({\r\n commonEventAttributes: {\r\n clientId: event.clientConfig.clientId,\r\n clientVer: this.mPlatform.sdkVersion.version,\r\n deviceId: this.mPlatform.device.id,\r\n eventProtocol: this.mConfiguration.telemetry.eventProtocol,\r\n eventSchemaVer: event.clientConfig.eventSchemaVer,\r\n eventSysVer: gxTelemetryPackageJson.version,\r\n externalUserId: this.mStoredExternalUserId,\r\n deviceGdprTechOptIn: KodiakGDPRType.None,\r\n deviceGdprBehOptIn: KodiakGDPRType.None,\r\n gdprBehOptIn: this.mStoredGdprBehOptIn,\r\n gdprTechOptIn: this.mStoredGdprTechOptIn,\r\n idpId: this.mStoredIdpId,\r\n sessionId: this.mTelemetrySessionId,\r\n userId: this.mStoredUserId,\r\n\r\n // Adding ts-ignore for properties that were added in event-schema 1.4 but are\r\n // not yet present in @kodiak/telemetry-sdk\r\n // https://docs.google.com/document/d/18w5ap6rnt1mxzbZPBwucY9BK6LmnsOkQx4wvbXUBEsk\r\n // TODO: Can we remove this?\r\n // @ts-ignore\r\n // Added in eventProtocol 1.3\r\n clientType: ClientType.GFNSDK,\r\n clientVariant: UNDEFINED,\r\n deviceOS: ToNvDeviceOs(this.mPlatform.device.os, this.mPlatform.device.platformId),\r\n deviceOSVersion: this.mPlatform.device.version,\r\n deviceType: ToNvDeviceType(this.mPlatform.device.kind),\r\n deviceModel: this.mPlatform.device.model || UNDEFINED,\r\n deviceMake: this.mPlatform.device.manufacturer || UNDEFINED,\r\n // Added in eventProtocol 1.4\r\n browserType: ToGsBrowserName(this.mPlatform.device.browserId),\r\n integrationId: this.mSettings.clientId || this.mSettings.partnerId,\r\n gdprFuncOptIn: \"Full\",\r\n deviceGdprFuncOptIn: \"Full\",\r\n },\r\n isProd: this.mConfiguration.telemetry.isProd,\r\n intervalDelay: this.mConfiguration.telemetry.intervalDelayMs\r\n }));\r\n });\r\n }\r\n logger.info(`Forwarding grid server event ${event.name} (clientId:${event.clientConfig.clientId})`);\r\n this.queueEvent({\r\n clientId: event.clientConfig.clientId, // will be stripped out before sending\r\n name: event.name,\r\n parameters: event.parameters,\r\n ts: event.ts\r\n }, TelemetryDest.Grid);\r\n }\r\n\r\n /** @internal **/\r\n public onHttpResult(request: IHttpRequest, response: Nullable, serviceInfo: ServiceInfo, stats: IHttpResponseStats, errorCode: number): void {\r\n const backoffStrategy = stats.backoffConfiguration?.strategy ?? HttpBackoffStrategy.None;\r\n const backoffStrategyConfigurationBlob = stats.retryCount > 0 && stats.backoffConfiguration ? JSON.stringify(stats.backoffConfiguration) : \"\";\r\n this.queueEvent({\r\n name: \"HttpCallResult\",\r\n parameters: {\r\n url: request.url,\r\n method: request.method,\r\n statusCode: response?.status ?? 0,\r\n errorCode: errorCode,\r\n serviceName: serviceInfo.name,\r\n serviceUseCase: serviceInfo.useCase,\r\n serviceSubUseCase: serviceInfo.subUseCase ?? ServiceSubUseCase.Other,\r\n retryCount: stats.retryCount,\r\n durationInMs: stats.durationInMs,\r\n totalDurationInMs: stats.totalDurationInMs,\r\n backoffStrategy: backoffStrategy,\r\n backoffConfiguration: backoffStrategyConfigurationBlob,\r\n backoffInfo: stats.backoffInfo,\r\n contentLength: parseInt(response?.headers[\"content-length\"]) || 0,\r\n xRequestId: request.headers[\"x-request-id\"] ?? \"\"\r\n },\r\n ts: new Date().toISOString()\r\n }, TelemetryDest.GxT);\r\n }\r\n\r\n private createAppInfoEvent(version: Version): any {\r\n return {\r\n name: \"AppInfo\",\r\n parameters: {\r\n clientVariant: this.mConfiguration.build.flavor,\r\n runtimeVersion: version.runtimeVersion,\r\n streamerVersion: version.streamerTag + \" with gridserver \" + PackageVersion,\r\n appName: version.appName,\r\n appVersion: version.appVersion,\r\n streamerType: this.streamerType\r\n },\r\n ts: new Date().toISOString()\r\n }\r\n }\r\n\r\n private createSystemInfoEvent(): any {\r\n this.mSystemInfoGuid = Utils.uuid.create();\r\n const displayDetails = [...this.mPlatform.device.displays].map(item=>({...item}));\r\n for (const display of displayDetails) {\r\n display.refreshRate = Math.round(display.refreshRate);\r\n }\r\n return {\r\n name: \"SystemInfo\",\r\n parameters: {\r\n isEmulator: this.mPlatform.device.isEmulator,\r\n networkType: this.mPlatform.device.networkType,\r\n vendorName: this.mPlatform.device.manufacturer,\r\n cpuName: this.mPlatform.device.cpuName,\r\n userDefaultUiLanguage: this.mSettings.languageCode,\r\n processorArchitecture: this.mPlatform.device.processorArchitecture,\r\n browserVersion: this.mPlatform.device.browserVersion,\r\n userAgent: this.mPlatform.device.userAgent,\r\n displayDetails: displayDetails,\r\n systemInfoGuid: this.mSystemInfoGuid,\r\n streamerType: this.streamerType\r\n },\r\n ts: new Date().toISOString()\r\n }\r\n }\r\n\r\n private createExceptionEvent(fileName: string, exceptionType: string, message: string, stackTrace: string, exceptionSource: string) {\r\n return {\r\n name: \"Exception\",\r\n parameters: {\r\n \"fileName\": fileName,\r\n \"type\": exceptionType,\r\n \"message\": message,\r\n \"stackTrace\": stackTrace,\r\n \"source\": exceptionSource,\r\n \"streamerType\": this.streamerType\r\n },\r\n ts: new Date().toISOString()\r\n };\r\n }\r\n\r\n /** @internal **/\r\n public setTelemetryHelper(telemetryHelper: TelemetryHelper) {\r\n this.mTelemetryHelper = telemetryHelper;\r\n }\r\n\r\n /** @internal **/\r\n public sendStreamingProfileEvent(profileName: StreamingQualityType, dynamicResEnabled: boolean, framerate: number, resolutionWidth: number, resolutionHeight: number,\r\n maxBitrate: number, aspectRatio: string, vSyncMode: VSyncMode): string {\r\n const streamingProfileGuid = Utils.uuid.create();\r\n this.queueEvent({\r\n name: \"StreamingProfile\",\r\n parameters: {\r\n \"profileName\": profileName,\r\n \"dynamicResolutionEnabled\": dynamicResEnabled,\r\n \"framerate\": framerate,\r\n \"resolutionWidth\": resolutionWidth,\r\n \"resolutionHeight\": resolutionHeight,\r\n \"maxBitrate\": maxBitrate,\r\n \"aspectRatio\": aspectRatio,\r\n \"vSyncMode\": vSyncMode,\r\n \"streamingProfileGuid\": streamingProfileGuid,\r\n \"streamerType\": this.streamerType\r\n },\r\n ts: new Date().toISOString()\r\n }, TelemetryDest.GxT);\r\n\r\n return streamingProfileGuid;\r\n }\r\n\r\n /** @internal **/\r\n public sendClickEvent(clickType: ClickType, inputType: InputType, detail: string) {\r\n this.queueEvent({\r\n name: \"UserClick\",\r\n parameters: {\r\n \"type\": clickType,\r\n \"inputSource\": inputType,\r\n \"info\": detail\r\n },\r\n ts: new Date().toISOString()\r\n }, TelemetryDest.GxT);\r\n }\r\n\r\n // Queues an operation to occur after any currently queued operations. Multiple chained operations can be specified as separate parameters\r\n private executeQueuedOps(...operations: ((value: any) => (void | PromiseLike))[]) {\r\n for(let i = 0; i < operations.length; i++) {\r\n this.mQueuedOp = this.mQueuedOp.then(operations[i], (e) => logger.error(\"An exception occurred during telemetry processing: \" + e));\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { Config } from \"../configuration/configuration.types\";\r\nimport { Message, MessageHandler } from \"../core/message-handler\";\r\nimport { Nullable, RecursivePartial } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { StorageFactory } from \"../storage/storage-factory\";\r\nimport { OVERRIDES_RETRIEVE_METHOD, OVERRIDES_STORAGE_KEY } from \"./overrides.types\";\r\n\r\nconst logger = Logging.getLogger(\"overrides/overrides\");\r\n\r\n/** @internal **/\r\nconst ELEMENT_ID_OVERRIDES_READER = \"gfn-overrides-reader\";\r\n\r\n/**\r\n * @internal\r\n * Read the overrides from local browser storage and return as a partial config object.\r\n */\r\nexport function ReadOverrides(): Promise> {\r\n const storage = new StorageFactory().create();\r\n return new Promise((resolve, reject) => {\r\n return storage.get(OVERRIDES_STORAGE_KEY).then((overridesStr: Nullable) => {\r\n if (!overridesStr) {\r\n resolve({});\r\n return;\r\n }\r\n\r\n try {\r\n resolve(JSON.parse(overridesStr));\r\n } catch (e) {\r\n logger.error(\"Could not parse config overrides. Returning empty {} overrides\");\r\n resolve({});\r\n }\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * @internal\r\n * Send the overrides values from the child iframe to the parent window.\r\n */\r\nexport function SendOverrides(overrides: RecursivePartial): void {\r\n window.parent.postMessage({\r\n method: OVERRIDES_RETRIEVE_METHOD,\r\n data: overrides\r\n }, \"*\");\r\n}\r\n\r\n/** @internal **/\r\nfunction GetOrCreateIFrameElement(): HTMLElement {\r\n let elem: Nullable = document.getElementById(ELEMENT_ID_OVERRIDES_READER) as HTMLIFrameElement;\r\n if (!elem) {\r\n elem = document.createElement(\"iframe\");\r\n elem.id = ELEMENT_ID_OVERRIDES_READER;\r\n elem.src = `${Utils.getScriptOriginPath()}/overrides-reader/index.html`;\r\n elem.style.display = \"none\";\r\n document.body.appendChild(elem);\r\n }\r\n\r\n if (!elem) {\r\n throw new APIError(APIErrorCode.OverridesDOMError, \"Unabled to get or create the overrides iframe element\");\r\n }\r\n\r\n return elem;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Create the i-frame element that has access to the domain where the overrides data is stored.\r\n * The code running in the i-frame will read the overrides and postMessage it to us.\r\n */\r\nexport function RetrieveOverrides(): Promise> {\r\n return new Promise((resolve, reject) => {\r\n let elem: Nullable = null;\r\n const messageHandler = new MessageHandler(window, window.parent, Utils.getScriptOrigin());\r\n messageHandler.register(OVERRIDES_RETRIEVE_METHOD, (message: Message) => {\r\n messageHandler.cleanup();\r\n if (elem) {\r\n elem.remove();\r\n }\r\n resolve(message.data!);\r\n });\r\n elem = GetOrCreateIFrameElement();\r\n });\r\n}\r\n","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nexport const OVERRIDES_STORAGE_KEY = \"gfn-client-sdk-overrides\";\r\nexport const OVERRIDES_RETRIEVE_METHOD = \"retrieve\";\r\n","/* Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { IStorage } from \"../storage/storage.types\";\r\nimport { ConsentEvents } from \"./consent-types\";\r\nimport { User } from \"./user\";\r\nimport { IUserConsents, NO_USER_CONSENTS } from \"./user.types\";\r\n\r\nconst logger = Logging.getLogger(\"idm/consent\");\r\n\r\nconst GFN_STORAGE_EULA_VERSION_KEY = \"$$nv-gfn-eula-accepted-version\";\r\nconst GFN_CURRENT_EULA_VERSION = 1;\r\n\r\n/**\r\n * Class for performing user authentication and authorization.\r\n */\r\nexport class Consent extends EventEmitter implements IInitializable {\r\n private mEulaVersionAccepted: number = 0;\r\n private mUser: Nullable = null;\r\n private mStorage!: IStorage;\r\n\r\n /**\r\n * Gets whether the system has accepted the EULA.\r\n */\r\n public get acceptEula(): boolean {\r\n return this.mEulaVersionAccepted >= GFN_CURRENT_EULA_VERSION;\r\n }\r\n\r\n /**\r\n * Sets whether the user has accepted the EULA, allowing telemetry to be collected.\r\n */\r\n public set acceptEula(accepted: boolean) {\r\n this.setEulaAccepted(accepted ? GFN_CURRENT_EULA_VERSION : 0);\r\n this.emit(\"eulaAcceptanceUpdate\", accepted);\r\n\r\n // persist this value to storage as well\r\n this.mStorage.set(GFN_STORAGE_EULA_VERSION_KEY, this.mEulaVersionAccepted);\r\n }\r\n\r\n /** @internal */\r\n public get user(): Nullable {\r\n return this.mUser;\r\n }\r\n\r\n /** @internal */\r\n public set user(user: Nullable) {\r\n this.mUser = user;\r\n if (this.mUser) {\r\n this.mUser.on(\"consentsUpdated\", this.onUserConsentsUpdated.bind(this));\r\n }\r\n\r\n // No consent provided with no logged in user\r\n this.onUserConsentsUpdated(user?.consents ?? NO_USER_CONSENTS);\r\n this.onUserUpdated(user);\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mStorage = context.storage;\r\n this.setEulaAccepted(await this.mStorage.get(GFN_STORAGE_EULA_VERSION_KEY) ?? 0);\r\n }\r\n\r\n private setEulaAccepted(version: number) {\r\n if (version > 0) {\r\n logger.info(`System has accepted EULA v=${version}`);\r\n } else {\r\n logger.info(\"System has not accepted EULA\");\r\n }\r\n\r\n this.mEulaVersionAccepted = version;\r\n }\r\n\r\n private onUserUpdated(user: Nullable) {\r\n this.emit(\"userUpdate\", user);\r\n }\r\n\r\n private onUserConsentsUpdated(consents: IUserConsents) {\r\n this.emit(\"userConsentsUpdate\", consents);\r\n }\r\n}\r\n","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { NvBrowserType, NvClientType, NvClientVariant, NvDeviceOS, NvDeviceType } from \"../nv-types\";\r\n\r\nexport type GxtConsent = \"None\" | \"Full\";\r\n\r\n/** @internal **/\r\nexport interface GxtEndpointParameters {\r\n clientId: string;\r\n clientVer: string;\r\n sessionId: string;\r\n gdprFuncOptIn: GxtConsent;\r\n gdprTechOptIn: GxtConsent;\r\n gdprBehOptIn: GxtConsent;\r\n deviceGdprFuncOptIn: GxtConsent;\r\n deviceGdprTechOptIn: GxtConsent;\r\n deviceGdprBehOptIn: GxtConsent;\r\n deviceId: string;\r\n deviceOS: NvDeviceOS;\r\n deviceOSVersion: string;\r\n deviceType: NvDeviceType;\r\n deviceModel: string;\r\n deviceMake: string;\r\n clientType: NvClientType;\r\n clientVariant: NvClientVariant;\r\n browserType: NvBrowserType;\r\n integrationId: string;\r\n}\r\n\r\n/** @internal **/\r\nexport interface EventEndpointParameters extends GxtEndpointParameters {\r\n eventSysVer: string;\r\n eventSchemaVer: string;\r\n eventProtocol: string;\r\n}\r\n\r\n/** @internal **/\r\nexport enum FeedbackFileType {\r\n Unknown = \"file/undefined\",\r\n Log = \"file/log\",\r\n ObfuscatedLog = \"file/gfnwebobfuscation\"\r\n};\r\n\r\n/** @internal **/\r\nexport interface FeedbackFile {\r\n name: string;\r\n type: FeedbackFileType;\r\n}\r\n\r\n/** @internal **/\r\nexport interface FeedbackEndpointParameters extends GxtEndpointParameters {\r\n feedbackId: string;\r\n feedbackName: string;\r\n feedbackProtocol: string;\r\n feedbackSchemaVer: string;\r\n feedbackSysVer: string;\r\n fileList: FeedbackFile[],\r\n userId: string;\r\n externalUserId: string;\r\n idpId: string;\r\n clientTs: string;\r\n sentTs: string;\r\n parameters: Record\r\n}\r\n\r\n/** @internal */\r\nexport interface FeedbackAttachmentParameters {\r\n blob: Blob;\r\n buffer: string;\r\n checksum: string;\r\n feedbackId: string;\r\n parameters: string;\r\n offset: string;\r\n eob: boolean;\r\n}\r\n","/* Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n// For now telemetry is only supported on stage\r\nimport schema from \"../../telemetry/EventsSchema-GFN_Client_SDK.json\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { Platform } from \"../platform/platform\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\n\r\nimport { ClientType } from \"@gamestream-stable/gridserver\";\r\nimport { ToNvBrowserType, ToNvDeviceType, ToNvDeviceOs } from \"../platform/platform-mappings\";\r\nimport { Consent } from \"../idm/consent\";\r\nimport { FeedbackFileType } from \"./gxt.types\";\r\nimport { User } from \"../idm/user\";\r\nimport { RestClientError, RestClientGfcChunkError } from \"../rest/rest-client.types\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { DistributedTracing } from \"./distributed-tracing\";\r\nimport { ParentSpan } from \"./distributed-tracing.types\";\r\nimport { LogFile } from \"../logging/logging.types\";\r\n\r\nconst logger = Logging.getLogger(\"telemetry/feedback\");\r\n\r\nconst MAX_ATTACHMENT_FAILURES = 2;\r\n\r\n/** @internal */\r\nexport class Feedback implements IInitializable {\r\n private readonly mPlatform: Platform;\r\n private readonly mConsent: Consent;\r\n private readonly mRestClient: RestClient;\r\n private mConfiguration!: Configuration;\r\n private mFeedbackSessionId!: string;\r\n private mDistributedTracing: DistributedTracing;\r\n\r\n /** @internal **/\r\n constructor(platform: Platform, consent: Consent, restClient: RestClient, distributedTracing: DistributedTracing) {\r\n this.mPlatform = platform;\r\n this.mRestClient = restClient;\r\n this.mConsent = consent;\r\n this.mDistributedTracing = distributedTracing;\r\n }\r\n\r\n public async initialize(context: IInitializeContext) {\r\n this.mConfiguration = context.configuration;\r\n }\r\n\r\n private async sendFeedbackHeadRequest(logFile: LogFile, user: User, parameters: Record, parentSpan?: ParentSpan): Promise {\r\n const feedbackSessionId = this.newFeedbackSession();\r\n try {\r\n await this.mRestClient.sendFeedbackHeadRequest({\r\n clientId: schema.schemaMeta.clientId,\r\n clientVer: this.mPlatform.sdkVersion.version,\r\n deviceId: this.mPlatform.device.id,\r\n sessionId: feedbackSessionId,\r\n feedbackId: feedbackSessionId,\r\n feedbackName: \"ClientSDKLogs\",\r\n feedbackProtocol: this.mConfiguration.feedback.feedbackProtocol,\r\n feedbackSchemaVer: schema.schemaMeta.schemaVersion,\r\n feedbackSysVer: this.mConfiguration.feedback.feedbackSysVer,\r\n fileList: [\r\n {\r\n name: logFile.filename,\r\n type: this.mPlatform.device.isBrowser ? FeedbackFileType.ObfuscatedLog : FeedbackFileType.Log\r\n }\r\n ],\r\n clientType: ClientType.GFNSDK,\r\n clientVariant: \"undefined\",\r\n deviceOS: ToNvDeviceOs(this.mPlatform.device.os, this.mPlatform.device.platformId),\r\n deviceOSVersion: this.mPlatform.device.version,\r\n deviceType: ToNvDeviceType(this.mPlatform.device.kind),\r\n deviceModel: this.mPlatform.device.model || \"undefined\",\r\n deviceMake: this.mPlatform.device.manufacturer || \"undefined\",\r\n\r\n browserType: ToNvBrowserType(this.mPlatform.device.browserId),\r\n integrationId: \"undefined\",\r\n\r\n gdprFuncOptIn: \"Full\",\r\n gdprTechOptIn: user.consents.trackTechnicalData ? \"Full\" : \"None\",\r\n gdprBehOptIn: user.consents.trackBehavioralData ? \"Full\" : \"None\",\r\n deviceGdprFuncOptIn: \"Full\",\r\n deviceGdprTechOptIn: \"None\",\r\n deviceGdprBehOptIn: \"None\",\r\n\r\n userId: user.id,\r\n externalUserId: user.externalId,\r\n idpId: user.idpId,\r\n\r\n clientTs: new Date().toISOString(),\r\n sentTs: new Date().toISOString(),\r\n\r\n parameters: parameters\r\n }, parentSpan);\r\n } catch (e: unknown) {\r\n if (e instanceof RestClientError) {\r\n switch (e.code) {\r\n case APIErrorCode.TelemetryFeedbackIdInUse:\r\n case APIErrorCode.TelemetryFeedbackIdInvalid:\r\n // Attempt again with a new feedback ID\r\n return this.sendFeedbackHeadRequest(logFile, user, parameters, parentSpan);\r\n case APIErrorCode.TelemetryFeedbackAttachmentRejected:\r\n throw new APIError(APIErrorCode.TelemetryFeedbackAttachmentRejected, `Feedback Attachments rejected - message: ${e.message}`)\r\n default:\r\n break;\r\n }\r\n throw new APIError(e.code, `REST error when making head request code:${e.code} message:${e.message}`)\r\n } else if (e instanceof Error) {\r\n throw new APIError(APIErrorCode.TelemetryFeedbackFailed, `Failure when making head request: ${e.toString()}`);\r\n } else {\r\n throw new APIError(APIErrorCode.TelemetryFeedbackFailed, \"Unknown error when making head request\");\r\n }\r\n }\r\n }\r\n\r\n private async sendFeedbackAttachment(logFile: LogFile, user: User, parameters: Record, isFinal: boolean, initialOffset: number = 0, parentSpan?: ParentSpan): Promise {\r\n let offset : number = initialOffset;\r\n let failures = 0;\r\n const maxBufferLength = this.mConfiguration.feedback.maxBufferSize;\r\n\r\n while (logFile.contents.length > 0) {\r\n let currentBuffer = logFile.contents.slice(0, maxBufferLength);\r\n logFile.contents = logFile.contents.slice(currentBuffer.length);\r\n\r\n try {\r\n let currentBlob: Blob = new Blob([currentBuffer]);\r\n await this.mRestClient.sendFeedbackAttachment({\r\n blob: currentBlob,\r\n buffer: currentBuffer,\r\n checksum: await Utils.crypt.sha256(currentBuffer),\r\n feedbackId: this.mFeedbackSessionId,\r\n parameters: JSON.stringify(parameters),\r\n offset: offset.toString(),\r\n eob: isFinal ? logFile.contents.length == 0 : false\r\n }, parentSpan);\r\n offset = offset + currentBlob.size;\r\n } catch (e: unknown) {\r\n let xDataOffset = -1;\r\n if (e instanceof RestClientGfcChunkError) {\r\n xDataOffset = e.xDataOffset;\r\n }\r\n if (e instanceof RestClientError) {\r\n failures++;\r\n\r\n if (failures >= MAX_ATTACHMENT_FAILURES) {\r\n throw new APIError(APIErrorCode.TelemetryFeedbackFailed, `Maximum number of failures surpassed when making attachment request: code=${e.code} message=${e.message}`);\r\n }\r\n\r\n switch (e.code) {\r\n case APIErrorCode.TelemetryFeedbackIdInvalid:\r\n // Attempt again with a new feedback ID\r\n await this.sendFeedbackHeadRequest(logFile, user, parameters, parentSpan);\r\n return 0;\r\n case APIErrorCode.TelemetryFeedbackNonSequentialFrame:\r\n // Try again with the provided x-data-offset from the failure response\r\n if (xDataOffset >= 0) {\r\n offset = xDataOffset;\r\n }\r\n break;\r\n default:\r\n throw new APIError(e.code, `REST error when making attachment request code:${e.code} message:${e.message}`)\r\n }\r\n } else if (e instanceof Error) {\r\n throw new APIError(APIErrorCode.TelemetryFeedbackFailed, `Failure when making attachment request: ${e.toString()}`);\r\n } else {\r\n throw new APIError(APIErrorCode.TelemetryFeedbackFailed, \"Unknown error when making attachment request\");\r\n }\r\n }\r\n }\r\n return offset;\r\n }\r\n\r\n private newFeedbackSession(): string {\r\n this.mFeedbackSessionId = Utils.uuid.create();\r\n return this.mFeedbackSessionId;\r\n }\r\n\r\n /**\r\n * Stream log file using GFN feedback.\r\n * logOffset=0 will automatically trigger a Head Request for the feedback session.\r\n * Specify isFinal=true when no further attachments are expected.\r\n */\r\n public async streamLog(logFile: LogFile, logOffset: number, isFinal: boolean, sessionParams: Record): Promise {\r\n const user = this.mConsent.user;\r\n if (!user || !user.consents.trackTechnicalData) {\r\n return logOffset;\r\n }\r\n const feedbackSpan = this.mDistributedTracing.startSpan(\"Stream Feedback\");\r\n if(logOffset == 0) {\r\n await this.sendFeedbackHeadRequest(logFile, user, sessionParams, feedbackSpan);\r\n }\r\n\r\n logOffset = await this.sendFeedbackAttachment(logFile, user, sessionParams, isFinal, logOffset, feedbackSpan);\r\n this.mDistributedTracing.closeSpan(feedbackSpan);\r\n return logOffset;\r\n }\r\n}\r\n","/* Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nexport enum SpanTagNames {\r\n HttpUrl = \"http.url\",\r\n HttpStatusCode = \"http.status_code\",\r\n HttpStatusCodeFamily = \"http.status_code_family\",\r\n HttpMethod = \"http.method\",\r\n HttpHostname = \"http.hostname\",\r\n HttpHeadersPrefix = \"http.headers.\",\r\n HttpPath = \"http.path\",\r\n HttpErrorText = \"http.error_text\",\r\n ParamsPrefix = \"params.\",\r\n Error = \"error\",\r\n SpanKind = \"span.kind\",\r\n Component = \"component\",\r\n ClientOs = \"client.os\",\r\n ClientOsName = \"client.os.name\",\r\n ClientOsVersion = \"client.os.version\",\r\n ServiceVersion = \"service.version\",\r\n ServiceType = \"service.type\",\r\n Type = \"type\",\r\n DeviceId = \"deviceId\",\r\n AppName = \"appName\",\r\n LayoutExecutionId = \"layoutExecutionId\",\r\n Origin = \"origin\",\r\n VpcId = \"vpcId\",\r\n Locale = \"locale\",\r\n Trigger = \"trigger\",\r\n LoginStatus = \"loginStatus\",\r\n CmsId = \"cmsId\",\r\n FailurePoint = \"failurePoint\",\r\n ErrorCode = \"errorCode\",\r\n ErrorType = \"errorType\",\r\n NetworkOverridePresent = \"networkOverridePresent\",\r\n NetworkTestStatus = \"networkTestStatus\",\r\n ZoneName = \"zone.name\",\r\n ZoneAddress = \"zone.address\",\r\n OobeDialogShown = \"oobeDialogShown\",\r\n LoginWindowShown = \"loginWindowShown\",\r\n LaunchSource = \"launchSource\",\r\n ShortName = \"shortName\",\r\n UsedLatencyBasedRouting = \"usedLatencyBasedRouting\",\r\n IsSessionAutoResumed = \"isSessionAutoResumed\",\r\n ErrorDetails = \"errorDetails\",\r\n RoutingOverrideUsed = \"routingOverrideUsed\",\r\n OverrideZoneName = \"overrideZoneName\",\r\n OverrideZoneAddress = \"overrideZoneAddress\",\r\n SessionId = \"sessionId\",\r\n SkippedAuthCheck = \"skippedAuthCheck\",\r\n CountryCode = \"countryCode\",\r\n FastestJarvisDomain = \"fastestJarvisDomain\",\r\n TraceId = \"traceId\",\r\n RequestId = \"requestId\",\r\n PanelType = \"panelType\",\r\n BeforeEventDuration = \"beforeEventDuration\",\r\n PresentDuration = \"presentDuration\"\r\n}\r\n","/* Copyright (c) 2022-2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Logging } from \"../logging/logging\";\r\nimport { Tracer } from \"lightstep-tracer/browser\";\r\nimport { HttpPopupErrorDetails, LightstepTracerConfiguration, TracingRequestOptions, ParentSpan } from \"./distributed-tracing.types\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { LightstepConfiguration } from \"./telemetry.types\";\r\nimport { FORMAT_HTTP_HEADERS, Span } from \"opentracing\";\r\nimport { SpanTagNames } from \"./distributed-tracing.constants\";\r\nimport { APIError } from \"../api-error\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { IInitializable, PropertyBag } from \"../core/util.types\";\r\nimport { PlatformBase } from \"../platform/platform-base\";\r\nimport { Device } from \"../device/device\";\r\nimport { HttpError, IHttpResponse } from \"../core/http-client.types\";\r\n\r\nconst logger = Logging.getLogger(\"telemetry/distributed-tracing\");\r\nconst SPAN_KIND = \"client\";\r\n\r\n// Note: This class duplicates much of the functionality of DistributedTracingUtilService, but without the Angularisms\r\nexport class DistributedTracing implements IInitializable {\r\n private mTracer!: Tracer;\r\n private mConfig!: LightstepConfiguration;\r\n private mCommonTags!: { [key: string]: any };\r\n private mPlatform: PlatformBase;\r\n private mDevice: Device;\r\n\r\n constructor(platform: PlatformBase, device: Device) {\r\n this.mPlatform = platform;\r\n this.mDevice = device;\r\n }\r\n\r\n public async initialize(context: IInitializeContext) {\r\n this.mConfig = context.configuration.telemetry.lightstep;\r\n const tracerConfig: LightstepTracerConfiguration = this.mConfig.tracerConfig;\r\n this.mTracer = new Tracer(tracerConfig);\r\n\r\n this.mCommonTags = {\r\n [SpanTagNames.ServiceVersion]: this.mPlatform.sdkVersion.toString(),\r\n [SpanTagNames.ServiceType]: context.settings.clientId,\r\n [SpanTagNames.SpanKind]: SPAN_KIND,\r\n [SpanTagNames.AppName]: this.mDevice.appName,\r\n [SpanTagNames.DeviceId]: this.mDevice.id,\r\n [SpanTagNames.ClientOs]: this.mDevice.os,\r\n [SpanTagNames.ClientOsName]: this.mDevice.platformId,\r\n [SpanTagNames.ClientOsVersion]: this.mDevice.version,\r\n [SpanTagNames.Locale]: context.settings.languageCode,\r\n [SpanTagNames.VpcId]: context.settings.vpcId\r\n };\r\n }\r\n\r\n public setCountryCode(countryCode: string) {\r\n this.mCommonTags[SpanTagNames.CountryCode] = countryCode;\r\n }\r\n\r\n public updateUrlForHttpPopupSpan(urlObj: URL, span?: Span): void {\r\n if (span) {\r\n const tracingParams: PropertyBag = {};\r\n this.injectSpanHttpHeaders(span, tracingParams);\r\n let tracingParamsStr = JSON.stringify(tracingParams);\r\n tracingParamsStr = (window as any).encodeURIComponent(tracingParamsStr);\r\n tracingParamsStr = (window as any).unescape(tracingParamsStr);\r\n tracingParamsStr = window.btoa(tracingParamsStr);\r\n urlObj.searchParams.append(\"tracer\", tracingParamsStr)\r\n }\r\n }\r\n\r\n public getFormattedUrlForHttpPopupSpan(url: string, span?: Span): string {\r\n if (span && this.mTracer) {\r\n const tracingParams: PropertyBag = {};\r\n this.injectSpanHttpHeaders(span, tracingParams);\r\n const urlObj = new URL(url);\r\n const searchParamsStr = urlObj.searchParams.toString();\r\n let tracingParamsStr = JSON.stringify(tracingParams);\r\n tracingParamsStr = (window as any).encodeURIComponent(tracingParamsStr);\r\n tracingParamsStr = (window as any).unescape(tracingParamsStr);\r\n tracingParamsStr = window.btoa(tracingParamsStr);\r\n url = `${urlObj.origin}${urlObj.pathname}?tracer=${tracingParamsStr}`;\r\n if (searchParamsStr?.length > 0) {\r\n url = `${url}&${searchParamsStr}`;\r\n }\r\n }\r\n return url;\r\n }\r\n\r\n public startSpan(spanName: string, parentSpan?: ParentSpan): Span | undefined {\r\n let childSpan: Span | undefined = undefined;\r\n if (this.mTracer) {\r\n if (parentSpan) {\r\n childSpan = this.mTracer.startSpan(spanName, {\r\n childOf: parentSpan\r\n });\r\n } else {\r\n childSpan = this.mTracer.startSpan(spanName);\r\n }\r\n }\r\n return childSpan;\r\n }\r\n\r\n public inject(format: string, span: Span): { [key: string]: string } {\r\n const carrier: { [key: string]: string } = {};\r\n if (this.mTracer) {\r\n this.mTracer.inject(span, format, carrier);\r\n }\r\n return carrier;\r\n }\r\n\r\n private injectSpanHttpHeaders(span: ParentSpan, headers: PropertyBag) {\r\n const carrierHeaders = this.inject(FORMAT_HTTP_HEADERS, span);\r\n const keys = Object.keys(carrierHeaders);\r\n for (const key of keys) {\r\n headers[key] = carrierHeaders[key];\r\n }\r\n }\r\n\r\n private handleHttpError(span: Span, errorCode: number, errorText: string, url: string) {\r\n span.setTag(SpanTagNames.Error, true);\r\n span.setTag(SpanTagNames.HttpStatusCode, errorCode);\r\n span.setTag(SpanTagNames.ErrorDetails, errorText);\r\n span.setTag(SpanTagNames.HttpUrl, url);\r\n }\r\n\r\n private handleHttpPopupError(span: Span, errorDetails?: HttpPopupErrorDetails) {\r\n span.setTag(SpanTagNames.Error, true);\r\n span.setTag(SpanTagNames.HttpStatusCode, errorDetails?.errorCode);\r\n span.setTag(SpanTagNames.HttpErrorText, errorDetails?.errorText);\r\n span.setTag(SpanTagNames.HttpUrl, errorDetails?.failedUrl);\r\n }\r\n\r\n private handleHttpSuccess(span: Span, url: string) {\r\n span.setTag(SpanTagNames.Error, false);\r\n span.setTag(SpanTagNames.HttpUrl, url);\r\n }\r\n\r\n public handleHttpEndpointSpan(\r\n httpRequester: (headers: PropertyBag) => Promise,\r\n options: TracingRequestOptions,\r\n spanName: string,\r\n parentSpan?: ParentSpan\r\n ): Promise {\r\n const headers: PropertyBag = options.headers ? options.headers : {};\r\n const span = this.startSpan(spanName, parentSpan);\r\n if (span) {\r\n const params: PropertyBag = options.params ? options.params : {};\r\n span.addTags(params);\r\n this.injectSpanHttpHeaders(span, headers);\r\n logger.info(\"Sending http request...\");\r\n return httpRequester(headers).then((res: IHttpResponse) => {\r\n if (res.ok) {\r\n this.handleHttpSuccess(span, res.url);\r\n } else {\r\n this.handleHttpError(span, res.status, res.statusText, res.url)\r\n }\r\n return res;\r\n }).catch((error: HttpError) => {\r\n logger.info(\"Http Failure\");\r\n this.handleHttpError(span, error.code, error.message, error.url);\r\n throw new APIError(APIErrorCode.Http, `Http request ${error.url} failed. ${error.toString()}`);\r\n }).finally(() => this.closeSpan(span)\r\n );\r\n } else {\r\n return httpRequester(headers);\r\n }\r\n }\r\n\r\n public closeSpan(span?: Span) {\r\n if (span) {\r\n span.addTags(this.mCommonTags);\r\n span.finish();\r\n }\r\n }\r\n\r\n public closeHttpPopupSpan(span?: Span, error?: boolean, errorDetails?: HttpPopupErrorDetails) {\r\n if (span) {\r\n span.addTags(this.mCommonTags);\r\n if (error) {\r\n this.handleHttpPopupError(span, errorDetails);\r\n } else {\r\n this.handleHttpSuccess(span, errorDetails?.failedUrl || \"\");\r\n }\r\n span.finish();\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IInitializable } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { Configuration } from \"../configuration/configuration\";\r\nimport { RemoteConfigClientParams } from \"./remote-configuration.types\";\r\n\r\nconst logger = Logging.getLogger(\"gxtarget/remote-config\");\r\n\r\n/**\r\n * Represents configuration that can be set remotely to override local config.\r\n *\r\n * @internal\r\n */\r\nexport class RemoteConfig implements IInitializable {\r\n private readonly mRestClient: RestClient;\r\n private mConfiguration!: Configuration;\r\n\r\n constructor(restClient: RestClient) {\r\n this.mRestClient = restClient;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mConfiguration = context.configuration;\r\n\r\n // During init time, pull our best guess for remote config\r\n this.getAndUpdateRemoteConfig({});\r\n }\r\n\r\n /** @internal */\r\n public async getAndUpdateRemoteConfig(clientParams: RemoteConfigClientParams) {\r\n logger.info(\"Requesting RemoteConfig\");\r\n try {\r\n const remoteConfig = await this.mRestClient.getRemoteConfig(clientParams);\r\n this.mConfiguration.updateRemoteConfig(remoteConfig);\r\n } catch (e: any) {\r\n logger.error(`Unable to retrieve RemoteConfig. ${e.message}`);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { CloudVariableEvents } from \"./cloud-variables.types\";\r\nimport { Activity, Experience, ExperienceMetadata, ExperienceResult } from \"./gxtarget.types\";\r\n\r\nconst logger = Logging.getLogger(\"gxtarget/cloud-variable\");\r\n\r\nexport class CloudVariable extends EventEmitter {\r\n public readonly name;\r\n\r\n private mCachedVariable: Nullable> = null;\r\n\r\n private mVariablePromise: Promise\r\n private mVariableResolve: Nullable<(variable: Nullable>) => void> = null;\r\n\r\n public get variable(): Promise> {\r\n return (async () => {\r\n if (this.mCachedVariable) {\r\n return this.mCachedVariable;\r\n }\r\n\r\n const variable = await this.mVariablePromise;\r\n return variable;\r\n })();\r\n }\r\n\r\n public get value(): Promise {\r\n return this.variable.then(v => v.value!);\r\n }\r\n\r\n public get activity(): Promise {\r\n return this.variable.then(v => v.activity);\r\n }\r\n\r\n public get result(): Promise {\r\n return this.variable.then(v => v.result);\r\n }\r\n\r\n public get metadata(): Promise> {\r\n return this.variable.then(v => v.metadata ?? null);\r\n }\r\n\r\n /**\r\n * This gets called by the cloud variable controller after the REST call is completed.\r\n */\r\n public update(v: Experience) {\r\n logger.verbose(`Updating cloud variable ${this.name} = ${JSON.stringify(v)}`)\r\n if (!this.mCachedVariable) {\r\n this.mCachedVariable = v;\r\n this.mVariableResolve!(this.mCachedVariable);\r\n this.mVariableResolve = null;\r\n } else if (JSON.stringify(v) !== JSON.stringify(this.mCachedVariable)) {\r\n this.mCachedVariable = v;\r\n this.emit(\"updated\", this.mCachedVariable);\r\n }\r\n }\r\n\r\n constructor(name: string) {\r\n super();\r\n this.name = name;\r\n\r\n this.mVariablePromise = new Promise((resolve) => {\r\n this.mVariableResolve = resolve;\r\n });\r\n }\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { IInitializable, Nullable } from \"../core/util.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { RestClient } from \"../rest/rest-client\";\r\nimport { Consent } from \"../idm/consent\";\r\nimport { User } from \"../idm/user\";\r\nimport { CloudVariable } from \"./cloud-variable\";\r\nimport { ClipboardPasteConfig, CloudVariableNames, CloudVariables, CloudFeatureConfigsClientParams, GuestFlowConfig, GuestModeCloudVariableClientParams } from \"./cloud-variables.types\";\r\nimport { APIErrorCode } from \"../api-error.types\";\r\nimport { APIError } from \"../api-error\";\r\nimport { Settings } from \"../settings/settings\";\r\nimport { GuestUser } from \"../idm/guest-user\";\r\n\r\ntype CloudVariableMap = {\r\n [k: string]: CloudVariable\r\n};\r\n\r\nexport interface CloudVariableSet {\r\n params: T;\r\n variables: CloudVariableMap;\r\n}\r\n\r\nconst logger = Logging.getLogger(\"gxtarget/cloud-variable-service\");\r\n\r\n/**\r\n * @internal\r\n *\r\n * Represents configuration that can be set remotely to override local config.\r\n */\r\nexport class CloudVariableService implements IInitializable {\r\n private mSettings!: Settings;\r\n private readonly mConsent: Consent;\r\n private readonly mRestClient: RestClient;\r\n\r\n private mGuestModeCloudVariables: CloudVariableSet;\r\n private mGuestModeClientConfigVariable: CloudVariable = new CloudVariable(\"guestFlowClientConfigSdk\");\r\n\r\n private mCloudFeatureConfigss: CloudVariableSet;\r\n private mClipboardPasteFeatureConfigVariable: CloudVariable = new CloudVariable(\"clipboardPasteFeatureConfigSdk\");\r\n\r\n constructor(consent: Consent, restClient: RestClient) {\r\n this.mConsent = consent;\r\n this.mRestClient = restClient;\r\n\r\n this.mGuestModeCloudVariables = {\r\n params: {\r\n partnerId: \"\"\r\n },\r\n variables: {\r\n [this.mGuestModeClientConfigVariable.name]: this.mGuestModeClientConfigVariable\r\n }\r\n };\r\n\r\n this.mCloudFeatureConfigss = {\r\n params: {\r\n },\r\n variables: {\r\n [this.mClipboardPasteFeatureConfigVariable.name]: this.mClipboardPasteFeatureConfigVariable\r\n }\r\n };\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mSettings = context.settings;\r\n\r\n this.mGuestModeCloudVariables.params.partnerId = this.mSettings.partnerId;\r\n this.mConsent.on(\"userUpdate\", this.onUserUpdate.bind(this));\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * Retrieves a cloud variable by name.\r\n */\r\n public get(name: T): CloudVariable> {\r\n switch(name) {\r\n case \"guestFlowClientConfigSdk\": return this.mGuestModeClientConfigVariable as CloudVariables;\r\n case \"clipboardPasteFeatureConfigSdk\": return this.mClipboardPasteFeatureConfigVariable as CloudVariables;\r\n }\r\n throw new APIError(APIErrorCode.InvalidParameter, \"Invalid cloud variable key\");\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public onUserUpdate(user: Nullable): void {\r\n logger.info(\"User change. Updating guest mode cloud variables...\");\r\n\r\n if (user?.isGuest) {\r\n let guestUser = user as GuestUser;\r\n this.mGuestModeCloudVariables.params.partnerId = guestUser.partnerId ?? \"\";\r\n this.updateCloudVariableSet(this.mGuestModeCloudVariables);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n *\r\n * Updates all Feature Config Cloud Variables.\r\n */\r\n public updateFeatureConfigs(): void {\r\n logger.info(\"Updating Feature Configs...\");\r\n this.updateCloudVariableSet(this.mCloudFeatureConfigss);\r\n }\r\n\r\n private async updateCloudVariableSet(set: CloudVariableSet): Promise {\r\n const varList = Object.keys(set.variables);\r\n logger.info(`Requesting CloudVariables ${varList}`);\r\n try {\r\n const cloudVariablesResult = await this.mRestClient.getCloudVariables(varList, this.mConsent.user, set.params);\r\n for (const v of cloudVariablesResult) {\r\n if (v.name && v.name in set.variables) {\r\n (set.variables[v.name] as CloudVariable).update(v);\r\n }\r\n }\r\n } catch (e: any) {\r\n logger.error(`Unable to retrieve Cloud Variables. ${e.message}`);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Device } from \"../device/device\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { GamepadButtonName, GamepadKeypressCallback } from \"./gamepad-handler.types\";\r\n\r\nconst logger = Logging.getLogger(\"gamepad\");\r\n\r\nconst GamepadTickIntervalMs = {\r\n Default: 10, // ~100Hz\r\n Lean: 33 // ~30Hz\r\n};\r\n\r\nconst LONG_PRESS_DURATION_MS: number = 800;\r\nconst KEYDOWN_DURATION_MS: number = 250;\r\n\r\nexport class GamepadHandler {\r\n private readonly mDevice: Device;\r\n private mGamepads: Map = new Map();\r\n private mTickIntervalMs: number = GamepadTickIntervalMs.Lean;\r\n private mStartTime?: number;\r\n private mRequestHandle?: number;\r\n private mGamepadLongPressCallbacks: Map = new Map();\r\n private mGamepadKeyPressCallbacks: Map = new Map();\r\n\r\n public get isGamepadConnected(): boolean {\r\n for (const gp of Device.getGamepads()) {\r\n if (gp?.connected) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n constructor (device: Device) {\r\n this.mDevice = device;\r\n\r\n // calling navigator.getGamepads breaks built-in Android WebView handling, at the time,\r\n // this GamepadHandler is only used for browser.\r\n //\r\n // sdk-remove-when (GFNSDK-1999)\r\n if (!device.isNative) {\r\n window.addEventListener(\"gamepadconnected\", this.onGamepadConnection.bind(this, true));\r\n window.addEventListener(\"gamepaddisconnected\", this.onGamepadConnection.bind(this, false));\r\n\r\n logger.info(`gamepad handler created (connected:${this.isGamepadConnected})`);\r\n }\r\n }\r\n\r\n public registerLongPressCallback(button: GamepadButtonName, cb: GamepadKeypressCallback) {\r\n logger.info(`register callback for button #${button} long press`);\r\n if (this.mGamepadLongPressCallbacks.has(button)) {\r\n let cbList = this.mGamepadLongPressCallbacks.get(button);\r\n if (cbList) {\r\n cbList.push(cb);\r\n this.mGamepadLongPressCallbacks.set(button, cbList);\r\n }\r\n } else {\r\n this.mGamepadLongPressCallbacks.set(button, [cb]);\r\n }\r\n if (this.isGamepadConnected) {\r\n this.start(GamepadTickIntervalMs.Default);\r\n }\r\n }\r\n\r\n public registerKeyPressCallback(button: GamepadButtonName, cb: GamepadKeypressCallback) {\r\n logger.info(`register callback for button #${button} key press`);\r\n if (this.mGamepadKeyPressCallbacks.has(button)) {\r\n let cbList = this.mGamepadKeyPressCallbacks.get(button);\r\n if (cbList) {\r\n cbList?.push(cb);\r\n this.mGamepadKeyPressCallbacks.set(button, cbList);\r\n }\r\n } else {\r\n this.mGamepadKeyPressCallbacks.set(button, [cb]);\r\n }\r\n if (this.isGamepadConnected) {\r\n this.start(GamepadTickIntervalMs.Default);\r\n }\r\n }\r\n\r\n private onGamepadConnection(connected: boolean, e: GamepadEvent) {\r\n const gp = e.gamepad;\r\n logger.info(`Gamepad #${gp.index} (id:${gp.id}) ${connected?\"connected\":\"disconnected\"}`);\r\n const now = (new Date()).getMilliseconds();\r\n if (connected) {\r\n logger.info(`${gp.buttons.length} buttons, ${gp.axes.length} axes`);\r\n this.mTickIntervalMs = GamepadTickIntervalMs.Default;\r\n let buttonTsList: number[] = [];\r\n gp.buttons.forEach((button) => {\r\n buttonTsList.push(button.pressed ? now : 0);\r\n });\r\n this.mGamepads.set(gp.index, buttonTsList);\r\n } else {\r\n if (this.mGamepads.has(gp.index)) {\r\n this.mGamepads.delete(gp.index);\r\n }\r\n if (this.mGamepads.size === 0) {\r\n this.mTickIntervalMs = GamepadTickIntervalMs.Lean;\r\n }\r\n }\r\n }\r\n\r\n public start(intervalMs?: number) {\r\n this.mTickIntervalMs = intervalMs ?? GamepadTickIntervalMs.Lean;\r\n if (this.mStartTime == undefined) {\r\n this.mRequestHandle = window.requestAnimationFrame(this.tick.bind(this));\r\n }\r\n logger.info(`started gamepad handler (handle:${this.mRequestHandle})`);\r\n }\r\n\r\n public stop() {\r\n logger.info(`stopping gamepad handler (handle:${this.mRequestHandle})`);\r\n if (this.mRequestHandle != undefined) {\r\n window.cancelAnimationFrame(this.mRequestHandle);\r\n this.mRequestHandle = undefined;\r\n }\r\n this.mStartTime = undefined;\r\n this.mGamepadKeyPressCallbacks.clear();\r\n this.mGamepadLongPressCallbacks.clear();\r\n this.mGamepads.clear();\r\n }\r\n\r\n private tick(ts: number) {\r\n if (this.mStartTime == undefined) {\r\n this.mStartTime = ts;\r\n }\r\n else if (ts - this.mStartTime >= this.mTickIntervalMs) {\r\n Device.getGamepads().forEach((gamepad, index) => {\r\n this.updateGamepadState(ts, index, gamepad);\r\n });\r\n this.mStartTime = ts;\r\n }\r\n this.mRequestHandle = window.requestAnimationFrame(this.tick.bind(this));\r\n }\r\n\r\n private updateGamepadState(now: number, index: number, gamepad: Gamepad|null) {\r\n if (gamepad === null) {\r\n if (this.mGamepads.has(index)) {\r\n logger.warn(`Gamepad #${index} info is no longer available. Tracking removed.`);\r\n this.mGamepads.delete(index);\r\n }\r\n } else if (this.mGamepads.has(index)){\r\n // check for long press\r\n if (this.mGamepadLongPressCallbacks.size > 0) {\r\n this.mGamepadLongPressCallbacks.forEach((callbacks, button) => {\r\n if (button >= 0 && button < gamepad.buttons.length) {\r\n if (gamepad.buttons[button].pressed ) {\r\n if (now - this.mGamepads.get(index)![button] > LONG_PRESS_DURATION_MS) {\r\n callbacks.forEach((cb) => cb());\r\n this.mGamepads.get(index)![button] = now;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // check for key press\r\n if (this.mGamepadKeyPressCallbacks.size > 0) {\r\n this.mGamepadKeyPressCallbacks.forEach((callbacks, button) => {\r\n if (button >= 0 && button < gamepad.buttons.length) {\r\n if (gamepad.buttons[button].pressed ) {\r\n if (now - this.mGamepads.get(index)![button] > KEYDOWN_DURATION_MS) {\r\n callbacks.forEach((cb) => cb());\r\n this.mGamepads.get(index)![button] = now;\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n // update timestamps\r\n let buttonTsList: number[] = []\r\n gamepad.buttons.forEach((button, buttonIndex) => {\r\n // do not update if still pressed\r\n if (this.mGamepads.get(index)![buttonIndex] > 0 && button.pressed) {\r\n buttonTsList.push(this.mGamepads.get(index)![buttonIndex]);\r\n return;\r\n }\r\n buttonTsList.push(button.pressed ? now : 0);\r\n });\r\n this.mGamepads.set(index, buttonTsList);\r\n } else {\r\n // Not null but untracked: Add to tracker\r\n logger.info(`gamepad #${index} detected (${gamepad.buttons.length} buttons, ${gamepad.axes.length} axes)`);\r\n this.mTickIntervalMs = GamepadTickIntervalMs.Default;\r\n let buttonTsList: number[] = [];\r\n gamepad.buttons.forEach((button) => {\r\n buttonTsList.push(button.pressed ? now : 0);\r\n });\r\n this.mGamepads.set(index, buttonTsList);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { HttpServerConfiguration } from \"../core/http-client.types\";\r\nimport { JWTPartner } from \"../idm/jwt\";\r\n\r\nexport interface AlsTokenExchangeData {\r\n token: JWTPartner,\r\n partnerSecureData: string,\r\n}\r\n\r\nexport interface AccountLinkingConfiguration extends HttpServerConfiguration {\r\n}\r\n\r\nexport interface IgoShareSettings {\r\n [key: string]: any;\r\n shortcutControls?: any;\r\n micIconPosition?: any;\r\n isMicFeatureEnabled?: boolean;\r\n statisticsPosition?: any;\r\n networkStatusIndicatorPosition?: any;\r\n virtualKeyboard?: boolean;\r\n virtualGamepad?: boolean;\r\n pasteDefaultOn?: boolean;\r\n isInGameStatisticsEnabled?: boolean;\r\n}\r\n\r\nexport interface ForceTouchModeSettings {\r\n launchStreamInTouchFriendlyMode?: boolean;\r\n useOsc?: boolean;\r\n}\r\n\r\nexport interface GuestModeConfig {\r\n hideAppStartButton: boolean;\r\n isWindowedModeCursorTypeFree: boolean;\r\n isNetworkTestEnabled: boolean;\r\n isIGOEnabled: boolean;\r\n IsOSCEnabled: boolean;\r\n isPostSessionTipsEnabled: boolean;\r\n isStreamingTimerEnabled: boolean;\r\n disableCloseOnStreamExit: boolean;\r\n forceTouchModeSettings?: ForceTouchModeSettings;\r\n isGuestAppFlow: boolean;\r\n igoSettings?: IgoShareSettings;\r\n IsWhitelabelingEnabled: boolean;\r\n metadata: any;\r\n}\r\n\r\nexport const DEFAULT_GUESTMODE_IGO_CONFIG = {\r\n shortcutControls: false,\r\n micIconPosition: \"rightTop\",\r\n isMicFeatureEnabled: true,\r\n statisticsPosition: \"none\",\r\n networkStatusIndicatorPosition: \"none\",\r\n virtualKeyboard: true,\r\n virtualGamepad: false,\r\n pasteDefaultOn: true,\r\n isInGameStatisticsEnabled: false,\r\n}\r\n\r\nexport const DEFAULT_FORCE_TOUCHMODE_SETTINGS = {\r\n launchStreamInTouchFriendlyMode: false,\r\n useOsc: false,\r\n}\r\n\r\nexport const DEFAULT_GUESTMODE_CONFIG = {\r\n hideAppStartButton: false,\r\n isWindowedModeCursorTypeFree: false,\r\n isNetworkTestEnabled: false,\r\n isIGOEnabled: true,\r\n IsOSCEnabled: true,\r\n isPostSessionTipsEnabled: false,\r\n isStreamingTimerEnabled: true,\r\n disableCloseOnStreamExit: false,\r\n forceTouchModeSettings: DEFAULT_FORCE_TOUCHMODE_SETTINGS,\r\n isGuestAppFlow: true,\r\n igoSettings: DEFAULT_GUESTMODE_IGO_CONFIG,\r\n IsWhitelabelingEnabled: false,\r\n metadata: {}\r\n};\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { EventEmitter } from \"../core/event-emitter\";\r\nimport { Nullable } from \"../core/util.types\";\r\nimport { CloudVariable } from \"../gxtarget/cloud-variable\";\r\nimport { CloudVariableService } from \"../gxtarget/cloud-variable-service\";\r\nimport { GuestFlowConfig, GuestFlowPartnerConfig } from \"../gxtarget/cloud-variables.types\";\r\nimport { Logging } from \"../logging/logging\";\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { Utils } from \"../core/utils\";\r\nimport { Consent } from \"../idm/consent\";\r\nimport { User } from \"../idm/user\";\r\nimport { GuestUser } from \"../idm/guest-user\";\r\nimport { DEFAULT_GUESTMODE_CONFIG, GuestModeConfig } from \"./guestmode.types\";\r\n\r\nconst logger = Logging.getLogger(\"gxtarget/cloud-variable\");\r\n\r\nexport class GuestMode {\r\n private mConsent: Consent;\r\n private mGuestModeCloudVariable: CloudVariable;\r\n private mGuestFlowClientConfig: GuestFlowPartnerConfig = {};\r\n private mGuestModeConfig: GuestModeConfig = DEFAULT_GUESTMODE_CONFIG;\r\n private mGuestUser: Nullable = null;\r\n\r\n constructor(consent: Consent, cloudVariableService: CloudVariableService) {\r\n this.mConsent = consent;\r\n this.mConsent.on(\"userUpdate\", this.onUserUpdate.bind(this));\r\n this.mGuestModeCloudVariable = cloudVariableService.get(\"guestFlowClientConfigSdk\");\r\n this.mGuestModeCloudVariable.on(\"updated\", this.onCloudVariableUpdate.bind(this));\r\n }\r\n\r\n public get config(): GuestModeConfig {\r\n return this.mGuestModeConfig;\r\n }\r\n\r\n public get isGuestMode(): boolean {\r\n return this.mGuestUser?.isGuest || false;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mGuestModeCloudVariable.value.then((value: GuestFlowConfig) => {\r\n this.updateGuestFlowConfig(value);\r\n })\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public onUserUpdate(user: Nullable): void {\r\n if (user?.isGuest) {\r\n this.mGuestUser = user as GuestUser;\r\n } else {\r\n this.mGuestUser = null;\r\n }\r\n }\r\n\r\n private async onCloudVariableUpdate(cloudVar: CloudVariable) {\r\n this.updateGuestFlowConfig(await cloudVar.value);\r\n }\r\n\r\n private updateGuestFlowConfig(config: GuestFlowConfig) {\r\n let cmsIdConfig = {};\r\n if (this.mGuestUser?.cmsId) {\r\n cmsIdConfig = config[this.mGuestUser.cmsId] ?? {};\r\n }\r\n\r\n this.mGuestFlowClientConfig = Utils.object.deepmerge(config.defaultPartnerConfig, cmsIdConfig);\r\n const { allowedRedirectUrls, ...guestModeConfig } = this.mGuestFlowClientConfig;\r\n\r\n this.mGuestModeConfig = Utils.object.deepmerge(DEFAULT_GUESTMODE_CONFIG, guestModeConfig);\r\n }\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { ClipboardPasteConfig } from \"./cloud-variables.types\";\r\n\r\n/** @internal */\r\nexport const DEFAULT_CLIPBOARD_CONFIG: ClipboardPasteConfig = {\r\n isEnabled: false,\r\n maxPasteBuffer: 65536\r\n}\r\n","/* Copyright (c) 2023-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { IInitializeContext } from \"../api.types\";\r\nimport { CloudVariable } from \"./cloud-variable\";\r\nimport { CloudVariableService } from \"./cloud-variable-service\";\r\nimport { ClipboardPasteConfig } from \"./cloud-variables.types\";\r\nimport { DEFAULT_CLIPBOARD_CONFIG } from \"./cloud-feature-configs.types\";\r\n\r\nexport class CloudFeatureConfigs {\r\n private mCloudVariableService: CloudVariableService;\r\n\r\n private mClipboardPasteConfigCloudVariable: CloudVariable;\r\n private mClipboardPasteConfig: ClipboardPasteConfig = DEFAULT_CLIPBOARD_CONFIG;\r\n\r\n public get clipboardPasteConfig(): ClipboardPasteConfig {\r\n return this.mClipboardPasteConfig;\r\n }\r\n\r\n constructor (cloudVariableService: CloudVariableService) {\r\n this.mCloudVariableService = cloudVariableService;\r\n this.mClipboardPasteConfigCloudVariable = cloudVariableService.get(\"clipboardPasteFeatureConfigSdk\");\r\n this.mClipboardPasteConfigCloudVariable.on(\"updated\", this.onClipboardPasteCloudVariableUpdate.bind(this));\r\n }\r\n\r\n /** @internal **/\r\n private async onClipboardPasteCloudVariableUpdate(cloudVar: any) {\r\n this.mClipboardPasteConfig = await cloudVar.value;\r\n }\r\n\r\n /** @internal **/\r\n public async initialize(context: IInitializeContext): Promise {\r\n this.mClipboardPasteConfigCloudVariable.value.then((value: ClipboardPasteConfig) => {\r\n this.mClipboardPasteConfig = value;\r\n });\r\n this.updateFeatureConfigs();\r\n }\r\n\r\n public updateFeatureConfigs() {\r\n this.mCloudVariableService.updateFeatureConfigs();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) 2020-2024, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\nimport { Auth } from \"./idm/auth\";\r\nimport { Configuration } from \"./configuration/configuration\";\r\nimport { APIBase } from \"./api-base\";\r\nimport { IInitializable, Nullable, RecursivePartial } from \"./core/util.types\";\r\nimport { Platform } from \"./platform/platform\";\r\nimport { Device } from \"./device/device\";\r\nimport { Settings } from \"./settings/settings\";\r\nimport { Entitlement } from \"./entitlement/entitlement\";\r\nimport { I18N } from \"./i18n/i18n\";\r\nimport { RestClient } from \"./rest/rest-client\";\r\nimport { Server } from \"./server/server\";\r\nimport { IStorage } from \"./storage/storage.types\";\r\nimport { Catalog } from \"./catalog/catalog\";\r\nimport { Version } from \"./version/version\";\r\nimport { Logging } from \"./logging/logging\";\r\nimport { IInitializeContext } from \"./api.types\";\r\nimport { Streamer } from \"./streamer/streamer\";\r\nimport { NetworkTest } from \"./networktest/network-test\";\r\nimport { APIError } from \"./api-error\";\r\nimport { APIErrorCode } from \"./api-error.types\";\r\nimport { Telemetry } from \"./telemetry/telemetry\";\r\nimport { RetrieveOverrides } from \"./overrides/overrides\";\r\nimport { Config } from \"./configuration/configuration.types\";\r\nimport { Utils } from \"./core/utils\";\r\nimport { Consent } from \"./idm/consent\";\r\nimport { Feedback } from \"./telemetry/feedback\";\r\nimport { DistributedTracing } from \"./telemetry/distributed-tracing\";\r\nimport { RemoteConfig } from \"./gxtarget/remote-configuration\";\r\nimport { CloudVariableService } from \"./gxtarget/cloud-variable-service\";\r\nimport { User } from \"./idm/user\";\r\nimport { GamepadHandler } from \"./input/gamepad-handler\";\r\nimport { GuestMode } from \"./guestmode/guestmode\";\r\nimport { CloudFeatureConfigs } from \"./gxtarget/cloud-feature-configs\";\r\n\r\nconst logger = Logging.getLogger(\"api\");\r\n\r\n/**\r\n *\r\n * The main object used to interact with the GFN Client SDK.\r\n *\r\n * @alias GFN\r\n */\r\nexport class API extends APIBase {\r\n private mIsInitialized: boolean = false;\r\n private mSettings: Nullable = null;\r\n private mStorage!: IStorage;\r\n private mOverrideToolOverrides!: RecursivePartial;\r\n private readonly mPlatform: Platform;\r\n private readonly mConfigurationPromise: Promise;\r\n private readonly mAuth: Auth;\r\n private readonly mEntitlement: Entitlement;\r\n private readonly mServer: Server;\r\n private readonly mCatalog: Catalog;\r\n private readonly mRestClient: RestClient;\r\n private readonly mRemoteConfig: RemoteConfig;\r\n private readonly mCloudVariables: CloudVariableService;\r\n private readonly mGuestMode: GuestMode;\r\n private readonly mCloudFeatureConfigs: CloudFeatureConfigs;\r\n private readonly mConsent: Consent;\r\n private readonly mI18N: I18N;\r\n private readonly mTelemetry: Telemetry;\r\n private readonly mFeedback: Feedback;\r\n private readonly mDistributedTracing: DistributedTracing;\r\n private readonly mGamepadHandler: GamepadHandler;\r\n\r\n /**\r\n * Gets an instance that represents the platform\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get platform(): Platform {\r\n this.validateInitialization();\r\n return this.mPlatform;\r\n }\r\n\r\n /**\r\n * Gets an instance that represents the current device.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get device(): Device {\r\n this.validateInitialization();\r\n return this.mPlatform.device;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used for user authentication and authorization.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get auth(): Auth {\r\n this.validateInitialization();\r\n return this.mAuth;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used for system and user consent management.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get consent(): Consent {\r\n this.validateInitialization();\r\n return this.mConsent;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to get access to the users\r\n * subscription and library.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get entitlement(): Entitlement {\r\n this.validateInitialization();\r\n return this.mEntitlement;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to interact with the session streaming\r\n * service.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get server(): Server {\r\n this.validateInitialization();\r\n return this.mServer;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to access the GeForce NOW catalog.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get catalog(): Catalog {\r\n this.validateInitialization();\r\n return this.mCatalog;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to make requests directly to one of\r\n * the GFN REST services.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get restClient(): RestClient {\r\n this.validateInitialization();\r\n return this.mRestClient;\r\n }\r\n\r\n /**\r\n * Gets an instance of the active runtime settings.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get settings(): Settings {\r\n this.validateInitialization();\r\n return this.mSettings!;\r\n }\r\n\r\n /**\r\n * Gets an instance of the version information\r\n */\r\n public get version(): Version {\r\n return this.mPlatform.sdkVersion;\r\n }\r\n\r\n /**\r\n * Gets an instance of the build time configuration\r\n *\r\n * @internal\r\n */\r\n public get configuration(): Promise {\r\n return (async () => {\r\n return this.mConfigurationPromise;\r\n })();\r\n }\r\n\r\n /**\r\n * Gets the storage instance, unless otherwise configured, this will be\r\n * an instance that can read and write to local storage.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get storage(): IStorage {\r\n this.validateInitialization();\r\n return this.mStorage;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to interact with the streamer.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidState}. The streamer has not yet been initialized.\r\n */\r\n public get streamer(): Streamer {\r\n this.validateInitialization();\r\n return this.mPlatform.streamer;\r\n }\r\n\r\n /**\r\n * Gets an instance that can be used to perform a network test.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKIsNotInitialized}.\r\n */\r\n public get networkTest(): NetworkTest {\r\n this.validateInitialization();\r\n return this.mPlatform.mNetworkTest;\r\n }\r\n\r\n /** @internal **/\r\n public get telemetry(): Telemetry {\r\n this.validateInitialization();\r\n return this.mTelemetry;\r\n }\r\n\r\n /**\r\n * Gets the currently logged in user;\r\n * otherwise, gets the current guest user;\r\n * otherwise, null.\r\n *\r\n * This is used when it's not certain whether the current user\r\n * is a guest user or a logged in user.\r\n */\r\n public get currentUser(): Nullable {\r\n if (this.mAuth) {\r\n return this.mAuth.currentUser;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Gets a value that indicates whether a user is logged in or not.\r\n */\r\n public get isLoggedIn(): boolean {\r\n const user: Nullable = this.currentUser;\r\n return (user ? user.isLoggedIn : false);\r\n }\r\n\r\n /** @internal **/\r\n constructor() {\r\n super();\r\n\r\n logger.info(`Is Secure Context:${window.isSecureContext}`);\r\n this.mPlatform = new Platform();\r\n\r\n // Start reading the overrides right away, so that GFN.configuration\r\n // will be able to resolve without the user calling GFN.initialize() yet\r\n this.mConfigurationPromise = new Promise((resolve) => {\r\n // must refresh the device information before we do anything else as we'll need it\r\n // to figure out which platform / device / browser we are running on\r\n Device.RefreshInformation().then(() => {\r\n RetrieveOverrides().then((overrides: RecursivePartial) => {\r\n logger.info(\"received overrides tool overrides: \" + JSON.stringify(overrides, null, 2));\r\n resolve(new Configuration(this.mPlatform.device, overrides));\r\n });\r\n });\r\n });\r\n\r\n\r\n this.mDistributedTracing = new DistributedTracing(this.mPlatform, this.mPlatform.device);\r\n this.mConsent = new Consent();\r\n this.mTelemetry = new Telemetry(this.mPlatform, this.mConsent);\r\n this.mRestClient = new RestClient(this.mPlatform.device, this.mDistributedTracing);\r\n this.mRemoteConfig = new RemoteConfig(this.mRestClient);\r\n this.mCloudVariables = new CloudVariableService(this.mConsent, this.mRestClient);\r\n this.mGuestMode = new GuestMode(this.mConsent, this.mCloudVariables);\r\n this.mCloudFeatureConfigs = new CloudFeatureConfigs(this.mCloudVariables);\r\n this.mFeedback = new Feedback(this.mPlatform, this.mConsent, this.mRestClient, this.mDistributedTracing);\r\n this.mI18N = new I18N(this.mRestClient);\r\n this.mAuth = new Auth(this.mPlatform.device, this.mConsent, this.mRestClient, this.mDistributedTracing);\r\n this.mServer = new Server(this.mPlatform, this.mAuth, this.mRestClient, this.mI18N);\r\n this.mEntitlement = new Entitlement(this.mAuth, this.mRestClient);\r\n this.mCatalog = new Catalog(this.mAuth, this.mRestClient, this.mI18N);\r\n this.mGamepadHandler = new GamepadHandler(this.mPlatform.device);\r\n }\r\n\r\n /**\r\n * Initializes the GFN Client SDK.\r\n *\r\n * See [Getting Started](../guides/getting-started.html) for information on initializing the SDK.\r\n *\r\n * @param settings\r\n * The runtime settings.\r\n *\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.SDKInitializationFailed}. The SDK could not be initialized, see error details.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingSettings}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. The {@link Settings.clientId} OR {@link Settings.partnerId} must be provided.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.MissingParameter}. The {@link Settings.languageCode} must be provided.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.AttempedInternalConfigurationOverride}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. The logging level is invalid.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. The http configuration has an invalid rate limiter type.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidParameter}. The {@link Settings.languageCode} is not in an expected format.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidVersion}. The version number found in the configuration is invalid.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.InvalidState}. The logger has not yet been created.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RuntimeHostNotSupported}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RuntimVersionNew}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.RuntimVersionOld}.\r\n * @throws {@link APIError}\r\n * with {@link APIErrorCode.Http}. The OpenID configuration could not be loaded from the server.\r\n *\r\n * @async\r\n */\r\n public async initialize(settings: Settings): Promise {\r\n logger.info(\"Initializing GFN Client SDK...\");\r\n\r\n const configuration: Configuration = await this.mConfigurationPromise;\r\n\r\n if (configuration.settingsOverrides) {\r\n logger.info(\"Overriding settings:\", JSON.stringify(configuration.settingsOverrides, null, 2));\r\n settings = Utils.object.deepmerge(settings, configuration.settingsOverrides);\r\n }\r\n\r\n if (!settings) {\r\n throw new APIError(APIErrorCode.MissingSettings);\r\n }\r\n\r\n if (!settings.clientId && !settings.partnerId) {\r\n throw new APIError(APIErrorCode.MissingParameter, \"Must provide either a clientId OR a partnerId in the settings.\");\r\n }\r\n\r\n this.mSettings = settings;\r\n this.mStorage = settings.storageFactory.create();\r\n\r\n await configuration.initialize(settings);\r\n Logging.initialize(configuration.logging);\r\n\r\n if (settings.httpClientFactory) {\r\n this.mRestClient.httpFactory = settings.httpClientFactory;\r\n }\r\n\r\n try {\r\n // Init platform first. sdkVersion isn't valid without it\r\n await this.mPlatform.initialize(configuration, this.mSettings, this.mStorage, this.mI18N, this.mEntitlement, this.mAuth, this.mCatalog, this.mTelemetry, this.mFeedback, this.mGuestMode, this.mGamepadHandler, this.mCloudFeatureConfigs);\r\n this.version.check();\r\n\r\n const initCtx: IInitializeContext = {\r\n configuration: configuration,\r\n device: this.mPlatform.device,\r\n settings: this.mSettings!,\r\n storage: this.mStorage!,\r\n sdkVersion: this.mPlatform.sdkVersion\r\n };\r\n\r\n // Init other common dependencies next\r\n await this.mConsent.initialize(initCtx);\r\n await this.mTelemetry.initialize(initCtx);\r\n await this.mDistributedTracing.initialize(initCtx);\r\n await this.mRestClient.initialize(initCtx);\r\n\r\n this.mRestClient.on(\"httpResult\", this.mTelemetry.onHttpResult.bind(this.mTelemetry));\r\n\r\n const initializables: IInitializable[] = [\r\n this.mRemoteConfig,\r\n this.mCloudVariables,\r\n this.mGuestMode,\r\n this.mCloudFeatureConfigs,\r\n this.mI18N,\r\n this.mAuth,\r\n this.mFeedback,\r\n this.mServer,\r\n this.mEntitlement,\r\n this.mCatalog\r\n ];\r\n\r\n await Promise.all(initializables.map((init) => init.initialize(initCtx)));\r\n\r\n this.mIsInitialized = true;\r\n\r\n // Start recording device logs\r\n this.mPlatform.remoteLogger.start();\r\n }\r\n catch (e: unknown) {\r\n this.mIsInitialized = false;\r\n if (e instanceof Error) {\r\n throw new APIError(APIErrorCode.SDKInitializationFailed, e.toString());\r\n } else {\r\n throw new APIError(APIErrorCode.SDKInitializationFailed, \"Unknown error\");\r\n }\r\n }\r\n }\r\n\r\n private validateInitialization(): void {\r\n if (!this.mIsInitialized) {\r\n throw new APIError(APIErrorCode.SDKIsNotInitialized);\r\n }\r\n }\r\n}\r\n","/* Copyright (c) 2020-2022, NVIDIA CORPORATION. All rights reserved.\r\n *\r\n * NVIDIA CORPORATION and its licensors retain all intellectual property\r\n * and proprietary rights in and to this software, related documentation\r\n * and any modifications thereto. Any use, reproduction, disclosure or\r\n * distribution of this software and related documentation without an express\r\n * license agreement from NVIDIA CORPORATION is strictly prohibited.\r\n */\r\n\r\n/**\r\n * @packageDocumentation\r\n * @module GFN\r\n */\r\n\r\nimport { API } from \"./api\";\r\n\r\n/**\r\n * The main GFN Client SDK entry point\r\n */\r\nlet GFN = null;\r\n\r\ntry {\r\n GFN = new API();\r\n} catch (e) {\r\n window.console.error(\"Unable to create the GFN Client SDK.\", e);\r\n}\r\n\r\n(window as any)[\"GFN\"] = GFN;\r\nexport default GFN;\r\n"],"names":["root","factory","exports","module","define","amd","a","i","self","__createBinding","this","Object","create","o","m","k","k2","undefined","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__exportStar","p","prototype","hasOwnProperty","call","value","TracingManager","PackageVersion","window","genversion_1","version","tracingmanager_1","CancellableWait","constructor","waitTimeInMS","signal","_a","timerId","timedOut","aborted","promise","Promise","resolve","reject","promiseResolve","promiseReject","abortSignal","onAbortFunc","onAbort","bind","addEventListener","setTimeout","onTimeout","cancel","removeEventListener","clearTimeout","getPromise","isTimedOut","isAborted","EventEmitter","emitSynchronously","handlers","Map","addListener","eventname","handler","handles","add","newHandles","Set","set","removeListener","delete","removeAllListenersOfEvent","removeAllListeners","clear","hasListener","size","emit","args","err","console","log","GS_CodecError_EventDef","GS_PropertyChange_EventDef","GS_HttpCallResultDef","GS_WsCallResultDef","GS_Sleep_EventDef","GS_ConnectivityCheckDef","GS_ClientMetricEventDef","GS_ExceptionInfoDef","GS_DebugInfoDef","GS_SystemAPICallResultDef","GS_FeatureDef","TelemetryEventBase","GSEventTypes","name","gdprLevel","info","parameters","ts","Date","toISOString","super","LegacyLogEmitter","eventemitter_1","logEventName","logQueue","onLogEvent","logData","logEvent","logModule","timeStamp","timestamp","logLevel","level","logtag","tag","logstr","message","push","length","registerLogCallback","Log","settings_1","core_1","LogImpl","enable","RtcUtilsSettings","loggingEnabled","enableConsoleLogging","consoleLoggingEnabled","callback","setLogCallback","ObservableArray","Array","customPush","setCallback","action","pushCallback","splice","retValue","apply","AddPlatformTelemetry","getPlatformDetails","logger_1","workerutils_1","LOGTAG","UNKNOWN_VERSION","FALLBACK_TIMEOUT","GLWorker","getGLDebugInfo","glDebugInfo","createCanvas","OffscreenCanvas","document","createElement","canvas","glCtx","getContext","glDbgExt","vendorName","UNMASKED_VENDOR_WEBGL","rendererName","UNMASKED_RENDERER_WEBGL","present","doWork","HighEntropyWorker","uad","navigator","userAgentData","getHighEntropyValues","then","heValues","brands","mobile","SmartTVWorker","smartTvInfo","isKnownTVDevice","modelName","userAgent","uaString","toUpperCase","knownTvUAModels","knownTvVendors","RegExp","join","test","matches","match","NavigatorPlatformWorker","platform","platformImplSingleton","start","finish","voiceIsChromeOS","voiceIsChrome","voiceIsFirefox","voiceIsFirefoxAndroid","voiceIsAndroid","voiceIsMicrosoft","voiceIsApple","voiceIsEdge","voiceIsWindows","voiceIsAppleEllen","voiceWasKnown","isBrowserEdge","isBrowserEdgeLegacy","isBrowserEdgeiOS","isBrowserSafari","isBrowserChrome","isBrowserChromeiOS","isBrowserNetscape","isBrowserFirefoxiOS","isBrowserFirefoxTV","isBrowserOpera","isBrowserOperaiOS","isBrowserOperaTouch","isBrowserBrave","isBrowserYandex","isBrowserSamsungChromium","isBrowserReactBased","isPlatformMacIntel","isPlatformiPhone","isPlatformWin","isPlatformiPad","isPlatformLinux","isPlatformFreeBsdX86","isPlatAndroid","isPlatWebOS","isPlatTizen","isPlatCcOS","isPluginChromeNative","isPluginChromePDF","isPluginChromiumPDF","isPluginEdgePDF","isPluginSamsungHealth","isBrandChrome","isBrandEdge","isBrandOpera","isBrandYandex","isBrandChromium","isBrandWebview","isBrandUnknown","isMobileUAD","isMobileHE","isMobileUAD_HE","isMobileNavigator","isGLXbox","isGLXboxSeries","isGLSteamDeck","isHEModelXbox","isHEModelFireTV","isHEModelBraviaTV","isHEModelChromecastTV","isHEModelShieldTV","isHEModelMiTV","isHEModelTVision","isHEPlatformWindows","isHEPlatformMac","isHEPlatformChromeOS","isHEPlatformChromiumOS","isHEPlatformAndroid","isHEPlatformLinux","isHEPlatformOverridden","isHEKnownTVDevice","isKnownTVDeviceUA","supportsAvif","supportsBigInt","supportsBigInt64Array","supportsDecodingInfo","supportsPerformanceNavigationTiming","supportsWebAssemblyExceptions","supportsBroadcastChannel","supportsGpuBuffer","supportsMediaRecorder","supportsDeviceLightEvent","supportsAbortSignalAbort","supportsBeforeInputEvent","supportsIntlDisplayNames","supportsIntlCollationOptions","supportsApplePay","supportsCredential","supportsBrowserRuntime","supportsSharedWorker","supportsCSSCounterStyleRule","supportsArrayBufferTransfer","supportsLargestContentfulPaint","supportsCSSregisterProperty","supportsGlobalAutofocus","supportsContactsPicker","supportsTrustedHtml","supportsWakeLock","supportsPromiseAny","supportsFileSystemHandle","supportsAtomicsWaitAsync","supportsCSSaspectRatio","supportsReadableStreamBYOBReader","supportsOverflowClip","supportsWebkitSupportsPresentationMode","supportsIsComposing","mediaPrimaryHover","mediaPrimaryNonHover","mediaPrimaryCoarsePointer","mediaPrimaryFinePointer","hasGL","hasUaData","isUaDataSpoofed","useUaData","ignoreUaData","wereHeChecksLate","performedChecks","performedVoiceChecks","performedGlChecks","performedHEChecks","performedNavigatorPlatformChecks","voiceCheckTimer","glCheckTimer","heCheckTimer","smartTvCheckTimer","platCheckTimer","glCheckFallbackTime","platCheckFallbackTime","gpuDetail","platformDetails","os","osRawVer","osVer","browser","browserVer","browserFullVer","browserBestVer","forging","spoofing","confidence","totalTime","vendor","queuedTelemetry","chromeRe","detectPlatformDetails","detector","getDetectorPromise","performance","now","beginChecking","checkVoices","synthesis","getVoices","curVoices","checkVoicesInternal","startedVoiceChecking","checkVoicesLambda","runAfterStartup","voices","voice","voiceID","startsWith","includes","all","checkGlDebugInfo","checkHighEntropy","checkAvif","checkUserAgentVersion","checkWindowProperties","checkWebOsBrowserVersion","checkPlatform","checkApplePay","checkPlugins","checkMobile","checkMediaQueries","checkTvDevices","validateChecks","createPlatformDetails","_b","_c","_d","_e","_f","_g","_h","_j","_k","_l","_m","_o","_p","_q","w","ownProp","navi","intl","arrayBufferProto","col","collation","resolvedOptions","elementProto","inputEventProto","videoElementProto","workerName","setPlatBasedFlags","platInfo","isForged","platCheckFallbackCompleted","handlePlatInfo","emitWorkerOverlongTelemetry","platCheckWithWorker","platCheckWithWorkerFailed","handlePlatError","error","emitWorkerErrorStringTelemetry","emitWorkerMessageErrorTelemetry","emitWorkerErrorTelemetry","e","worker","timeoutDelay","makeWorkerFromInterface","ex","emitWorkerCreationErrorTelemetry","emitWorkerTimeoutTelemetry","emitWorkerUnusedTelemetry","setGlBasedFlags","glDbgInfo","renderer","parts","split","trim","rendererLC","toLowerCase","exec","osVersion","glCheckFallbackCompleted","handleGlInfo","glCheckWithWorker","glCheckWithWorkerFailed","handleGlError","internalCheckUserAgentData","unknownBrands","brand","brandName","brandVersion","browserVersion","chromiumVersion","setUABasedTVFlags","smartTVInfo","UADeviceVendor","UADeviceModel","handleTvValues","tvCheckWithWorker","tvCheckWithWorkerFailed","handleTvError","makeSharedWorkerFromInterface","stopWorker","tvValues","maxTouchPoints","matchMedia","plugins","plugin","pluginName","avifSupported","createImageBitmap","blob","fetch","r","setHEBasedFlags","model","platformVer","platformVersion","uaVer","uaFullVersion","bitness","deviceName","sanitiseVer","replace","deriveWindowsVer","map","x","Number","parseInt","osRawVersion","derivePlatformVer","handleHEValues","heCheckWithWorker","heCheckWithWorkerFailed","handleHEError","chromeUaVersion","chromeUaMajorVer","crowApi","timeoutId","timeoutPromise","_","zoneless","windowAddEventListener","windowRemoveEventListener","eventHandler","crowPromise","JSON","stringify","requestMethod","detail","race","catch","d","finally","compareBrowserVersions","simpleVer","fullVer","re","simpleResult","fullResult","_r","_s","determineResult","osName","browserName","confidenceLevel","deviceVendor","vendorFull","deviceVendorFull","deviceOS","platformName","getDeviceOS","deviceModel","devModel","deviceType","devType","getDeviceType","setChromeDetails","getCurrentLinuxOsName","setFirefoxDetails","determineAndroidDeviceType","determineWindowsBrowser","determineAppleBrowser","determineAndroidBrowser","determineLinuxBrowser","webapis","productinfo","getFirmware","getRealModel","getLicensedVendor","determineTizenUAInfo","determineLinuxOrAndroidBrowser","determineFreeBsdBrowser","determineDesktopBrowser","browserTizenRe","btMatch","majorVer","setTvDeviceVendorDetails","shortest","screen","width","height","determineIOSBrowser","setSafariVersion","setIOSVersion","missingCredential","setTelemetryHandler","telemetry","emitDebugEvent","queuedEvent","data","type","filename","lineno","colno","exception","stack","delay","toString","mark","toBool","ConfigureRtcUtilsSettings","overrideData","settings","settingsMap","URLSearchParams","getSettingBool","key","TelemetryImpl","utils_1","clientConfig","telemetryEventIds","serverUrl","pendingEventPayloads","uploadToServerTimerId","httpConfiguration","method","headers","body","retryCount","timeout","clientTelemetryConfig","configure","config","option","telemetryCallback","event","isUserConsentTypeAvailable","uploadTelemetry","updateTelemetryCommonData","existingTelemetrySessionId","telemetryCommonData","sessionId","events","clientId","eventSchemaVer","deviceMake","integrationId","userId","externalUserId","idpId","eventProtocol","eventSysVer","getNewGuid","filter","hasUserConsentedForEvent","updateTelemetryEventIds","ids","processEvent","priority","eventPayload","blobData","createTelemetryRequestData","formData","Blob","result","sendBeacon","deviceGdprFuncOptIn","gdprTechOptIn","gdprBehOptIn","commonData","sentTs","formattedEventDetail","performTelemetryUpload","performHttpRequest","response","status","TracingComponent","api_1","tracer","trace","getTracer","getInstance","instance","createSpan","operationName","fn","span","startSpan","context","with","setSpan","active","async","end","translatePlatformDetailsForClientHeader","translatePlatformDetailsForPayload","TranslatedPlatformDetails","details","_platformDetails","_gxtDetails","translateForPayload","_lcarsDetails","translateForClientHeaders","getMappedDeviceType","platformDeviceType","getMappedBrowserName","getMappedDeviceOS","platformOS","extractDeviceTypeForBrowserClient","extractBrowserTypeForBrowserClient","mapOSPlatformNameToSupportedDeviceOs","gxtDetails","lcarsDetails","lastTranslatedDetails","osPlatformName","deviceTypeFromPlatformAPI","stripPartnerCustomData","convertNetworkTypeToTelemetryType","getRErrorDetails","customFetch","IsiOSVersionAtLeast","IsiOSVersion","IsSafariVersionAtLeast","IsChromeVersionAtLeast","IsChromeBrowser","isMobile","IsTV","IsTouchCapable","IsTouchDevice","DefaultHttpRequestOptions","IsFirefox","IsSteamDeck","IsAndroidOS","IsLinuxOS","IsTizenOS","IsMacOS","IsWindowsOS","IsChromeOS","IsWebOS","IsiPad","IsiPhone","IsSafari","IsChromium","isUnifiedErrorCode","GetHexString","convertToUnsignedInt","GetRandNumericString","IsValidIPv4","IsVisionPro","IsiDevice","IsiPadOS","IsiOS","IsXboxEdge","IsEdge","IsXbox","cancellablewait_1","code","VersionListIsAtLeast","actual","desired","actualPart","desiredPart","IsiOSVersionHelper","exact","major","minor","isMajorMinorVersionHelper","_ex","stringVer","every","val","index","ipAddress","multiplier","randnum","Math","floor","random","padEnd","slice","chrome","keepalive","url","options","authInfo","abortController","urlString","getActiveSpan","httpRequestAttributes","URL","protocol","hostname","pathname","setAttribute","setAttributes","addHttpRequestAttributes","max_retry_count","backOffIncrement","backOffDelay","backOffTime","requestHeaders","Headers","controller","AbortController","addReqHeaders","token","keys","forEach","carrier","propagation","inject","entries","resolve_","reject_","addResultSuccessAttributes","addErrorAttributes","performRequest","retryRequest","errorCode","wait","retries","onLine","fetchResponseStatus","reqInit","mode","cache","FETCH_GENERIC_ERR","retryCodes","DOMException","NETWORK_ERR","TIMEOUT_ERR","fetchTimeoutWait","promises","globalThis","Response","text","getFetchErrorCode","rejectReason","ABORT_ERR","getUtilsErrorCode","fetchError","Error","errCode","description","performHttpRequestImpl","array","Uint8Array","crypto","getRandomValues","guid","randomNumber","build","patch","timeoutMs","abort","network","CHANGELIST","makeWorkerUrlFromInterface","interfaceRef","messageHandler","errorHandler","connectHandler","blobStrings","classes","getPrototypeOf","reverse","klaz","addClassHierarchy","onconnectStr","onmessageStr","onerrorStr","workerBlob","createObjectURL","errorCallback","workerUrl","commonMessageHandler","commonErrorHandler","Worker","revokeObjectURL","setupWorkerAndCallback","workerCloseTimers","getWorkerOrPort","port","stopWorkerInternal","workerPort","has","postMessage","cmd","timer","terminate","MessagePort","close","hadError","errHandler","onmessage","cmdMsg","func","thisObj","ports","msgHandlers","messagePoster","msgHandler","PassThruServer","GridServer","dependencies_1","telemetryhandler_1","sessioncontrolimpl_1","sessioncontrolutils_1","convertSessionToGridSession","session","signalConnectionInfo","ip","connectionInfo","usage","appLevelProtocol","resourcePath","gridSession","mediaConnectionInfo","streamInfo","clientLocale","monitor","monitorSettings","widthInPixels","heightInPixels","fps","framesPerSecond","sdrHdrMode","convertSessionsToActiveSessionInfo","activeSessions","sessionList","activeSession","appId","state","appLaunchMode","SessionControlImpl","emitEventsSynchronously","subSessionId","subSessionsIdMap","clearLogCallback","launchRequestInfoMap","eventEmitter","sessionUpdateHandler","sessionUpdate","sendSessionUpdateEvent","isCallbackRegistered","ScTelemetryHandler","initialize","initParams","initializeParameters","deviceId","deviceHashId","clientStreamer","init","resetCache","uninitialize","cancelSessionSetup","getAllActiveSessions","addTracingAttributesToSpan","getAllActiveSessionsImpl","serverAddress","addResultToSpan","performSessionRequest","SessionRequestType","GET_ACTIVE_SESSIONS","getErrorCodeDescription","sendExceptionEvent","resetSubSessionId","setSessionId","setSubSessionId","getSessionId","getSubSessionId","putOrPostSession","startParams","putOrPostSessionImpl","isResume","addErrorAttributesAndReject","putOrPostRequestController","setCmsId","zoneName","zoneAddress","gpuType","launchRequestInfo","getGameLaunchRequestEvent","networkSessionId","sessionParameters","stream","streamParams","convertSessionParamsToSessionParameters","createSessionRequestURL","getSessionRequestData","startTime","RESUME_SESSION","CREATE_SESSION","launchDuration","round","serverId","updateSessionZoneInfo","isCancelCode","sendGameLaunchRequestEvent","getSession","_sessionId","isPoll","getSessionImpl","sessionUrl","getUrlForSession","server","getSessionRequestController","sessionSetupData","sessionUpdateCallback","lastQueuePosition","MAX_VALUE","isSessionInQueue","cancelController","launchTelemetryEvent","performSessionSetupPollingRequest","adsStateInfo","adUpdateArray","GET_SESSIONINFO","sendDeleteRequest","sendDeleteRequestImpl","DELETE_SESSION","getZoneName","getZoneAddress","getGpuType","isSessionSetupInProgress","eventData","queuePosition","eta","progressState","finalizedStreamingFeatures","streamingFeatures","updateAdState","adUpdate","ConfigureGridServerSettings","GridServerSettings","configureSessionControlSettings","CLIENT_IDENTIFICATION","CLIENT_VERSION","createSessionControl","sessionControlImpl","isValidAdStateTransition","convertAdActionToState","interfaces_1","tracing_1","lastState","newState","getResultFromRequestStatus","pmRequestStatus","statusCode","unifiedErrorCode","convertSessionStatus","BROWSER_PLATFORM_NAME","SESSION_URL_PATH","sanitizePmResponse","_t","_u","_v","_w","_x","sessionControlServerMap","httpRequestOptions","tracingAttributes","clientPlatformName","httpTimeout","SessionControlSettings","commonConfig","pmCommunication","httpConnectionTimeout","httpDataReceiveTimeout","httpRetryCount","httpBackOffDelay","pollingOptions","minInterval","pollingIntervalMin","maxInterval","pollingIntervalMax","step","pollingIntervalStep","queueSizePerStep","pollingQueueSizePerStep","adsPollingIntervalMinMS","adsThrottleIntervalMS","adsWaitTimeoutS","initializeParams","httpHeaders","deviceOs","clientType","clientAppVersion","browserType","clientHeaders","addClientHeaders","deviceOsVer","toLocaleLowerCase","setAuthInfo","setNetworkType","startSession","startParameters","updateCallback","startOrResumeSession","resumeSession","resumeParameters","deleteSession","isAuthInfoAvailable","processException","getActiveSessions","getSessionInfo","addSessionInfoToSpan","pmSession","addRequestStatusToSpan","requestStatus","requestStatusAttributes","requestId","statusDescription","extractSessionInformation","sessionRequestData","connectionInfoList","videoPortFound","signalingInfo","addressParts","domainUrlIndex","sessionControlInfo","indexOf","substring","newServerIp","newServerPort","currentServer","extractSessionList","pmSessions","processAdUpdates","setupController","onServerResponse","onException","sendAdUpdateRequest","requestData","adUpdates","from","AD_UPDATE","serverResponse","pairRemovedCount","adAction","sendAdUpdates","waitTime","adUpdateCount","nextAdUpdatePromise","adStateInfo","adId","nextAdState","lastClientAdState","previousAdId","previousAdsAction","clientTimestamp","startResumeParams","keyboardLayout","resume","hdr","monitorSetting","srd","audioMode","remoteControllersBitmap","networkTestSessionId","availableSupportedControllers","clientVersion","internalTitle","metaData","webSocketSignaling","surroundAudioInfo","clientTimezoneOffset","clientTimeZoneOffset","getTimezoneOffset","clientIdentification","parentSessionId","streamerVersion","clientRequestMonitorSettings","sdkVersion","enhancedStreamMode","useOps","clientDisplayHdrCapabilities","accountLinked","partnerCustomData","enablePersistingInGameSettings","secureRTSPSupported","userAge","requestedStreamingFeatures","webRtcStreamer","sessionModifyObj","sessionRequestObj","requestType","requestUrl","shouldSendAnalyticsEvent","getHttpMethodForRequestType","httpAnalyticsEvent","getTelemetryHttpEvent","responseData","endTime","callDuration","SyntaxError","pmResponse","parse","requestStatusCode","sessionResponse","sessions","responseSession","otherSessions","otherUserSessions","sendHttpEvent","scCode","convertUtilsErrorCodeToScErrorCode","TypeError","isParseError","getSessionUpdate","_state","seatSetupInfo","seatSetupStep","seatSetupEta","isAdsRequired","sessionAdsRequired","ads","oldAdsStateInfo","sessionAds","adsCount","sessionAd","adState","serverAdState","ad","adUrl","adLengthInSeconds","adMediaFiles","adMediaFilesCount","sessionAdMediaFile","adMediaFile","mediaFileUrl","encodingProfile","getPollingInterval","pollingInterval","max","min","invalidOperationHandler","invalidOperationResult","processSessionSetupServerResponse","processSessionSetupException","resolveStartResumeSession","sessionStartResumeResult","lastSessionFromServer","cancelHandler","sendDebugEvent","sourceFunc","getResumableSession","isResumableSessionState","updateSessionParameters","SessionControlTelemetry","modeSelectionResult","gxtOverrideData","configData","params","element","remoteOverrideInfo","GridServer_GameLaunch_RequestDef","SessionControlTelemetryConfig","clientName","TelemetryHandler","networkType","cmsId","exceptionCounts","totalExceptionCount","verb","requestedZoneAddress","networkTestId","resumeType","overrideConfigType","overrideConfigVersion","codec","ipVersion","streamingProfileGuid","systemInfoGuid","String","httpEvent","moduleName","key1","key2","key3","key4","key5","msg","file","handled","category","canSendExceptionEvent","stacktrace","count","__webpack_modules__","__unused_webpack_module","__unused_webpack_exports","ba","ca","da","_gamestream$core","_opentelemetry$api","Sg","ha","ia","ja","ka","b","c","g","la","h","C","j","l","s","v","ma","B","qa","G","ra","ta","ua","va","ya","za","Aa","Ba","Ca","f","n","hg","t","q","u","y","z","Kc","A","E","K","F","N","Da","Ea","Fa","TouchEvent","Ga","Ha","Ia","Ja","J","Ka","Na","Oa","Pa","Qa","Ra","sa","Sa","Ta","Ua","Va","nb","Wa","Xa","SharedWorker","Ya","Za","$a","Rb","onmessageerror","onerror","Od","bb","Kf","zb","De","rc","Qf","I","Bb","Fe","Gf","Ab","Cb","Db","Eb","Fb","Gb","db","Rf","lb","R","$","ef","Ye","cf","mf","hf","uf","P","L","O","ea","vf","na","ab","Z","Je","He","Hb","sg","Ib","Ze","eb","uc","Jb","fb","speechSynthesis","yb","T","onvoiceschanged","gb","ze","rg","mg","hb","Le","Ne","__edgeActiveElement","__edgeTrackingPreventionStatistics","safari","Ve","opr","Pe","oprt","ge","brave","OperaTouch","ethereum","yandex","QuickAccess","xa","netscape","wa","__firefox__","cb","__gCrWeb","ReactNativeWebView","Re","contacts","ContactsManager","webOSSystem","Af","tizen","TizenTVApiInfo","addEdgeEffectONSCROLLTizenUIF","tizentvwasm","HardkeyEvent","xf","Intl","mediaCapabilities","decodingInfo","pe","BigInt","fg","BigInt64Array","ie","PerformanceNavigationTiming","Ae","WebAssembly","Exception","Me","BroadcastChannel","je","GPUBuffer","te","Ge","MediaRecorder","xe","CSSCounterStyleRule","ke","ArrayBuffer","cg","qe","AbortSignal","bg","eg","DisplayNames","ue","Collator","Credential","oe","LargestContentfulPaint","we","CSS","registerProperty","me","HTMLElement","se","ne","TrustedHTML","Ie","WakeLock","Ke","any","Ce","FileSystemHandle","Atomics","waitAsync","dg","supports","le","ReadableStreamBYOBReader","Ee","ye","InputEvent","ve","HTMLVideoElement","Oe","ib","RequestCrowNativeApi","Wg","jb","pa","ag","sc","ga","Nb","oa","aa","S","Kb","kb","ApplePaySession","canMakePayments","tc","If","Bf","Ef","mb","fa","ob","U","H","pb","W","qb","rb","sb","Se","tb","he","vc","M","ub","vb","wb","xb","D","Qc","$f","voiceURI","Qe","We","pc","qc","nc","oc","Id","wf","kg","sd","jg","Nd","Lb","Mb","Ob","Pb","getExtension","getParameter","Be","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","RtcUtils","Md","$e","fe","ee","wc","yc","zc","Bc","Cc","Gc","Hc","Ic","Dc","Jc","Lc","Mc","Uf","Jd","dd","Tc","Kd","Nc","Oc","Pc","Rc","kd","Sc","Uc","Xc","ug","Yc","wg","vg","Jf","Ec","Fc","ed","xc","Xg","Vc","Wc","Zc","Success","InvalidOperation","NetworkError","GetActiveSessionServerError","AuthTokenNotUpdated","SessionFinishedState","ResponseParseFailure","InvalidServerResponse","PutOrPostInProgress","GridServerNotInitialized","DOMExceptionInSessionControl","InvalidAdStateTransition","SessionServerErrorBegin","RequestForbidden","ServerInternalTimeout","ServerInternalError","ServerInvalidRequest","ServerInvalidRequestVersion","SessionListLimitExceeded","InvalidRequestDataMalformed","InvalidRequestDataMissing","RequestLimitExceeded","SessionLimitExceeded","InvalidRequestVersionOutOfDate","SessionEntitledTimeExceeded","AuthFailure","InvalidAuthenticationMalformed","InvalidAuthenticationExpired","InvalidAuthenticationNotFound","EntitlementFailure","InvalidAppIdNotAvailable","InvalidAppIdNotFound","InvalidSessionIdMalformed","InvalidSessionIdNotFound","EulaUnAccepted","MaintenanceStatus","ServiceUnAvailable","SteamGuardRequired","SteamLoginRequired","SteamGuardInvalid","SteamProfilePrivate","InvalidCountryCode","InvalidLanguageCode","MissingCountryCode","MissingLanguageCode","SessionNotPaused","EmailNotVerified","InvalidAuthenticationUnsupportedProtocol","InvalidAuthenticationUnknownToken","InvalidAuthenticationCredentials","SessionNotPlaying","InvalidServiceResponse","AppPatching","GameNotFound","NotEnoughCredits","InvitationOnlyRegistration","RegionNotSupportedForRegistration","SessionTerminatedByAnotherClient","DeviceIdAlreadyUsed","ServiceNotExist","SessionExpired","SessionLimitPerDeviceReached","ForwardingZoneOutOfCapacity","RegionNotSupportedIndefinitely","RegionBanned","RegionOnHoldForFree","RegionOnHoldForPaid","AppMaintenanceStatus","ResourcePoolNotConfigured","InsufficientVmCapacity","InsufficientRouteCapacity","InsufficientScratchSpaceCapacity","RequiredSeatInstanceTypeNotSupported","ServerSessionQueueLengthExceeded","RegionNotSupportedForStreaming","SessionForwardRequestAllocationTimeExpired","SessionForwardGameBinariesNotAvailable","GameBinariesNotAvailableInRegion","UekRetrievalFailed","EntitlementFailureForResource","SessionInQueueAbandoned","MemberTerminated","SessionRemovedFromQueueMaintenance","ZoneMaintenanceStatus","GuestModeCampaignDisabled","RegionNotSupportedAnonymousAccess","InstanceTypeNotSupportedInSingleRegion","InvalidZoneForQueuedSession","SessionWaitingAdsTimeExpired","UserCancelledWatchingAds","StreamingNotAllowedInLimitedMode","ForwardRequestJPMFailed","MaxSessionNumberLimitExceeded","GuestModePartnerCapacityDisabled","SessionRejectedNoCapacity","SessionServerErrorEnd","SessionSetupCancelled","SessionSetupCancelledDuringQueuing","RequestCancelled","NoInternetDuringSessionSetup","$c","Og","bd","cd","gd","hd","fd","id","jd","ld","md","VIDEO","AUDIO","nd","Unknown","ApproachingEntitlementTimeout","ApproachingIdleTimeout","ApproachingSessionMaxTimeLimit","ClearUserIdleTimeOut","od","allowUnconfined","preventNavigation","pd","qd","rd","stopData","atob","charCodeAt","td","nvstResult","ud","vd","wd","xd","clearColor","COLOR_BUFFER_BIT","be","ce","de","Te","Ue","Xe","af","bf","getElementById","HTMLCanvasElement","parentElement","style","position","bottom","right","zIndex","pointerEvents","insertAdjacentElement","display","yd","zd","Ad","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Ld","Pd","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","$d","ae","isNaN","df","La","$b","clientConfigOverride","Ma","remoteConfigData","ragnarok","isInternalUser","append","parseFloat","getAll","avp","ff","gf","perf","RAFTS","DCSend","GetStats","FrameInfo","jf","Q","stopStats","kf","lf","webrtcStats","stats","ackid","startWebSocket","signInURL","maxReceivedAckId","reconnect","stopWebSocket","initMessage","initialized","statsStarted","wsClose","nf","wsMessage","of","wsOpening","wsOpen","pf","qf","rf","destination","maxChannelCount","tf","frameRate","sort","resolution","abs","unshift","sf","isUdPanelSupported","lge_webrtc_hevc_support","getComputedStyle","documentElement","getPropertyValue","setProperty","top","left","yf","zf","clientX","clientY","radiusY","innerHeight","offlineErrorsStreaming","offlineErrorsSessionSetup","sleepErrorsStreaming","sleepErrorsSessionSetup","setUint32","Cf","Df","Ff","enableCpm","Hf","toFixed","Lf","href","download","appendChild","click","removeChild","AudioContext","webkitAudioContext","sampleRate","Nf","PointerEvent","Of","RTCPeerConnection","setRemoteDescription","sdp","createAnswer","setLocalDescription","getReceivers","getParameters","codecs","mimeType","channels","usePerfNowCaptureTimestamp","bitDepth","Sf","identifier","deltaX","deltaY","Tf","changedTouches","findIndex","target","Vf","Wf","Xf","preventDefault","videoAddEventListener","videoRemoveEventListener","Yf","ui","offsetX","offsetY","si","Zf","scroll","sign","passive","stop","pageX","pageY","vertical","radiusX","update","setUint8","setUint16","DataView","buffer","V","gg","setInterval","values","ig","vkCode","shift","lg","setInt8","setInt16","setInt32","setFloat32","setFloat64","byteOffset","byteLength","send","ng","og","pg","qg","readyState","tg","xg","Kg","Jg","getUint16","yg","getUint32","getUint8","captureTimestamp","sendTextInput","bufferedAmount","zg","Fg","disable","updateInput","Ag","buttons","axes","Bg","startDelay","duration","weakMagnitude","strongMagnitude","Cg","gamepadPollInterval","allowHaptics","synthesizeGamepadHid","Dg","Eg","Gg","Hg","getGamepads","Ig","hapticsSupported","Lg","Mg","Ng","Pg","Qg","Rg","Ug","Vg","mapping","Yg","Zg","$g","ah","dh","reset","eh","fh","gh","hh","ih","some","jh","kh","lh","clearInterval","vibrationActuator","playEffect","mh","nh","oh","ph","qh","rh","sh","maxSchedulingDelay","gamepad","NaN","getVirtualGamepadHandler","th","sqrt","scale","uh","MouseEvent","button","dispatchEvent","vh","trunc","movementX","movementY","isPrimary","wh","xh","yh","zh","Ah","Bh","Ch","cursorType","Dh","Eh","Fh","exitPointerLock","requestPointerLock","unadjustedMovement","Gh","Hh","subarray","TextDecoder","decode","Ih","Sh","Jh","Kh","Mh","getBoundingClientRect","DOMRect","Nh","devicePixelRatio","Oh","Ph","Qh","Rh","Th","Yh","Zh","$h","ai","getCoalescedEvents","ceil","bi","Vh","Wh","cursor","image","imageSmoothingEnabled","clearRect","drawImage","Xh","visibility","ci","Ac","toDataURL","Image","decoding","src","di","ei","fi","pi","clientWidth","clientHeight","videoWidth","videoHeight","documentAddEventListener","documentRemoveEventListener","windowedStreaming","gi","find","touchAction","willChange","Lh","mouseCoalesceInterval","hi","ii","pointerLockEscape","ji","setPointerCapture","pointerId","ki","li","mi","ni","pointerLockElement","oi","pointerType","ri","qi","ti","hypot","vi","wi","toggleOnScreenStats","xi","yi","zi","Ai","Bi","Fi","toggleUserInput","Gi","Hi","keyCode","getModifierState","transform","Ii","Ki","ctrlKey","altKey","metaKey","shiftKey","streamingWarnings","Li","TextEncoder","encode","textInputElement","Mi","charAt","Ni","aj","Oi","PerformanceObserver","getEntriesByType","Ci","ResizeObserver","observe","IntersectionObserver","threshold","visualViewport","bh","ch","supportedEntryTypes","entryTypes","getAttribute","remote","modifiers","local","Di","streamingHotkeys","Ei","paused","currentTime","disconnect","pageXOffset","pageYOffset","history","pushState","title","location","isVisible","Ji","compositionText","imeRecommendation","Pi","latencyTrigger","Qi","sendCustomMessage","messageType","messageRecipient","pcmDumpTrigger","Ri","Si","Ti","Ui","Vi","perfIndicator","on","toggleStutterIndicator","Wi","toggle","Xi","checked","Yi","total","Pf","Zi","CompositionEvent","isSecureContext","keyboard","lock","onclick","removeAttribute","unlock","$i","back","setVirtualKeyboardState","setKeyboardLayout","sendKeyEvent","bj","cj","ej","qualityScore","latencyScore","networkLossScore","bandwidthScore","fj","maxBitrate","gj","permissions","query","hj","jj","kj","mediaDevices","ondevicechange","lj","getSenders","replaceTrack","getTracks","mj","nj","getUserMedia","audio","onended","oninactive","muted","srcObject","play","tagName","enumerateDevices","kind","label","oj","googAutoGainControl2","pj","createMediaStreamDestination","getAudioTracks","enabled","MediaStream","qj","X","rj","sj","tj","addTrack","getMicState","uj","vj","wj","xj","yj","getCurrentNetworkType","Aj","connection","systeminfo","addPropertyValueChangeListener","registerCallback","unregisterCallback","vendorId","productId","deviceIndex","reportIndex","hapticsFeedbackCount","eventMapReceived","eventMapProcessed","metricName","valueInt1","valueInt2","valueInt3","valueString","valueDouble","Dj","Y","Ej","Fj","Kj","clientShutDownCallback","Lj","Mj","Nj","Oj","jn","pn","Pj","Qj","Rj","Sj","Tj","Uj","Vj","bitsPerPixel1440p","bitsPerPixel","Wj","Xj","getSmartTVServerVersion","year","forceHdrSupport","forceSdr10Support","scaleFactor","Zj","displayMode","maxAutoMode","maxSupportedModes","features","vsync","vvsync","reflex","audioChannelCount","sdrBitDepth","Yj","ak","supported","smooth","powerEfficient","bk","video","contentType","framerate","bitrate","ck","dk","ek","refreshRate","innerWidth","screenX","screenY","requestAnimationFrame","hk","fk","gk","kk","codecList","enableAv1Support","enableAv1ByResolutionAndFps","lge_webrtc_av1_support","ik","jk","mk","ok","nk","pk","media","mediaType","attributes","rk","origin","time","sk","tk","uk","xk","innerText","yk","avgGameFps","streamingResolution","rtd","zk","Ak","padding","backgroundColor","fontSize","fontFamily","color","whiteSpace","lineHeight","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","framesDropped","pliCount","framesDecoded","sendVideoTrack","frameHeight","frameWidth","framesReceived","jitterBufferDelay","jitterBufferEmittedCount","Mk","Nk","presentedFrames","presentationTime","receiveTime","processingDuration","getImageData","Kk","Pk","Qk","disabled","Rk","border","visible","Sk","onmouseup","onmousemove","onmousedown","offsetTop","offsetLeft","Tk","oninput","innerHTML","Uk","Ok","Vk","Event","bubbles","Lk","Wk","Xk","Yk","Zk","paddingTop","paddingRight","paddingBottom","paddingLeft","$k","al","bl","borderBottom","cl","margin","borderRadius","dl","el","fl","hl","placeholder","gl","textAlign","listStyle","remove","il","ml","getStats","ul","track","pl","vl","nl","getStatsInterval","names","stat","timingFrameInfo","targetDelayMs","minPlayoutDelayMs","currentDelayMs","ol","getDeprecatedStatsInterval","requestVideoFrameCallback","sl","decoderImplementation","clientEvent","TS","eventtype","yl","codecId","packetsLost","packetsReceived","dj","totalDecodeTime","totalInterFrameDelay","wk","zl","ql","bytesReceived","vk","rl","avgDecodeTime","frameLoss","packetLoss","totalBandwidth","utilizedBandwidth","lastPacketReceivedTimestamp","jitter","audioLevel","concealedSamples","concealmentEvents","insertedSamplesForDeceleration","removedSamplesForAcceleration","silentConcealedSamples","totalSamplesReceived","totalSamplesDuration","keyFramesDecoded","nackCount","totalSquaredInterFrameDelay","totalAssemblyTime","framesAssembledFromMultiplePackets","perFrameEntries","frameNumber","decodeTime","assemblyTime","memory","usedJSHeapSize","totalJSHeapSize","garbageCollectionStats","deltaUsedHeapSize","deltaTotalHeapSize","inputChannelStats","client","tl","sq","ll","xl","trackId","assign","Al","requestsSent","consentRequestsSent","responsesReceived","Mf","Fl","createDataChannel","ordered","reliable","maxRetransmits","binaryType","kl","open","getFloat64","getFloat32","jl","droppedVideoFrames","totalVideoFrames","rtpTimestamp","Cl","address","relatedAddress","endsWith","El","Gl","WebSocket","onopen","Hl","onclose","reason","wasClean","Il","Jl","ack","Kl","Ll","OPEN","Ml","Ol","streams","getTransceivers","receiver","readable","createEncodedStreams","TransformStream","flush","enqueue","pipeThrough","pipeTo","Nl","Ql","orientation","angle","offsetParent","Pl","sendInsetValueUpdateEvents","safeZoneData","rect","Rl","Sl","Tl","Ul","Vl","enableComputePressure","PressureObserver","knownSources","Wl","Yl","hasFocus","getBattery","charging","isExtended","takeRecords","unobserve","fullscreen","webkitIsFullScreen","mozFullScreen","msFullscreenElement","$l","am","Zl","bm","algorithm","substr","fm","disconnectionReason","cleanDisconnection","jm","km","lm","mm","peer_info","peer_msg","cm","nvstSdp","nvstServerOverrides","lk","enableOOFQosEnhancements","Qb","dynamicStreamingMode","nvscClientConfigFields","qk","zm","enableStunServer","iceServers","urls","encodedInsertableStreams","om","onconnectionstatechange","connectionState","rm","oniceconnectionstatechange","iceConnectionState","streamingState","ondatachannel","channel","vm","etwPrintPair","Rm","Sm","exitMessage","timerNotification","Pm","secondsLeft","debugMessage","customMessage","videoStreamProgressEvent","videoStreamProgress","maxPacketLifeTime","requireDS4TrackpadForAppIds","Tg","onsignalingstatechange","signalingState","onicecandidate","Qm","ontrack","Um","onunmute","Tm","streamId","tracks","qm","Am","Km","Bm","dm","mid","Cm","Dm","Nm","concat","Em","Fm","direction","sender","Gm","RTCRtpReceiver","getCapabilities","RTCRtpSender","setCodecPreferences","Om","Hm","Im","em","gm","hm","im","Jm","candidate","addIceCandidate","sdpMLineIndex","sdpMid","nm","pm","onclosing","etwPrint","tm","timeOrigin","signalingUrlQueryParameters","Bl","getSelectedCandidatePair","Dl","iceGatheringState","um","wm","xm","Lm","Mm","flatMap","to","startStats","statsHeader","windowState","streamIndex","windowStateFlags","systemState","systemStateFlags","Vm","Wm","Xm","stutterIndicator","maxBitrateKbps","drc","disableUnadjustedMovementForAppIds","MediaStreamTrack","signInTimeout","sm","ym","setUpstreamMedia","unsetUpstreamMedia","stopUpstreamMedia","canTrickleIceCandidates","getVideoPlaybackQuality","webkitDecodedFrameCount","webkitDroppedFrameCount","wl","Uh","qosMarker","riDeviceOverlay","bitmap","setVideoTransforms","setStreamingMaxBitrate","setMaxBitrate","setDrcDfcState","setDrcState","setDfcState","Xl","cpuUsage","procCpuUsage","totalCpuUsage","Ym","Zm","getTime","sleepTime","$m","eventSequence","timeToSleep","an","bn","cn","className","gridTemplateColumns","gridTemplateRows","dn","querySelector","opacity","beginPath","fillStyle","closePath","fill","moveTo","lineTo","arc","PI","roundRect","flexDirection","justifyContent","background","marginRight","font","fillText","childNodes","cancelAnimationFrame","onstart","onstop","ondataavailable","en","downloadAudio","onversionchange","gn","visibilityState","hn","transaction","objectStore","oncomplete","onsuccess","kn","indexedDB","keyPath","onupgradeneeded","oldVersion","newVersion","createObjectStore","createIndex","unique","onblocked","put","qn","ln","sn","mn","Ij","Jj","nn","exitErrorCode","sleep","connectivity","exitReason","frameCount","streamDuration","rn","experiments","tn","vn","un","wn","updateEventDataElements","zn","An","Bn","Cn","Dn","En","Fn","Gn","Hn","In","Jn","Kn","Ln","additionalInputDevices","Gj","shortName","startStreaming","Mn","Nn","On","Pn","videoTagId","Qn","Rn","setMicRecordingEnabled","ios15AudioContext","ios15AudioStream","Tn","Un","isResumable","Vn","connectivityCheckTimeout","Xn","Yn","captureMic","Zn","onStreamStopped","$n","ao","setSupportedHidTypes","setGamepadRsdmm","ho","terminateUnhandledException","userTerminatedMicRecorderThreshold","idle","sendNonEssentialMetricEvents","getEntriesByName","loadEventStart","loadEventEnd","domContentLoadedEventStart","domContentLoadedEventEnd","bo","co","downstreamParams","audioTagId","HTMLAudioElement","eo","statTelemetryInfo","Bj","ragnarokOldPlay","latencyHint","onstatechange","fo","hasAttribute","secure","enableTouchInput","region","upstreamParams","go","stopStreaming","getStreamingState","setDynamicStreamingMode","getVirtualInputController","getGamepadBitmap","captureUserInput","onStreamStartFailed","separateAudioStream","onStreamStarted","Cj","onStreamWarning","onStreamQuality","onMicStateUpdate","onTextComposition","onCustomMessage","onStreamStatistics","setClientSupportsVirtualGamepad","handleVirtualGamepadState","handleVirtualKeyInput","Ragnarok","GridApp","xn","yn","authTokenCallback","stopSession","pauseSession","Sn","Hj","isMicSupported","shouldDefaultEnableMic","toggleRsdmm","ChooseStreamingSettings","ChooseStreamingResolution","InitializeUtils","GetSupportedAudioChannelCount","GetDeviceCapabilities","getSupportedCodecs","VirtualButton","LB","RB","LT","RT","BACK","START","STICK_LEFT","STICK_RIGHT","DPAD_UP","DPAD_DOWN","DPAD_LEFT","DPAD_RIGHT","VirtualGamepadHandler","ConfigureRagnarokSettings","AuthType","NONE","JARVIS","JWT_GFN","JWT_PARTNER","IsFeatureSupported","CalculateMaxBitrateKbps","CalculateDataUsage","EVENTS","SESSION_START_RESULT","SESSION_STOP_RESULT","ACTIVE_SESSIONS_RESULT","PROGRESS_UPDATE","SESSION_UPDATE","STREAM_STOPPED","STREAMING_EVENT","GETSESSIONRESULT","GET_SESSION_RESULT","LOG_EVENT","STREAMING_QUALITY","MIC_CAPTURE","CUSTOM_MESSAGE","TEXT_COMPOSITION","STREAM_STATS_UPDATE","TELEMETRY_EVENT","HotkeyModifier","None","Ctrl","Alt","Meta","Shift","Default","defaultInputConfigFlags","StreamingProfilePreset","BALANCED","DATASAVER","COMPETITIVE","TrackType","STREAMING_STATE","RECONNECTING","RECONNECTED","RNotificationCode","ScErrorCode","DeviceType","DESKTOP","LAPTOP","TV","PHONE","TABLET","CONSOLE","DeviceOS","WINDOWS","MACOS","SHIELD","ANDROID","IOS","IPADOS","CHROMEOS","LINUX","TIZEN","WEBOS","TVOS","XBOX","STEAMOS","CCOS","NetworkType","OTHER","ETHERNET","UNKNOWN","WIFI","WIFI_2_4","WIFI_5_0","MOBILE","MOBILE_2G","MOBILE_3G","MOBILE_4G","MOBILE_5G","WIMAX","BLUETOOTH","LogLevel","SdrHdrMode","SDR","HDR","EDR","Usage","CONTROL","INPUT","CUSTOM","USB","RTSP","GAMESTREAM_CONTROL","GAMESTREAM_SECURE_CONTROL","SESSION_CONTROL","NETWORK_TEST_CONTROL","RTSPRU","AUDIO_INPUT","SIGNALING","MEDIA","RTSPS","BUNDLE","Protocol","TCP","UDP","AppLevelProtocol","HTTP","SOCKET","HTTPS","AdState","NOT_STARTED","STARTED","PAUSED","RESUMED","FINISHED","CANCELED","AdAction","PAUSE","RESUME","FINISH","CANCEL","BitDepth","BIT_DEPTH_8","BIT_DEPTH_10","ClientType","BROWSER","GFNSDK","NATIVE","SessionState","INITIALIZING","READY_FOR_CONNECTION","STREAMING","RESUMING","SessionProgressState","CONNECTING","IN_QUEUE","CONFIGURING","PREVIOUS_SESSION_CLEANUP","STARTING_STREAMER","AppLaunchMode","GamepadFriendly","TouchFriendly","GsErrorCode","BrowserName","CHROME","SAFARI","YANDEX","EDGE","EDGE_LEGACY","FIREFOX","SAMSUNG","CHROMIUM","OPERA","BRAVE","SILK","REACT","PlatformName","CHROME_OS","MAC","FIRETV","FREEBSD","DeviceModel","STEAMDECK","XBOX_ONE","XBOX_SERIES","VISION_PRO","DeviceVendor","APPLE","LG","TIZEN_LICENSED","MICROSOFT","AMAZON","HKMC","SONY","PHILIPS","GOOGLE","NVIDIA","XIAOMI","TVISION","SESSIONMODIFY_ACTION","AudioFormat","STEREO","UP_TO_5_1_SURROUND_PCM","UP_TO_7_1_SURROUND_PCM","ClientStreamer","CLASSIC","WEBRTC","GS_EVENTS","VsyncType","OFF","ON","ADAPTIVE","getDeviceCapabilities","serializeDeviceCapabilities","PayloadOSType","UNDEFINED","PayloadBrowserType","PayloadDeviceType","SERVER","ClientHeaderOSType","ClientHeaderBrowserType","ClientHeaderDeviceType","getStreamerType","BrowserFeature","Streaming","MicCapture","isFeatureSupported","getRecommendedBitrate","getStreamStartParameters","estimateDataUsage","NskTelemetry","createNskStreamClient","configureRagnarokSettings","getNetworkTypeDetector","RErrorCode","AuthProviderError","NoNetwork","ExceptionHappened","GridAppNotInitialized","DOMExceptionInGridServer","StreamerErrorCategory","StreamErrorGeneric","StreamerSignInFailure","StreamerHangingGetFailure","StreamerNetworkError","StreamerVideoPlayError","StreamerIceConnectionFailed","StreamerGetRemotePeerTimedOut","StreamInputChannelError","StreamCursorChannelError","StreamControlChannelError","StreamerReConnectionFailed","StreamerNoVideoPacketsReceivedEver","StreamerNoVideoFramesLossyNetwork","StreamerSetSDPFailure","StreamerNoLocalCandidates","StreamerNoRemoteCandidates","StreamerNoVideoTrack","StreamerIceReConnectionFailed","StreamerSignInTimeout","StreamerSignInWorkerFailure","StreamerNoTracksReceivedInSdp","StreamerNvstSdpFailure","StreamerNvstSdpParseFailure","StreamerNoPeerInfo","StreamerNoOffer","StreamerNoAudioTrack","StreamerInvalidRemoteConfigOverride","StreamerInvalidServerOverride","StreamerInvalidClientOverride","StreamerConfigUpdateFailure","StreamerInputChannelNotOpen","StreamerCursorChannelNotOpen","StreamerControlChannelNotOpen","StreamerVideoAdapterInitTimeOut","StreamerVideoFrameProviderInitTimeOut","StreamerVideoEncoderInitTimeOut","StreamerVideoSetupTimeOut","StreamerNoStunResponsesReceived","StreamerNoNominatedCandidatePairs","StreamerNoSucceededCandidatePairs","StreamGamepadChannelError","StreamerGamepadChannelNotOpen","StreamerNeedAudioElement","StreamerDataChannelClosing","SystemSleepDuringStreaming","SystemSleepDuringSessionSetup","PauseSession","DelayedSessionError","WebPageClosed","ClientDisconnectedUserIdle","UnhandledException","NoInternetDuringStreaming","StreamDisconnectedFromServer","ServerDisconnectedNoResponse","ServerDisconnectedRemoteInputError","ServerDisconnectedFrameGrabFailed","ServerDisconnectedConfigUnAvailable","ServerDisconnectedInvalidCommand","ServerDisconnectedInvalidMouseState","ServerDisconnectedNetworkError","ServerDisconnectedGameLaunchFailed","ServerDisconnectedVideoFirstFrameSendFailed","ServerDisconnectedVideoNextFrameSendFailed","ServerDisconnectedFrameGrabTimedOut","ServerDisconnectedFrameEncodeTimedOut","ServerDisconnectedFrameSendTimedOut","ServerDisconnectedNetworkTimedOut","ServerDisconnectedPeerRemovedByServer","ServerDisconnectedUnknownError","ServerDisconnectedPeerRemovedBeforeStream","ServerDisconnectedIntended","ServerDisconnectedHotKey","ServerDisconnectedUserLoggedInDifferentAccount","ServerDisconnectedWindowedMode","ServerDisconnectedUserIdle","ServerDisconnectedUnAuthorizedProcessDetected","ServerDisconnectedMaliciousProcessDetected","ServerDisconnectedUnKnownProcessDetected","ServerDisconnectedMinerProcessDetected","ServerDisconnectedStreamingUnsupported","ServerDisconnectedAnotherClient","ServerDisconnectedCodeIntegrityViolation","ServerDisconnectedUnauthorizedActivityDetected","ServerDisconnectedGameNotOwnedByUser","ServerDisconnectedProtectedContent","ServerDisconnectedDisplayTopologyChanged","ServerDisconnectedAbruptly","ServerDisconnectedUnknownFromPm","ServerDisconnectedUserEntitledMinutesExceeded","ServerDisconnectedClientReconnectTimeLimitExceeded","ServerDisconnectedOperatorCommandedTermination","ServerDisconnectedConcurrentSessionLimitExceeded","ServerDisconnectedMaxSessionTimeLimitExceeded","ServerDisconnectedBifrostInitiatedSessionPause","ServerDisconnectedSystemCommandTermination","ServerDisconnectedMultipleLogin","ServerDisconnectedMaintenanceMode","ServerDisconnectedMultipleTab","InvalidVideoElement","InvalidAudioElement","HidType","DS4","DS5","InputType","Mouse","Keyboard","Gamepad","Touch","All","VideoCodecType","H264","H265","AV1","MicState","UNINITIALIZED","PERMISSION_PENDING","PERMISSION_DENIED","NO_SUITABLE_DEVICE","STOPPED","UNSUPPORTED","ERROR","DynamicStreamingMode","DRC","DFC","ALL","MediaTrackKind","StreamStopReason","CLIENT_DISCONNECTED","SERVER_DISCONNECTED","NETWORK_ERROR","StreamWarningType","CursorType","SOFTWARE","HARDWARE","FREE","StreamingState","STARTING_STREAM","STOPPING_STREAM","SDPUtils","writeMediaSection","transceiver","caps","dtlsRole","writeRtpDescription","writeIceParameters","iceGatherer","getLocalParameters","writeDtlsParameters","dtlsTransport","rtpSender","rtpReceiver","_initialTrackId","msid","sendEncodingParameters","ssrc","rtx","localCName","getCommonCapabilities","localCapabilities","remoteCapabilities","commonCapabilities","headerExtensions","fecMechanisms","findCodecByPayloadType","pt","payloadType","preferredPayloadType","rtxCapabilityMatches","lRtx","rRtx","lCodecs","rCodecs","lCodec","apt","rCodec","clockRate","numChannels","rtcpFeedback","parameter","lHeaderExtension","rHeaderExtension","uri","isActionAllowedInSignalingState","offer","answer","maybeAddCandidate","iceTransport","alreadyAdded","getRemoteCandidates","remoteCandidate","foundation","addRemoteCandidate","makeError","NotSupportedError","InvalidStateError","InvalidAccessError","OperationError","edgeVersion","addTrackToStreamAndFireEvent","MediaStreamTrackEvent","fireAddTrack","trackEvent","_dispatchEvent","_eventTarget","createDocumentFragment","needNegotiation","localStreams","remoteStreams","_localDescription","_remoteDescription","usingBundle","bundlePolicy","rtcpMuxPolicy","iceTransportPolicy","hasTurn","warn","isString","filterIceServers","_iceGatherers","iceCandidatePoolSize","RTCIceGatherer","gatherPolicy","_config","transceivers","_sdpSessionId","generateSessionId","_sdpSessionVersion","_dtlsRole","_isClosed","onaddstream","onremovestream","onicegatheringstatechange","onnegotiationneeded","_emitGatheringStateChange","getConfiguration","getLocalStreams","getRemoteStreams","_createTransceiver","doNotAdd","hasBundleTransport","recvEncodingParameters","associatedRemoteMediaStreams","wantReceive","transports","_createIceAndDtlsTransports","_maybeFireNegotiationNeeded","addStream","clonedStream","clone","idx","clonedTrack","removeTrack","removeStream","_createIceGatherer","bufferedCandidateEvents","bufferCandidates","_gather","onlocalcandidate","evt","cand","component","ufrag","usernameFragment","serializedCandidate","writeCandidate","parseCandidate","toJSON","sections","getMediaSections","getDescription","complete","RTCIceTransport","onicestatechange","_updateIceConnectionState","_updateConnectionState","RTCDtlsTransport","ondtlsstatechange","_disposeIceAndDtlsTransports","_transceive","recv","encodings","rtcp","cname","compound","rtcpParameters","receive","sessionpart","splitSections","mediaSection","parseRtpParameters","isIceLite","matchPrefix","isRejected","rejected","remoteIceParameters","getIceParameters","remoteDtlsParameters","getDtlsParameters","role","_updateSignalingState","receiverList","iceOptions","lines","splitLines","getKind","getDirection","remoteMsid","parseMsid","getMid","generateIdentifier","parseRtpEncodingParameters","parseRtcpParameters","isComplete","cands","setTransport","setRemoteCandidates","default","isNewTrack","nativeTrack","removeTrackFromStreamAndFireEvent","sid","item","states","closed","checking","connected","completed","disconnected","failed","new","connecting","createOffer","numAudioTracks","numVideoTracks","offerOptions","arguments","mandatory","optional","offerToReceiveAudio","offerToReceiveVideo","writeSessionBoilerplate","remoteCodec","hdrExt","rHdrExt","getLocalCandidates","RTCSessionDescription","mediaSectionsInOffer","localTrack","getVideoTracks","reducedSize","candidateString","selector","senderOrReceiver","allStats","results","ortcObjectName","obj","nativeGetstats","nativeStats","mapStats","inboundrtp","outboundrtp","candidatepair","localcandidate","remotecandidate","methods","nativeMethod","line","part","prefix","relatedPort","tcpType","parseIceOptions","parseRtpMap","parsed","writeRtpMap","parseExtmap","writeExtmap","headerExtension","preferredId","parseFmtp","kv","writeFmtp","param","parseRtcpFb","writeRtcpFb","parseSsrcMedia","sp","colon","attribute","parseSsrcGroup","semantics","ssrcs","parseFingerprint","fingerprints","setupType","fp","parseCryptoLine","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","pwd","password","mline","rtpmapline","fmtps","maxptime","extension","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","encParam","codecPayloadType","fec","mechanism","bandwidth","remoteSsrc","rsize","mux","spec","planB","msidParts","parseSctpDescription","maxMessageSize","parseMLine","maxSizeLine","sctpPort","fmt","writeSctpDescription","sctp","output","sessId","sessVer","sessUser","parseOLine","username","sessionVersion","netType","addressType","isValidSDP","__webpack_module_cache__","moduleId","cachedModule","getter","definition","prop","Symbol","toStringTag","chrome_shim_namespaceObject","edge_shim_namespaceObject","firefox_shim_namespaceObject","safari_shim_namespaceObject","common_shim_namespaceObject","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","pos","wrapPeerConnectionEvent","eventNameToWrap","wrapper","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","unwrappedCb","disableLog","bool","disableWarnings","deprecated","oldMethod","newMethod","detectBrowser","mozGetUserMedia","webkitGetUserMedia","webkitRTCPeerConnection","supportsUnifiedPlan","RTCRtpTransceiver","isObject","compactObject","reduce","accumulator","isObj","isEmptyObject","walkStats","base","resultSet","filterStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","logging","shimGetUserMedia","browserDetails","constraintsToChrome_","ideal","oldname_","mix","advanced","shimConstraints_","constraints","remap","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","devices","dev","shimError_","PermissionDeniedError","PermissionDismissedError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","constraint","constraintName","onSuccess","onError","origGetUserMedia","cs","shimGetDisplayMedia","getSourceId","getDisplayMedia","sourceId","widthSpecified","heightSpecified","frameRateSpecified","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","shimMediaStream","webkitMediaStream","shimOnTrack","_ontrack","origSetRemoteDescription","_ontrackpoly","shimGetSendersWithDtmf","shimSenderWithDtmf","dtmf","_dtmf","createDTMFSender","_pc","_senders","origAddTrack","origRemoveTrack","origAddStream","origRemoveStream","origGetSenders","senders","shimGetStats","origGetStats","onSucc","onErr","fixChromeStats_","standardReport","report","standardStats","makeMapStats","successCallbackWrapper_","shimSenderReceiverGetStats","origGetReceivers","receivers","srcElement","shimAddTrackRemoveTrackWithNative","_shimmedLocalStreams","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack","origGetLocalStreams","nativeStreams","_reverseStreams","_streams","newStream","replaceInternalStreamId","internalId","externalStream","internalStream","oldStream","methodObj","origSetLocalDescription","replaceExternalStreamId","origLocalDescription","streamid","shimPeerConnection","addIceCandidateNullSupported","RTCIceCandidate","nativeAddIceCandidate","fixNegotiationNeeded","sdpSemantics","rtcpeerconnection","rtcpeerconnection_default","getusermedia_shimGetUserMedia","getdisplaymedia_shimGetDisplayMedia","edge_shim_shimPeerConnection","origMSTEnabled","ev","RTCDtmfSender","RTCDTMFSender","RTCPeerConnectionShim","validTurn","shimReplaceTrack","setTrack","firefox_getusermedia_shimGetUserMedia","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","firefox_getdisplaymedia_shimGetDisplayMedia","preferredMediaSource","mediaSource","firefox_shim_shimOnTrack","RTCTrackEvent","firefox_shim_shimPeerConnection","mozRTCPeerConnection","modernStatsTypes","nativeGetStats","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","DataChannel","RTCDataChannel","shimAddTransceiver","origAddTransceiver","addTransceiver","setParametersPromises","initParameters","shouldPerformCheck","sendEncodings","encodingParam","rid","scaleResolutionDownBy","RangeError","maxFramerate","setParameters","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","shimCreateAnswer","origCreateAnswer","shimLocalStreamsAPI","_localStreams","_addTrack","shimRemoteStreamsAPI","_remoteStreams","_onaddstream","_onaddstreampoly","shimCallbacksAPI","successCallback","failureCallback","withCallback","safari_shim_shimGetUserMedia","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","newIceServers","generateCertificate","shimTrackEventTransceiver","shimCreateOfferLegacy","audioTransceiver","setDirection","videoTransceiver","shimAudioContext","sdp_default","shimRTCIceCandidate","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","augmentedCandidate","shimMaxMessageSize","_sctp","mLine","sctpInDescription","isFirefox","getRemoteFirefoxVersion","canSendMMS","remoteIsFirefox","canSendMaxMessageSize","getCanSendMaxMessageSize","remoteMMS","getMaxMessageSize","POSITIVE_INFINITY","shimSendThrowTypeError","wrapDcSend","origDataChannelSend","origCreateDataChannel","dataChannel","shimConnectionState","_onconnectionstatechange","origMethod","_connectionstatechangepoly","_lastConnectionState","newEvent","removeAllowExtmapMixed","nativeSRD","shimChrome","shimFirefox","shimEdge","shimSafari","adapter","commonShim","browserShim","adapterFactory","shouldLogToConsole","queue","_nop","jsonObject","handleLog","_i","debug","renderDate","executeLogCallback","sanitize","sanitizationGroups","secretBlock","replaceStr","group","stringifyArgs","recursive","logMsg","MAX_QUEUE_SIZE","date","lpad","chars","padWith","howMany","res","ds","getFullYear","getMonth","month","getDate","day","getHours","hours","getMinutes","minutes","getSeconds","seconds","getMilliseconds","millis","_globalThis","VERSION","isCompatible","ownVersion","acceptedVersions","rejectedVersions","myVersionMatch","ownVersionParsed","globalVersion","_reject","_accept","globalVersionMatch","globalVersionParsed","_makeCompatibilityCheck","GLOBAL_OPENTELEMETRY_API_KEY","for","_global","registerGlobal","diag","allowOverride","api","getGlobal","unregisterGlobal","DiagLogLevel","__read","iterator","ar","next","done","__spreadArray","pack","DiagComponentLogger","props","_namespace","namespace","logProxy","verbose","funcName","logger","DiagAPI","_logProxy","setLogger","optionsOrLogLevel","INFO","oldLogger","newLogger","maxLevel","_filterFunc","theLevel","theFunc","WARN","DEBUG","VERBOSE","createLogLevelDiagLogger","suppressOverrideMessage","createComponentLogger","_instance","__values","BaggageImpl","_entries","getEntry","entry","getAllEntries","setEntry","newBaggage","removeEntry","removeEntries","e_1","keys_1","keys_1_1","e_1_1","return","baggageEntryMetadataSymbol","createBaggage","baggageEntryMetadataFromString","str","__TYPE__","createContextKey","extendStatics","ValueType","BaseContext","parentContext","_currentContext","getValue","setValue","deleteValue","ROOT_CONTEXT","consoleMap","DiagConsoleLogger","_consoleFunc","__extends","setPrototypeOf","__proto__","__","NoopMeter","createHistogram","_name","_options","NOOP_HISTOGRAM_METRIC","createCounter","NOOP_COUNTER_METRIC","createUpDownCounter","NOOP_UP_DOWN_COUNTER_METRIC","createObservableGauge","NOOP_OBSERVABLE_GAUGE_METRIC","createObservableCounter","NOOP_OBSERVABLE_COUNTER_METRIC","createObservableUpDownCounter","NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC","addBatchObservableCallback","_callback","_observables","removeBatchObservableCallback","NoopMetric","NoopCounterMetric","_super","_value","_attributes","NoopUpDownCounterMetric","NoopHistogramMetric","record","NoopObservableMetric","addCallback","removeCallback","NoopObservableCounterMetric","NoopObservableGaugeMetric","NoopObservableUpDownCounterMetric","NOOP_METER","createNoopMeter","TraceFlags","defaultTextMapGetter","defaultTextMapSetter","NoopContextManager","_context","thisArg","NOOP_CONTEXT_MANAGER","ContextAPI","setGlobalContextManager","contextManager","_getContextManager","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","traceId","spanId","traceFlags","NonRecordingSpan","_spanContext","spanContext","_key","addEvent","setStatus","_status","updateName","_endTime","isRecording","recordException","_exception","_time","SPAN_KEY","getSpan","deleteSpan","setSpanContext","getSpanContext","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","isValidSpanId","isSpanContextValid","wrapSpanContext","contextApi","NoopTracer","Boolean","parentFromContext","startActiveSpan","arg2","arg3","arg4","opts","ctx","contextWithSpanSet","SamplingDecision","SpanKind","SpanStatusCode","NOOP_TRACER","ProxyTracer","_provider","_getTracer","_fn","Reflect","_delegate","getDelegateTracer","NOOP_TRACER_PROVIDER","NoopTracerProvider","_version","ProxyTracerProvider","getDelegate","setDelegate","delegate","VALID_KEY_CHAR_RANGE","VALID_KEY_REGEX","VALID_VALUE_BASE_REGEX","INVALID_VALUE_COMMA_EQUAL_REGEX","TraceStateImpl","rawTraceState","_internalState","_parse","traceState","_clone","unset","serialize","_this","_keys","agg","listMember","validateKey","validateValue","createTraceState","NOOP_METER_PROVIDER","NoopMeterProvider","getMeter","metrics","MetricsAPI","setGlobalMeterProvider","provider","getMeterProvider","NoopTextMapPropagator","_carrier","extract","fields","BAGGAGE_KEY","getBaggage","getActiveBaggage","setBaggage","baggage","deleteBaggage","NOOP_TEXT_MAP_PROPAGATOR","PropagationAPI","setGlobalPropagator","propagator","setter","_getGlobalPropagator","TraceAPI","_proxyTracerProvider","setGlobalTracerProvider","success","getTracerProvider","CryptoJS","BlockCipher","lib","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","sx","x2","x4","x8","RCON","AES","extend","_doReset","_nRounds","_keyPriorReset","keyWords","words","keySize","sigBytes","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","offset","_doCryptBlock","decryptBlock","nRounds","s0","s1","s2","s3","t0","t1","t2","t3","_createHelper","Cipher","C_lib","Base","WordArray","BufferedBlockAlgorithm","C_enc","enc","Base64","Utf8","EvpKDF","cfg","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","process","dataUpdate","_append","_process","finalize","_doFinalize","ivSize","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","encrypt","decrypt","ciphertext","C_mode","StreamCipher","blockSize","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","CBC","xorBlock","block","_prevBlock","processBlock","thisBlock","Pkcs7","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","unpad","CipherParams","modeCreator","_minBufferSize","_mode","__creator","_doProcessBlock","finalProcessedBlocks","_data","cipherParams","mixIn","formatter","OpenSSLFormatter","format","OpenSSL","salt","openSSLStr","ciphertextWords","encryptor","cipherCfg","OpenSSLKdf","kdf","execute","compute","derivedParams","msCrypto","cryptoSecureRandomInt","Uint32Array","randomBytes","readInt32LE","subtype","overrides","$super","properties","propertyName","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","nBytes","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","fromCharCode","latin1Str","latin1StrLength","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","_nDataBytes","doFlush","processedWords","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","Hasher","messageUpdate","hasher","_createHmacHelper","HMAC","parseLoop","base64Str","base64StrLength","reverseMap","bitsCombined","_map","base64Chars","triplet","paddingChar","_reverseMap","paddingIndex","Base64url","urlSafe","_safe_map","swapEndian","word","Utf16","Utf16BE","utf16Chars","codePoint","utf16Str","utf16StrLength","Utf16LE","MD5","iterations","derivedKey","derivedKeyWords","input","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","superInit","subInit","typedArray","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Float32Array","Float64Array","typedArrayByteLength","sin","_hash","offset_i","M_offset_i","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","hash","H_i","HmacMD5","CFB","generateKeystreamAndEncrypt","keystream","CTRGladman","incWord","b1","b2","b3","incCounter","counter","_counter","CTR","ECB","OFB","_keystream","AnsiX923","lastBytePos","Ansix923","Iso10126","Iso97971","ZeroPadding","NoPadding","SHA1","PBKDF2","hmac","blockIndex","blockIndexWords","blockWords","blockWordsLength","intermediate","intermediateWords","C_","RabbitLegacy","_X","_C","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","Rabbit","RC4","keySigBytes","_S","keyByteIndex","keyByte","generateKeystreamWord","keystreamWord","RC4Drop","drop","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","br","cr","dr","er","hr","zr","sr","f1","f2","f3","f4","f5","rotl","HmacRIPEMD160","HmacSHA1","SHA256","SHA224","HmacSHA224","isPrime","sqrtN","factor","getFractionalBits","nPrime","pow","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","HmacSHA256","X64Word","x64","Word","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","outputLength","nBlockSizeLanes","M2i","M2i1","lane","high","low","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","HmacSHA3","C_x64","X64WordArray","SHA512","SHA384","HmacSHA384","X64Word_create","H0","H1","H2","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","Wil","Wih","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","t1l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","t1h","t2l","toX32","HmacSHA512","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","_lBlock","_rBlock","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","_des1","_des2","_des3","X32WordArray","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","LS_META_TRACE_KEY","LS_META_TRACER_GUID_KEY","LS_META_TRACER_CREATE","LS_META_SP_START","LS_META_SP_FINISH","LS_META_SPAN_KEY","LS_META_PROPAGATION_KEY","LS_META_INJECT","LS_META_EXTRACT","LS_META_EVENT_KEY","LOG_WARN","LOG_STRING_TO_LEVEL","LOG_LEVEL_TO_STRING","LOG_INFO","LOG_FATAL","LOG_ERROR","LIGHTSTEP_APP_URL_PREFIX","JOIN_ID_PREFIX","FORMAT_B3","CLOCK_STATE_REFRESH_INTERVAL_MS","_accessToken","crouton_thrift","Auth","access_token","toBoolean","toNumber","_runtime","_record","LogRecord","timestamp_micros","_platform","nowMicros","runtime_guid","span_guid","stable_name","thread_id","line_number","stack_frames","payload_json","error_flag","_addLogRecord","_encodePayload","WeakMap","_logFieldKeyHardLimit","_logFieldValueHardLimit","_timestampMicros","_fields","_keysOverLimit","_valuesOverLimit","_clearOverLimits","getFieldKey","getFieldValue","KeyValue","Key","Value","getOwnPropertyNames","TProtocolException","TProtocolExceptionType","read","write","NamedCounter","Name","Runtime","start_micros","group_name","attrs","TraceJoinId","TraceKey","SpanRecord","trace_guid","span_name","join_ids","oldest_micros","youngest_micros","log_records","Timing","receive_micros","transmit_micros","SampleCount","MetricsSample","int64_value","double_value","Metrics","counts","gauges","ReportRequest","runtime","span_records","timestamp_offset_micros","counters","internal_logs","internal_metrics","Command","ReportResponse","commands","timing","Thrift","WorkerGlobalScope","isBrowser","getElementsByTagName","parseScriptElementOptions","dataset","component_name","collector_host","collector_port","collector_path","collector_encryption","verbosity","init_global_tracer","xhr_instrumentation","instrument_page_load","parseURLQueryOptions","lightstep_verbosity","lightstep_log_to_console","log_to_console","navigationStart","cookie","_generateLongUUID","sessionStorage","getItem","setItem","initGlobalTracer","opentracing","Tracer","_host","_port","_path","_encryption","_reportAsyncScript","_reportAJAX","toThrift","XMLHttpRequest","setRequestHeader","getAccessToken","onreadystatechange","responseText","defer","toUTCString","_tracer","_error","construct","sham","Proxy","valueOf","ReferenceError","_carrierPrefix","traceGUID","_guid","_sampled","forEachBaggageItem","_baggagePrefix","setBaggageItem","_traceGUID","_oldestMicros","_youngestMicros","_spanRecords","_internalLogs","_counters","_timestampOffsetMicros","_runtimeGUID","_toThrift","_startMicros","_componentName","_baggage","_upperTraceGUID","assert","_tracerImp","_ctx","_ended","_operationName","_tags","_beginMicros","_endMicros","_errorFlag","_log_records","getBaggageItem","getLogFieldKeyHardLimit","getLogFieldValueHardLimit","parent_span_guid","setEndMicros","shouldSendMetaSpan","getTags","tags","_addSpanRecord","getNumKeysOverLimit","getNumValuesOverLimit","Span","getOwnPropertySymbols","getOwnPropertyDescriptors","defineProperties","_delegateEventEmitterMethods","setOptions","Platform","override_runtime_guid","_plugins","_optionDescs","_makeOptionsTable","_opentracing","opentracing_module","_auth","_warn","_transport","override_transport","_propagators","FORMAT_HTTP_HEADERS","FORMAT_TEXT_MAP","FORMAT_BINARY","propagators","_reportingLoopActive","_first_report_has_run","_reportYoungestMicros","_reportTimer","_reportErrorStreak","_lastVisibleErrorMillis","_skippedVisibleErrors","_activeRootSpanSet","_activeRootSpan","_flushIsActive","addPlugin","addPlatformPlugins","setPlatformOptions","transport","ThriftTransport","_info","_useClockState","disable_clock_skew_correction","_clockState","localStoreGet","localStoreSet","_setupReportOnExit","startPlugins","_ee","addOption","defaultValue","_printToConsole","references","REFERENCE_CHILD_OF","REFERENCE_FOLLOWS_FROM","referencedContext","generateTraceGUIDForRootSpan","generateUUID","addTags","default_span_tags","setBeginMicros","setParentGUID","meta_event_reporting","_flushReport","_setOptionInternal","_initReportingDataIfNeeded","_startReportingLoop","newValue","_debug","oldValue","runtimeGUID","tracerTags","log_field_key_hard_limit","log_field_value_hard_limit","addOptions","_setActiveRootSpanToYoungest","_internalAddSpanRecord","max_span_records","_pushInternalLog","clear_span_buffer_consecutive_errors","max_consecutive_errors","spans_dropped","disable_report_on_exit","onBeforeExit","unflushed_spans","buffer_youngest_micros","disable_reporting_loop","_stopReportingLoop","_enqueueNextReport","delay_initial_report_millis","detachedTimeout","max_reporting_interval_millis","isReady","offsetMicros","offset_micros","active_samples","activeSampleCount","ready","_buffersAreEmpty","_clearBuffers","ensureConnection","last_report_seconds_ago","_restoreRecords","getSpanRecords","getInternalLogs","getCounters","_clearSpanRecordsIfMaxErrors","streak","detached","spans_reported","addSample","receiveTimestamp","transmitTimestamp","nanos","errors","errorsList","commandsList","devMode","disable_meta_event_reporting","payload","error_throttle_millis","silent","_nowMicros","_localStoreGet","_localStoreSet","_samples","_currentOffsetMicros","_currentOffsetAge","samples","delayMicros","unref","hexToDec","LightStepPropagator","B3Propagator","DDPropagator","SpanContext","initLibrary","thrift","_inited","_span","_ensureSpanStarted","_handleReadyStateChange","addActiveRootSpan","_addTimingSpans","removeActiveRootSpan","suffixes","setTag","_copyNavigatorProperties","childOf","requestStart","responseStart","responseEnd","domLoading","domInteractive","isArray","_enabled","_isValidContext","_proxyInited","_internalExclusions","_handleOptions","_addServiceHostToExclusions","fetch_instrumentation","_instrumentFetch","Request","_shouldTrace","host","search","include_cookies","cookies","_shouldAddHeadersToRequest","openPayload","statusText","responseType","fetch_url_exclusion_patterns","fetch_url_inclusion_patterns","fetch_url_header_exclusion_patterns","fetch_url_header_inclusion_patterns","getAllResponseHeaders","_instrumentSetRequestHeader","_instrumentOpen","_instrumentSend","__requestHeaders","__tracer_span","__tracer_url","user","url_pathname","data_length","xhr_url_exclusion_patterns","xhr_url_inclusion_patterns","xhr_url_header_exclusion_patterns","xhr_url_header_inclusion_patterns","_optionsCb","_logAddedCb","_handleLogAdded","once","_events","_eventsCount","eventNames","listeners","listenerCount","off","prefixed","decToHex","SPAN_KIND","SPAN_KIND_RPC_CLIENT","SPAN_KIND_RPC_SERVER","SPAN_KIND_MESSAGING_PRODUCER","SPAN_KIND_MESSAGING_CONSUMER","COMPONENT","SAMPLING_PRIORITY","PEER_SERVICE","PEER_HOSTNAME","PEER_ADDRESS","PEER_HOST_IPV4","PEER_HOST_IPV6","PEER_PORT","HTTP_URL","HTTP_METHOD","HTTP_STATUS_CODE","MESSAGE_BUS_DESTINATION","DB_INSTANCE","DB_STATEMENT","DB_TYPE","DB_USER","followsFrom","globalTracer","BinaryCarrier","Tags","Reference","MockTracer","MockContext","MockSpan","spans","spansByUUID","spansByTag","debugSpans","unfinishedSpans","_finishMs","uuid","firstSpanWithTagValue","MockReport","_mockTracer","_uuid","_generateUUID","_startMs","_logs","_setOperationName","_addTags","_log","_finish","durationMs","addReference","operation","_spans","_startSpan","_allocSpan","setOperationName","_startStack","_inject","_extract","_type","_referencedContext","_setBaggageItem","_getBaggageItem","toTraceId","toSpanId","Function","Constants","reference_1","span_1","tracer_1","noopTracer","_globalTracer","GlobalTracerDelegate","globalTracerDelegate","__export","binary_carrier_1","Noop","span_context_1","mock_tracer_1","mock_context_1","mock_span_1","finishTime","ref","mock_report_1","noop","keyValueMap","keyValuePairs","eventName","Functions","__webpack_require__","CURRENT_SCRIPT","currentScript","Utils","ErrorOrigin","ErrorBits","CategoryId","CategoryBits","APIErrorCode","getScriptName","scriptSrc","lastIndexOf","getScriptOriginPath","device","crypt","dom","string","math","base64","object","isDefined","normalizeLanguageCode","langCode","separator","lang","country","poll","pollFunc","intervalMs","endTs","doPoll","pollResult","ms","debounce","tid","getScriptPath","getScriptOrigin","getScriptOriginRootPath","path","getWindowRect","outerWidth","outerHeight","getUserActivationStatus","hasUserActivationAPI","hasBeenActive","userActivation","isActive","getBrowserPermissionStatus","isGranted","Encoding","sha256","subtle","msgBuffer","hashBuffer","digest","hashArray","Base64Url","url_encode","padStart","rand","normalizeUrlPath","urlPath","paths","baseUrl","supportsRequestFullscreen","fullscreenEnabled","requestFullscreen","webkitFullscreenEnabled","webkitRequestFullscreen","oncontextmenu","onkeydown","disableContextMenu","restoreContextMenu","disableDevTools","restoreDevTools","applyStylesheet","cssFilePath","css","rel","head","sz","equals","caseSensitive","contains","fromArrayBuffer","charBuffer","arr","toArrayBuffer","uint8","arrayBuffer","byteView","logText","hex","unsigned","floatEquals","v1","v2","precision","mod","DayOfWeek","DAYS","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","getLastDay","lastDate","getDay","getNextDay","nextDate","toUTC","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","firstDateMs","secondDateMs","btoa","url_decode","predicate","elem","exists","field","arrCopy","objCopy","dereference","deepmerge","objects","cur","maskPropertyValue","newDataObj","APIErrorCodeMessageTable","Cancelled","Network","Http","MissingParameter","InvalidParameter","NotSupported","NotImplemented","MissingVpcId","InvalidVpcId","CannotLoadTranslationData","MissingLayoutList","StarfleetConfigurationUnavailable","AttempedInternalConfigurationOverride","DeviceNotSupported","InvokeCallbackFailed","InvalidDeviceInfo","CannotCreateDeviceInfo","FeatureNotSupported","RuntimeHostNotSupported","SDKInitializationFailed","SDKIsNotInitialized","MissingSettings","InvalidSubscription","AppNotFound","MissingToken","RefreshTokenWithNoUser","RefreshTokenWithNoClientToken","DeviceAuthorizationCancelled","DeviceAuthorizationFailed","MainWindowClosed","CannotCreateLoginWindow","InvalidToken","LoginCancelled","LoginFailed","MissingAuthorizationResult","SerializedUserMalformed","UserNotFoundInStorage","UserEndpointNotFound","UserNotAuthorized","UserNotLoggedIn","InvalidServerInfo","StorageUnavailable","CannotInitializeIntroPlayer","CannotLoadIntroAnimation","NoStreamingSession","StreamingSessionSetupFailed","StreamerDOMError","CannotRunNetworkTest","UserAccountNotLinked","APIError","mCode","mMessage","GrantType","AuthFlowKind","AuthResponseMode","AuthScope","AuthPrompt","AuthErrorId","AuthAgent","HttpMethod","HttpStatusCode","HttpResponseFormat","HttpBackoffStrategy","HttpRetryMode","LoginError","MissingTokenError","DEFAULT_RETRYABLE_STATUS_CODES","BadGateway","ServiceUnavailable","GatewayTimeout","DEFAULT_RESPONSE_FORMAT","Json","DEFAULT_RETRY_MODE","RetryAfterHeader","StatusCode","HttpErrorReason","HttpRateLimiterType","StarfleetTokenGrantType","HttpError","mReason","reasonDescription","InvalidState","MaxRetriesExceeded","Timeout","TooManyRequests","Generic","mUrl","reasonDesc","HttpTimeoutError","HttpCancelledError","StarfleetError","mId","mHandlers","NO_USER_CONSENTS","trackBehavioralData","trackTechnicalData","DEFAULT_USER_CONSENTS","UserConsents","consents","mConsents","User","externalId","mExternalId","displayName","mDisplayName","mIdpId","idpName","mIdpName","isAffiliate","mServiceEndpoint","defaultIdpId","defaultEndpoint","streamingServiceUrl","endpoint","mConfiguration","grid","hasAcceptedEULA","GFN","consent","acceptEula","restClient","mSettings","mRestClient","onConsentsUpdated","updateServiceProvider","serviceInfo","FindServiceEndpoint","deleteFromStorage","storage","storageFactory","gfnServiceInfo","gfnServiceEndpoints","defaultProvider","ep","loginProvider","accepted","AuthorizedUser","mAuthInfo","isLoggedIn","idToken","isGuest","tokenParts","sub","external_id","preferred_username","idp_id","idp_name","sessionInfo","authentication","expiresOn","clientToken","accessToken","deserialize","readFromStorage","serializedUser","writeToStorage","requestUserTelemetry","userEmail","locale","deleteUserTelemetry","PlatformID","PlatformClass","LoggingLevel","LOGGING_LEVEL_MAP","Warning","Info","Verbose","ConsoleLogWriter","mConsoleFns","Logger","logCallback","mPrefix","mLogCallback","logEntry","raw","Logging","mLogLevel","mLoggerNamePrefix","mLoggers","mLogWriters","mPreInitQueue","mInitialized","scriptName","addWriter","replayPreInitLogs","writer","clearWriters","logWriter","getLogger","loggerName","RestClientError","mStatus","RestClientGraphQLError","mErrorResponse","locations","loc","column","isFirst","errStr","RestClientGfcChunkError","xDataOffset","ServiceName","ServiceUseCase","ServiceSubUseCase","BuildType","BuildFlavor","Version","runtimeVersion","appVersion","flavor","buildType","runtimeTag","streamerName","streamerTag","appName","check","clientVersionParts","ParseVersionString","runtimeVersionParts","RuntimVersionNew","RuntimVersionOld","InvalidVersion","versionString","GuestUser","mToken","partnerSecureData","mPartnerSecureData","partnerId","mPartnerId","mCmsId","setTokenInfo","GFN_AUTH_KEY","GFN_AUTH_POPUP_WINDOW_DEFAULT_SIZE","loginWindow","mLoginWindow","authorizedUser","mAuthorizedUser","mGuestUser","mConsent","onUserInfoUpdated","guestUser","currentUser","distributedTracing","mRequestedDeviceAuthCancellations","mUserStorageKey","mRefreshAccessTokenPromise","mDevice","mDistributedTracing","configuration","mStorage","mSdkVersion","mStarfleetProviderConfiguration","loadStarfleetProviderConfiguration","saveCurrentUserToStorage","getTokenOrThrow","getToken","refreshAccessToken","authorizeClientToken","resetAuthorizedUser","loginLastUser","IsTokenExpired","updateCurrentUserServiceProvider","createLoginUrl","authParams","extraParams","responseMode","Query","scopes","Consent","TkClient","Profile","uiLocales","languageCode","prompt","SelectAccount","nonce","redirectUri","createDefaultRedirectUri","flowKind","GetAuthFlowKind","Implicit","Hybrid","authUrl","authorizationUrl","searchParams","maxAge","idTokenHint","loginHint","loginWithBrowser","openLoginWindow","Browser","loginWithBrowserPopup","windowFeatures","BrowserPopup","loginWithWebView","loginWithPartnerToken","partnerToken","domain","encodeUrlState","WebView","callbackUrl","getCallbackUrl","autoLoginUrl","loginWithNonce","logout","getAuthConfigFromNonce","finishLogin","authState","DecodeUrlState","isPopupAgent","agent","finishLoginWithNativeBrowser","finishLoginWithBrowserOrWebView","startDeviceAuthorization","display_name","id_token_hint","login_hint","max_age","deviceCode","device_code","userCode","user_code","interval","expiresIn","expires_in","verificationUrl","verification_uri","verificationCompleteUrl","verification_uri_complete","waitForDeviceAuthorization","authResult","authorizeDeviceCode","AuthorizationPending","SlowDown","cancelDeviceAuthorization","authenticatedRestCall","authenticatedFn","tokenOptional","windowTarget","codeVerifier","codeChallenge","savedUrlStr","updateUrlForHttpPopupSpan","launchBrowser","handleBrowserLoginResult","closeHttpPopupSpan","errorText","failedUrl","CreatePopupWindowFeatures","fromNativeBrowser","getBrowserLoginResultForNative","getBrowserLoginResult","authorizeAuthorizationCode","DecodeIdentityTokenExpirationDate","getClientToken","getServiceInfo","onWindowMessage","isSafeMessageOrigin","errorDescription","id_token","tokenType","token_type","registerBrowserCallback","isPopup","opener","errorResult","createCallbackUrl","client_token","authorize","grant_type","AuthorizationCode","DeviceCode","client_id","subClaim","ClientToken","requestEntity","stateObj","platformId","currentState","Production","versionParts","sdk","cdnUrl","messageOrigin","initialFeatures","winRect","popupWinSize","popupWinPos","exp","Code","Configuration","mConfig","starfleet","entitlement","accountLinking","catalog","streamer","networkTest","networkIndicators","gxTarget","feedback","remoteLogger","serviceInfoUrl","voltron","settingsOverrides","overridesToolOverides","mSettingsConfigOverrides","mRemoteConfig","mImmutableConfig","configType","mOverrideToolOverrides","mInternalConfig","calculated","wrapperSdkUrl","mBaseConfig","getDeviceOverrides","settingsConfigOverrides","configOverrides","mergeConfigsAndNotify","updateRemoteConfig","remoteConfigParams","web","ragnarokConfigData","clientSdk","deviceOverrides","Chromebook","Huawei","MiBox","TVision","KbroA0","JioStb","android","enableStreamRecoveryWithIDR","ChromeCast","enableDynamicResolutionChange","KeyCode","XHRReadyState","XHRHttpResponse","mResponse","hasBody","mResponseType","outerHTML","json","rootNodeName","HttpClient","rateLimiter","responseListener","mResponseListeners","mRetryTimeoutHandle","mRateLimiter","mServiceInfo","retryMode","retryStatusCodes","maxRetries","responseFormat","backoffConfiguration","strategy","Exponential","retryCeiling","expoBackoff","initialDelay","Fixed","Incremental","extraHeaders","request","DELETE","GET","HEAD","OPTIONS","PATCH","patchObject","post","POST","postObject","PUT","putObject","req","durationInMs","totalDurationInMs","backoffInfo","tFirstRequest","tThisRequest","tRequestFinished","validateRequest","allowRequest","Never","executeRequest","notifyHttpResult","retryAfterHeaderValue","backoffWaitMs","isRetryableResponse","IsTimeoutError","doRetryAfterOrBackoff","listener","onHttpResult","doBackoff","retryDelay","timeoutInterval","intervalOrMultiplier","expoConfig","retryableStatusCodes","Always","XHRHttpClient","mXHR","onabort","ontimeout","getXHRFromEvent","Done","responseURL","getResponseHeaders","BadRequest","setRequestHeaders","currentTarget","xhr","header","hdrs","userAgentHeaderFound","HttpClientFactory","RequestStatusCode","ServerType","DeviceKind","BrowserID","DeviceOrientation","DeviceLogType","RequestStatusError","mRequestStatus","GetMessageFromRequestStatus","MissingUnifiedErrorCode","HttpRequestStatusError","httpStatusCode","mHttpStatusCode","httpStatus","SessionRequestStatusError","CLIENT_IDENTITY_PLATFORM_MAP","AmazonFire","Android","AppleMobile","AppleTV","ConnectedCar","LGTV","LGUPlus","Linux","Mac","SamsungTV","Shield","Steam","Windows","Xbox","ToClientIdentityPlatform","FROM_GS_DEVICE_OS_MAP","ccOS","ChromeOS","iOS","iPadOS","macOS","SteamOS","Tizen","tvOS","webOS","TO_GS_DEVICE_OS_MAP","FireOS","FROM_GS_DEVICE_TYPE_MAP","Console","Desktop","Laptop","Phone","Tablet","TO_GS_PLATFORM_NAME_MAP","ToGsPlatformName","TO_GS_BROWSER_NAME_MAP","Chrome","Firefox","Safari","Edge","Chromium","Opera","Brave","Samsung","Silk","Yandex","EdgeLegacy","ReactNative","FROM_GS_BROWSER_NAME_MAP","ToGsBrowserName","TO_NV_DEVICE_OS_MAP","ToNvDeviceOs","TO_NV_DEVICE_KIND_MAP","Other","Server","ToNvDeviceType","TO_NV_BROWSER_TYPE_MAP","SlidingWindowRateLimiter","SlidingWindow","intervalSeconds","requestLimit","mPrevEpoch","mPrevEpochCount","mCurEpoch","mCurEpochCount","ConfigurationError","epoch","rotateEpoch","HttpRateLimiterService","configs","mRateLimiters","createRateLimiter","limiter","JWT","signature","JWTPartner","RestClient","httpFactory","mHttpFactory","httpClientFactory","mVersion","rateLimiters","createHttpClient","addCommonHeaders","parentSpan","serviceUrl","http","Grid","useCase","NESGetServiceUrls","backoff","handleHttpEndpointSpan","TryGetEntityFromRequestStatusResponse","getServerInfo","serverInfoUrl","GridGetSpecificServerInformation","GridGetActiveSessions","AddAuthorizationHeader","TryGetSessionEntityFromRequestStatusResponse","GridGetSession","getSupportedLanguages","getSupportedLangaguesCore","languagesUrl","NES","NESGetLanguages","getCountries","supportedOnly","getCountriesCore","countriesUrl","NESGetCountries","countries","getClientStreamingQuality","vpcId","NESGetClientStreamingQuality","getUserSubscription","subscriptionUrl","NESGetSubscriptions","getUserProducts","productsUrl","NESGetProducts","getLocalizedProduct","productUrl","NESGetProduct","addAppToLibrary","appsUrl","NESAddToLibrary","removeAppFromLibrary","NESRemoveFromLibrary","executeGraphQL","gqlHostName","variables","catalogClientId","Lcars","errorObj","configUrl","Starfleet","StarfleetLoadProviderConfig","configObj","authorization_endpoint","clientTokenUrl","deviceAuthorizationUrl","tokenUrl","token_endpoint","userInfoUrl","userinfo_endpoint","getDeviceAuthRequestBody","StarfleetStartDeviceAuthorization","TryGetStarfleetEntityFromResponse","getTokenRequestBody","StarfleetGetAccessToken","StarfleetGetClientToken","getTranslationData","normalizedLanguageCode","overridesUrl","stringOverridesUrl","I18N","FetchLocaleJson","defaultTranslations","overridesResponse","getRemoteConfig","clientParams","remoteConfigUrl","remoteConfig","project","product","GxTarget","GetRemoteConfig","RestErrorGetRemoteConfigError","getCloudVariables","cloudVariables","manufacturer","browserId","GetCloudVariable","ret","sendFeedbackHeadRequest","Gfc","GfcHeadRequest","TelemetryFeedbackJSONTooBig","TelemetryFeedbackInvalid","TelemetryFeedbackIdInUse","TelemetryFeedbackIdInvalid","TelemetryFeedbackAttachmentRejected","TelemetryFeedbackUnknownClientId","TelemetryFeedbackServerError","sendFeedbackAttachment","GfcAttachmentRequest","FormData","feedbackId","checksum","eob","TelemetryFeedbackBadRequest","TelemetryFeedbackNonSequentialFrame","TelemetryFeedbackWrongContent","deviceKind","buildClientIdentityString","platformStr","RefreshToken","AddHeader","entity","error_description","ALS","AlsTokenExchange","AuthError","Voltron","UserDataGet","UserDataDelete","LocalStorage","available","localStorage","internalkeys","throwWhenStorageNotAvailable","len","mIteratorPosition","kvp","removeItem","READ","WRITE","IDBStorage","mDbVersion","dbName","dbStoreName","EnsureIndexedDB","storeName","mDbConnection","dbOpenRequest","StorageError","objStoreCreateReq","throwOnUnInit","objStore","keysRequest","getAllKeys","getRequest","setRequest","deleteRequest","clearRequest","winObj","mozIndexedDB","webkitIndexedDB","msIndexedDB","Entitlement","auth","mAuth","addToLibrary","removeFromLibrary","products","subscriptionResponse","subscription","userSubscription","productUri","GetAvailableStreamParams","subscriptionInfo","serverInfo","subscribedStreamParams","resolutions","entitledStreamParams","isEntitled","Settings","descriptor","streamerCssSrc","enableBrowserTools","enableSupportCheck","enableIntroAnimation","QueryFilterBuilderBase","mFilterBuilders","mRoot","getBuilder","QueryFilterBuilder","developerName","QueryFilterClauseStringBuilder","genres","QueryFilterClauseStringListBuilder","keywords","maxLocalPlayers","QueryFilterClauseIntBuilder","maxOnlinePlayers","numberOfFakeControllers","osType","publisherName","sortName","supportedControls","supportedGamePlayModes","variants","QueryFilterVariantBuilder","appStore","displaysOwnRatingDuringGameplay","QueryFilterClauseBooleanBuilder","gfn","QueryFilterGfnBuilder","marketingDate","QueryFilterClauseDateBuilder","releaseDate","isInLibrary","QueryFilterClauseBuilderBase","clause","equalTo","notEqualTo","notEquals","in","notIn","greaterThanOrEqualTo","greaterThan","gt","lessThanOrEqualTo","lessThan","lt","between","DoNotSendVpcId","AppDataKind","RatingSystem","defaultContentRating","Unrated","contentDescriptorKeys","InputControllerType","GameplayMode","AppType","GfnStatus","GfnFeature","SectionType","MediaAssetFlags","AppDataLevelOfDetail","defaultCoreAppData","uid","shortDescription","longDescription","contentRatings","gfnUrl","images","keyIconUrl","keyArtworkUrl","keyImageUrl","gameIconUrl","gameLogoUrl","gameBoxArtworkUrl","featureImageUrl","heroImageUrl","heroMarqueeImageUrl","tvBannerUrl","videoTrailerUrl","screenshotThumbnailUrl","screenshotUrls","anselImageUrls","nvidiaFeatures","ansel","freestyle","highlights","ngx","Application","GuestModeDefaultAppData","OwnershipSyncStatus","OwnershipProviderIgnoreList","ConnectionTypeName","gBuilder","CatalogQueries","fragments","getFragmentText","getFragmentTextRecursive","trackIncludeList","include","dep","getFragmentDescriptor","lod","Bare","App","BARE_APP_DATA","BARE_VARIANT_APP_DATA","Minimal","MINIMAL_APP_DATA","MINIMAL_VARIANT_APP_DATA","DEFAULT_APP_DATA","DEFAULT_VARIANT_APP_DATA","Full","FULL_APP_DATA","FULL_VARIANT_APP_DATA","getMediaAssetFragments","flags","descriptors","KEY_IMAGE_ASSETS","GameArtwork","GAME_ARTWORK_IMAGE_ASSETS","Screenshots","SCREENSHOT_IMAGE_ASSETS","Feature","FEATURE_IMAGE_ASSETS","Ansel","ANSEL_IMAGE_ASSETS","VideoTrailer","VIDEO_TRAILER_ASSETS","createAppsQueryStatement","extraVars","startIndex","pageSize","store","apps","variableName","variableData","createFilterClauseStatement","filterClauseType","bindVars","varsOut","createFiltersStatements","filters","statements","keyPathDotNotation","createAppsStatement","parentFragment","variantFragment","imageFragments","newVars","filterStatement","frag","GFN_FEATURES_NAME","GFN_FEATURES","KEY_IMAGE_ASSETS_NAME","GAME_ARTWORK_IMAGE_ASSETS_NAME","SCREENSHOT_IMAGE_ASSETS_NAME","FEATURE_IMAGE_ASSETS_NAME","ANSEL_IMAGE_ASSETS_NAME","VIDEO_TRAILER_ASSETS_NAME","BARE_APP_DATA_NAME","MINIMAL_APP_DATA_NAME","DEFAULT_APP_DATA_NAME","FULL_APP_DATA_NAME","BARE_VARIANT_APP_DATA_NAME","MINIMAL_VARIANT_APP_DATA_NAME","DEFAULT_VARIANT_APP_DATA_NAME","FULL_VARIANT_APP_DATA_NAME","APP_STORE_ALL","GENRE_ALL","RATING_SYSTEM_SOME","LAYOUT_LIST_PANEL_SOME","USER_ACCOUNT_STORE_DATA","buildAppsQuery","includeMedia","mediaFlags","levelOfDetail","Variant","mediaFragments","appsStatement","buildLayoutListQuery","listCollection","appsConfig","queryStatement","appsStatements","list","lists","items","AccountProvider","expirationTime","expiration","mUserAccountData","accountLinkingData","getExpirationFromNow","gamesList","mEnabledGamesList","digitalStoreInfo","mDigitalStoreMetadata","storeData","isAccountSyncingSupported","feature","__typename","AccountGamesSyncing","isAccountLinkingSupported","AccountLinkingSso","userAccountInfo","userAcountData","updateLinkTime","isExpired","isConnected","isAccountLinkingSsoAvailable","isAccountLinked","enabledGamesList","digitalStoreMetadata","userAccountData","mAccountLinkedTime","mStoreName","SINGLE_CHILD_FIELD_OVERRIDES","DEFAULT_APPS_CONFIGURATION","DEFAULT_LAYOUT_LIST_CONFIGURATIOJN","Catalog","DefaultAppsQueryConfiguration","DefaultLayoutListQueryConfiguration","i18n","mAccountConnectionsInitialized","mAccountLinkedVariants","mAccountProviders","mI18N","getAppStores","runQuery","LCARSGetAppStores","appStoreDefinitions","getGenres","LCARSGetGenres","genreDefinitions","getGfnStatuses","Available","Patching","displayText","translate","supplementalDisplayText","ServerMaintenance","getRatingSystems","LCARSGetRatingsInfo","ratingDefinitions","getLayoutList","getLayoutLists","panels","LCARSLayoutGetSections","panel","section","transformAppData","getMainLayoutList","getMyLibrary","myLibraryQuery","mappedItems","getAppsInternal","app","MyLibrary","getNewReleases","queryConfig","startDate","endDate","getApps","populateLayoutLists","layoutList","configCopy","LCARSGetLayout","populatedLists","resultItem","createFilterBuilder","getAccountLinkStatus","cmsIdString","accountProvider","doesRequireAccountLinking","getUserAccountStoreData","LCARSGetUserAccountStores","pageIndex","genre","additionalVariables","pageCursor","LCARSGetAppData","hasMorePages","pageInfo","hasNextPage","itemCount","numberReturned","totalItemCount","getAllApps","extraVariables","getCommonVariables","variant","initializeAccountConnections","updateAccountProviders","userAccount","storesData","getStoreSpecificUserAccountData","sortFeaturesData","featuresData","featureType","ft","digitalStores","digitalStore","featureData","supportedVariants","accountLinkingMetadata","supportedVariantIds","isRequired","ConnectionProtocol","AppLevelConnectionProtocol","ConnectionUsage","AudioMode","DynamicRangeMode","EnhancedStreamMode","SeatSetupStep","SessionStatus","SessionErrorCode","ModifySessionAction","StreamProfilePreset","StreamerMode","SessionSetupProgress","StreamerState","StreamerWarningCode","StreamerDiagnosticLevel","StreamerTerminationReason","StreamerNetworkQuality","StreamerMicrophoneState","StreamerUsage","StreamerProtocol","StreamerAppLevelProtocol","StreamerVSyncMode","DEFAULT_PROFILE_BALANCED_PARAMS","DEFAULT_PROFILE_COMPETITIVE_PARAMS","DEFAULT_PROFILE_DATASAVER_PARAMS","EditBoxTextType","EditBoxFlags","NetworkCapability","NetworkTestResultCode","NativeNetworkTestResultCode","APIBase","StorageFactory","utils","AndroidPlatformDeviceProxy","mInfo","nativeInfo","mNativeInfo","nativePlatformDevice","getInfoJson","mNativePlatformDevice","getId","hardware","serial","isEmulator","runtimeVersionTag","cpuName","processorArchitecture","networkName","displayDetails","isHdrDecodingSupported","isHdrRenderingSupported","callbackUrlScheme","callbackUrlHost","getLogFile","PlatformGestureType","AudioChannelsConfigurationValue","BitStreamCaptureMode","DecoderProfilingLevel","GFN_DEVICE_ID_STORAGE_KEY","Device","Information","deviceInfo","isGamepadConnected","platformClass","gp","isNative","mPlatformDevice","Mobile","isTouch","isMobileTouch","screenSizeInPixels","displays","screenSize","displayNumber","logicalRes","physicalRes","supportedAudioChannels","channelCount","SURROUND_7_1","SURROUND_5_1","mPlatformID","detectPlatformId","mPlatformClass","detectPlatformClass","mAppName","mAppVersion","platformDevice","mBrowserCallbacks","cachedDeviceId","browserCallbackUrl","gamepads","gamepadList","callbacks","handleBrowserCallback","contents","Process","detectNativePlatformId","detectNativeAndroidPlatformId","Web","isStreamingSupported","isSupported","RefreshInformation","IsBrowserSafari","AndroidDevice","platformProxy","isShield","isChromebook","mScreenSize","density","computeOrientation","screenWidth","screenHeight","naturalOrientation","rotation","PortraitUp","LandscapeLeft","PortraitDown","LandscapeRight","AspectRatio","ratio","clip","toSize","STREAMER_GSERROR_TERMINATION_REASON_MAP","Unexpected","ZoneMaintenanceMode","SetupSessionFailure","STREAMER_ERROR_MESSAGE_MAP","CommonDynamicRedirect","STREAMER_CUSTOMER_CARE_LINKS_MAP","GfnServerStatus","MOCK_SESSION_ID","MOCK_ZONE_NAME","MOCK_ZONE_ADDRESS","MOCK_GPU_TYPE","MOCK_IP","DEFAULT_TERMINATION_REASON","MockGridServer","mMockParams","mCancelledSetup","mSession","mock","queueDurationTotalSeconds","failAfterSeconds","terminationReason","cancelError","terminationTime","getSessionRequest","MISSING_VALUE","NativeNames","StreamingQualityType","VSyncMode","TelemetryDest","KodiakGDPRType","StreamerType","GDPRCategory","ClickType","AutomaticPaymentState","MembershipType","LocalizedProductType","ProductFlavorType","SubscriptionFeatureMetadata","ClientStreamingQualityMode","StreamingQualityModeFeatureMetadataKey","ProductStatus","ProductLocalizedAssetSubType","ProductLocalizedAssetChannel","CatalogUtils","IsFeatureEnabled","IsFeatureEqualTo","IsControllerSupported","appData","supportedControllers","CreateDefaultAppData","guestModeConfigMetadata","defaultAppData","EntitlementUtils","IsFeatureAvailable","textValue","DEFAULT_TEST_PROFILES_TV","NETWORKTEST_DB_NAME","NetworkTest","mPlatformNetworkTest","defaultTestProfiles","platformNetworkTest","mEntitlement","mOnLatencyTestComplete","mOnNetworkTestComplete","mOnNetworkTestError","mDB","run","authToken","testProfiles","maxSubscriptionProfile","sortedSubscriptionProfiles","getSortedSubscriptionProfiles","profileMap","bitrates","GetMaxBandwidth","sortedProfileMap","platformResult","capableProfile","downlinkBandwidth","capability","GetNetworkResultCapability","resultCode","GetResultCodeFromNativeCode","isCapable","Insufficient","uplinkBandwidth","maxTestBandwidthMbps","latencyWithStream","latencyWithoutStream","percentile99thFrameJitter","pathMtu","maxPacketSize","thresholdCount","thresholds","cacheNetworkTest","getNetworkFingerprint","errorReason","runNetworkTest","finishNetworkTest","subResolutions","subRes","allowedResolutions","targetRatio","filteredResolutions","isDefault","diff","lastElement","pixelCount","maxBandwidth","runNetworkTestIfNeeded","disableAutomaticTest","networkTestFingerprint","cachedNetworkTestResults","getCachedNetworkTest","clearNetworkTestCache","getCachedNetworkTestResults","networkFingerPrint","networkFingerprint","cachedResults","localEntry","maxCapableProfile","testRes","existingEntry","newEntry","runLatencyTest","servers","lowestLatencyIndex","serverLatencies","serverAddresses","finishLatencyTest","IDEAL_BPS_1080P","MAX_1440p_RATE_BPS","maxBitratePps","bitsPerSecond","nativeResultCode","NCT_R_SUCCESS","NCT_R_INVALID_PARAM","NCT_R_SYN_FAILED","NCT_R_FIN_FAILED","NCT_R_AUTH_FAILED","NCT_R_POST_FAILED","NCT_R_RETRYABLE_POST_FAILURE","NCT_R_TEST_IN_PROGRESS","NCT_R_SESSION_EXIST","NCT_R_CANCELLED","NCT_R_CAPACITY_FULL","InsufficientResources","NCT_R_INVALID_DATA","InvalidData","NCT_R_SETUP_FAILED","InitializationFailure","NCT_R_UNKNOWN","hasValidThreshold","hasInvalidThreshold","allThresholdsAreOptimal","packetLossLimit","percentile99thFrameJitterLimit","latencyLimit","bandwidthLimit","packetLossRecommended","percentile99thFrameJitterRecommended","latencyRecommended","bandwidthRecommended","Capable","Minimum","ClientMessageType","ClientMessageRecipient","AllowedUrlSchemes","InputNormalizationFactor","EditableRegion","screenRect","mScreenRect","gameRect","mGameRect","videoBounds","mVideoBounds","gameTextboxRect","calculateScreenTextBoxRect","videoRatio","displayVideoWidth","displayVideoHeight","scalingFactor","topPadding","leftPadding","boundingWidth","boundingHeight","leftMargin","boundingLeft","topMargin","boundingTop","normRect","BALANCED_LIMITS","REDUCED_LIMITS","Streamer","canUseIntroPlayer","vSyncMode","libraryName","mLibName","libraryVersion","mLibVersion","libraryVersionTag","mLibVersionTag","serverZone","mStartParameters","IsZone","mState","doStreamingSupportCheck","isWindowModeSupported","isKeyboardVisible","mIsKeyboardVisible","mStreamStats","serverLocation","zone","hdrStatus","isHDRSupported","profilePreset","DataSaver","mStreamParams","Competitive","Balanced","volume","mVolume","updateVolume","mMutedState","updateMutedState","microphoneState","mMicState","platformStreamer","guestMode","mGridServer","mUserSubscription","mAppStoreInfo","mAppData","mAppVariantData","WaitingForPermission","mEditboxList","mEditableRegions","mActiveEditableRegionIndex","mConsecutiveTouchTimes","mEditboxEventTimeout","mPlatformStreamer","mCatalog","mTelemetry","mFeedback","mRemoteLogger","mNetworkTest","mGuestMode","mQosScore","mNetworkQuality","libInfo","getLibraryInfoJson","configureGridServerSettings","mCustomMessageSentTimings","enableMutedAutoPlay","startOrResume","Initializing","Resuming","dispatchDiagnosticEvent","Debug","doCancelSessionSetup","doStopStream","changeKeyboardLayout","kbLayout","getStreamProfilePresets","profileData","preset","detectStreamingResolution","LimitResolution","toggleStatsOverlay","isGuestMode","igoSettings","isInGameStatisticsEnabled","toggleStats","toggleOnScreenControls","keyboardVisible","IsOSCEnabled","doToggleOsc","toggleKeyboard","doToggleKeyboard","doCreateSession","useWebsockets","defaultConfiguration","useWebSocketSignaling","sessionAction","GetSessionStatusFromGsState","GetMediaConnectionInfoFromGs","GetSignalConnectionInfoFromGs","UserCancellation","sendMessage","MessageThrottled","doSendCustomMessage","AppCustomMessage","GfnSdk","GenericError","sendKeyboardEvent","doSendKeyboardEvent","getActionRegion","ClickedUrl","GfnClientUI","messageJSON","urlData","URLClickData","openLink","EditBoxList","editboxZone","doCreateVideoBounds","onGesture","gestureType","touchWithEditableRegions","updateEditableRegions","gestureEvent","newActiveEditableRegionIndex","touchX","touchY","activeRegion","isLongPress","consecutiveInvoke","isAutoPasteValid","doAdjustVideoOffsetForActionRegion","toggleMicrophone","isMicFeatureEnabled","doToggleMicrophone","updateMicState","createGridServer","isMockStreamer","initGridServer","gridServer","streamerStartParams","sessionStartParams","mockParams","mockSessionStartParams","updateState","Finished","existingSessionId","handleError","logMessage","runConnectivityCheck","getUiSettingsJson","getUiDataJson","uiData","appLabel","appStoreLabel","appStoreInfo","subscriptionLabel","appSupportedControls","getSupportedAudioChannels","hasStreamerConfigOverride","defaultConfigurationOverrides","audioChannels","channelConfig","SUPPORTED_AUDIO_FORMATS","configName","streamerOverrides","getLaunchMode","OverrideTouch","canStartOrResume","Paused","waitForStop","WaitForStopTimeout","ValidateServerAddress","refreshData","updateStreamParams","initializeGridServer","setupSession","startStream","handleSetupSessionError","Ready","progress","WaitingForConnection","reportStreamingProfileTelemetry","doStartStream","Adaptive","Off","streamingProfileTelemetryId","sendStreamingProfileEvent","Custom","isDynamicResolutionChangeEnabled","GetAspectRatio","refreshUserSubscriptionIfNeeded","refreshUserSubscription","refreshAppInfoIfNeeded","refreshAppInfo","refreshAppStoreInfoIfNeeded","HDR_ENABLED","getAccountLinkedStatus","launchMode","initialZone","systemInfoTelemetryId","enableDRC","metadata","partnerData","physicalResolution","getPhysicalResolution","horizontalPixels","verticalPixels","bestDisplay","GetBestDisplay","isNetworkTestEnabled","networkTestResults","Ethernet","Wifi","frequency","VPN","Cellular","hdrRequested","hdrSupported","GetGsAppLaunchMode","allowKeyboardLayoutChange","GetKeyboardLayoutOrDefault","GetPartnerSecureData","mapErrorCodeToReason","handleSessionSetupCancelled","handleSessionLimitExceeded","sendSessionSetupProgressError","handleActiveSessions","translationKey","MapReasonToErrorMessage","customerCareLink","helpUrl","errorDetails","disableSessionResume","IsResumableSessionState","resumeParams","stopExistingSessions","stopPromiseList","physicalDims","appsResult","onGsTelemetryEvent","onGsActiveSessionsResult","onGsLogEvent","onGsProgressUpdate","GetAuthInfo","acceptLanguage","appUserAgent","GetSDKUserAgentString","ClientIdentification","GetGsDeviceTypeFromDeviceKind","onGridServerTelemetry","GetSessionProgressFromState","estimatedWaitTimeInSecs","onQualityScoreChanged","score","warningThreshold","quality","alertThreshold","Alert","Normal","doOpenLink","GetUiUrl","GetOscAssetsUrl","dims","defaultServer","Socket","SocketSecure","Signaling","PausedByUser","Playing","Configuring","InQueue","SessionCleanup","Starting","Waiting","NormalizeServerUrl","limits","ratios","CommonAspectRatios","formattedRatio","displayRatio","streamQualities","streamingQualities","clientStreamingQualityMode","maxBitRate","bitrateValue","AndroidPlayerTerminationReason","AndroidTouchMode","AndroidStreamer","toggleOSC","androidConfig","ENABLE_DEBUG_TOOLS","clientEnvironment","serverRegion","touchMode","DirectMouse","clientVersionTag","scriptPath","settingsJson","uiUrl","uiDataJson","allowMultipleControllers","setSystemInfoGuid","setStreamingProfileGuid","onPlatformStreamerInitializationError","PlatformStreamerError","onPlatformStreamerStarted","onPlatformStreamerConnected","onPlatformStreamerDisconnected","onPlatformStreamerPaused","onPlatformStreamerResumed","onPlatformStreamerTerminated","SessionDone","ClientStopped","ClientServerCompatibilityError","ServerCompatibilityError","ServerTerminated","ServerTerminatedConnection","NoVideoFramesError","VideoDecoderSetupError","StreamerInternalError","StreamerStartError","onPlatformStreamerQualityScoreChanged","onPlatformStreamerColorModeChanged","onPlatformStreamingWarning","secondsRemaining","onPlatformCustomMessage","onPlatformStreamStatsUpdate","resolutionHeight","resolutionWidth","videoAspect","windowWidth","windowHeight","onPlatformGesture","LongPress","Tap","MessageHandler","hostWindow","targetWindow","targetOrigin","mCurrentMessageUniqueId","mRequestCallbackMap","mResponseCallbackMap","mHostWindow","mTargetWindow","mTargetOrigin","mBoundOnPostedMessage","onPostedMessage","cleanup","postMessageAndGetResponse","uniqueid","rej","postResponse","refuniqueid","register","refid","MockRagnarok","mocked","mMockStreamerElem","mMockStreamerRuntime","exitcode","sendClientMessage","messageData","inputConfigFlags","onGamestreamProgressUpdate","videoElem","GetOrCreateMockVideoElement","exitCode","stopEvent","elementId","container","outline","contentWindow","__GFN_MOCK_STREAMER__","STREAMER_RAGNAROK_TERMINATION_REASON_MAP","ServerDisconnectedSessionEntitledTimeExceeded","NetworkErrorIntended","GamepadButtonName","layout","symbol","ShiftState","SymbolState","mapKeyToLayoutData","layoutData","onActivateKey","onActivateBackspace","onActivateEnter","onActivateHide","onActivateSymbols","onActivateShift","onActivateBack","onActivateForward","KeyboardKey","focused","activeElement","tabIndex","capsIndicator","mCapsIndicatorElem","keyLayout","defaultKey","symbolKey","layouts","activeLayout","mKeyboard","mIsDown","classList","handleKeyDown","handleKeyUp","handleBlur","activateLayout","focus","layoutName","textContent","handleAction","down","KeyboardRow","addKey","focusNext","focusedSlot","focusedKey","getKeyInSlot","focusedIndex","newFocusedIndex","targetSlot","slot","getFocusedSlot","VirtualKeyboard","mPlatformStreamerUI","rows","mShiftState","mSymbolState","mCapsIndicator","mShiftLastActivationTime","mListener","UIError","buildLayout","show","hide","onVirtualKeyEvent","updateLayout","onVirtualKeyboardHideActivated","Enter","Backspace","CapsLock","ArrowLeft","ArrowRight","addRow","row","focusNextKey","focusedRowIndex","focusNextRow","newFocusedRowIndex","rowStr","defaultChars","shiftChars","symbolChars","keyLayoutJson","OSC_BUTTONS_CONTAINER_ELEMENT_ID","OnScreenControl","mMenuElem","fts","mUI","mTouchOscEnabled","enableTouchOsc","mIsGamepadConnected","menuElem","handleOscKeyEvent","onkeyup","mTopBarElem","onFocusOut","mKeyboardButton","keyboardButtonSelected","mQuit","quitButtonSelected","mCloseHint","mKeyboardHintLabel","mVirtualKeyboard","hideOSC","stopPropagation","isDown","toggleVirtualKeyboard","closeButtonClicked","onTextInput","onQuitGame","restoreDefaultFocus","onShowOSC","onHideVirtualKeyboard","relatedTarget","onVirtualKeyboardVisibilityChange","onGamepadPress","DpadLeft","DpadRight","createSliderElement","existingElem","createOscElement","imgSrc","containerElem","divElem","imgElem","createTouchOsc","oscAssetsUrl","toggleElem","kbElem","quitElem","pasteElem","oscButtonsContainer","StreamerTouchOsc","mTouchOsc","showOsc","oscButtons","removeProperty","GestureHelper","htmlElement","mHtmlElementPrevBounds","mTouchStartMap","mTouchMoveMap","mGestureType","mHtmlElement","mTouchStartHandler","onTouchStart","mTouchMoveHandler","onTouchMove","mTouchEndHandler","onTouchEnd","mTouchCancelHandler","onTouchCancel","ToRectFromDOMRect","touch","pinchZoomed","hasHtmlElementBoundsChanged","currentRect","hasBoundsChanged","touchEndId","touchEndTimestamp","touchEnd","touchStartInfo","touchMoveInfo","touchEndInfo","moveX","moveY","IsTouchInLongPressThreshold","firstTouchInfo","secondTouchInfo","isMoved","timestampLowerBound","ELEMENT_ID_AUDIO","ELEMENT_ID_CONTAINER","ELEMENT_ID_VIDEO_CONTAINER","ELEMENT_ID_UI","ELEMENT_ID_TEXT_INPUT","WebStreamer","IsDialogOpen","mActiveDialogsCount","isWindowMode","mWindowedStreamerContainerElement","isTouchOscEnabled","isClipboardPasteEnabled","disableClipboardPaste","pasteDefaultOn","mFeatureConfigSvc","clipboardPasteConfig","isEnabled","requiresPasteDialog","mPlatformDetails","gpHandler","featureConfigSvc","mGridApp","mRagnarokGridApp","mMockGridApp","mRuntimeMessageHandler","mSessionParams","mContainerElement","mStreamerUIElement","mTouchOscHandler","mTouchOscElems","mAvailableScreenHeight","mGamepadHandler","mGestureHelper","SetDialogOpen","focusStreamerUI","SetDialogClose","focusStreamer","addListeners","ragnarokRemoteConfigData","registerEventDataUpdateCallback","getWindowStreamerContainerElement","GetOrCreateStreamContainerElement","mVideoElement","mVideoContainerElement","GetOrCreateVideoElement","mAudioElement","GetOrCreateAudioElement","mTextInputElement","GetOrCreateTextInputElement","onMessageQuitGame","onMessagePasteText","onplay","onVideoPlay","onfullscreenchange","onFullScreenChangeEvent","onmouseleave","onmouseenter","mockInitParams","isWindowedModeCursorTypeFree","disableHwCursorInWindowedMode","defaultCursorTypeInWindowedMode","gridApp","onGameStreamSessionStartResult","onGameStreamSessionStopResult","onGameStreamStreamingEvent","onGameStreamStreamStopped","onGameStreamStreamingQualityChanged","onGameStreamCustomMessage","onGameStreamStatsUpdate","onGameStreamMicCapture","eventDataElements","blur","msgKey","affirmLabelKey","denyLabelKey","sendClickEvent","InGame","GetOrCreateStreamerUIElement","onMessageIntroFinished","onMessageGetUIDataJSON","onMessageInitializeFinished","onMessageHideOSC","onload","enableMicrophone","disableMicrophone","vp","permissionName","stoppedSessionId","handleStreamStopped","StreamWarningCodeFromGs","handleStreamerKeydownEvent","pasteClipboardText","requirePasteDialog","pasteClipboardTextUsingDialog","pasteClipboardTextInternal","clipboard","readText","maxPasteBuffer","handleStreamerKeyupEvent","requestUserGestureToStartStreaming","dismissLabelKey","setVideoVolumeAndPlay","playPromise","onIntroFinished","enableDesktopOsc","initializeGamepadHandler","registerLongPressCallback","Start","registerKeyPressCallback","setupContainer","isFullscreenRequestRequired","isFullscreenRequested","fullscreenElement","Blocked","Active","Muted","NotFound","windowElementId","streamerContainerElement","videoContainerElem","autoplay","playsInline","disablePictureInPicture","styleElem","createTextNode","autocomplete","autocapitalize","caretColor","colorScheme","borderWidth","gscode","updateStreamStats","roundTripDelayMs","streamingFps","gameEngineFps","totalFrameLoss","totalPacketLoss","totalAvailableBandwidth","bandwidthPercentage","bandwidthUsed","boundingRect","statusBarHeight","NullStreamer","PlatformBase","Host","IsHostTestEnvironment","TelemetryHelper","platformHelper","mHelper","setTelemetrySessionId","doInitialize","AndroidTelemetryHelper","storedTelemetryStr","getAndClearStoredTelemetry","storedTelemetry","telemetryItem","NativeException","eventBody","fileName","stackTrace","telemetrySessionId","NullTelemetryHelper","RemoteLogger","isStreamConfigured","streamSessionId","streamSubSessionIds","platformLogger","mBuffer","mFileName","mLogOffset","mLogStreamInProgress","mLastFlushTimestamp","mPlatformLogController","mRemoteLoggerConfig","addToBuffer","flushRemoteLogAsync","flushRemoteLog","isFinal","logFile","streamLog","elapsedMs","waitMs","flushIntervalMs","final","logBuffer","logLine","bufferFlushLength","bufferLengthMax","BrowserRemoteLogger","hookConsole","unhookConsole","defaultError","defaultWarn","defaultInfo","defaultLog","defaultGroup","groupEnd","defaultGroupEnd","mStreamer","onNativeLog","CreateDevice","CreateRemoteLogger","CreateNetworkTest","CreateStreamer","telemetryHelper","CreateTelemetryHelper","setTelemetryHelper","initContext","__GFN_RUNTIME_ANDROID__","getLogController","getDevice","getStreamer","getNetworkTest","getTelemetryHelper","mCachedLanguageCode","mCachedLanguageData","getTranslations","flatten","translations","_flatten","keypath","new_keypath","loadTranslations","HTTP_REPLACEMENT_REGEX","SERVER_LATENCY_DB_NAME","ServerInfoServerType","mPlatform","skipLatencyBasedRouting","resolveServiceUrl","serverInfoResponse","defaultZone","serverType","getServerType","zones","addr","getOptimalZone","zoneTable","Nimbus","PC","GameStream","PCRoamingProxy","GameStreamRoamingProxy","CS","CloudStation","QS","QuadroStation","getKeyboardLayouts","localeCode","optimalServer","getCachedOptimalServer","updateOptimalServerCache","arrayWithSingleZone","fingerprint","serverList","serverLatencyDb","serverLatencyEntry","lowestLatencyServer","dbEntry","_extends","source","DEFAULT_COMMON_EVENT_ATTRIBUTES","GXTelemetry","_ref","_this2","_this3","_this4","commonEventAttributes","_ref$isProd","isProd","_ref$intervalDelay","intervalDelay","sendEvent","_ref2","_ref2$timestamp","sendEvents","queueEvent","_ref3","_ref3$timestamp","queuedEvents","startQueue","stopQueue","intervalID","flushQueue","overrideCommonEventsAttributes","override","STORED_CLIENT_EVENTS_KEY","STORED_STREAMER_EVENTS_KEY","Telemetry","mTelemetrySessionId","mSystemInfoGuid","streamerType","WebRTC","Native","mStoredUserId","mStoredIdpId","mStoredExternalUserId","mStoredGdprBehOptIn","mStoredGdprTechOptIn","mIsInitialized","mGridGxTelemetry","mEventDataUpdateCallbacks","mStreamerGxTelemetry","mGxTelemetry","mHeldTelemetry","mQueuedOp","onEulaAcceptanceUpdate","onUserUpdate","clientVer","deviceGdprTechOptIn","deviceGdprBehOptIn","clientVariant","deviceOSVersion","gdprFuncOptIn","intervalDelayMs","mTelemetryHelper","appInfoEvent","createAppInfoEvent","systemInfoEvent","createSystemInfoEvent","GxT","flushAllQueues","sendHeldTelemetry","dest","overrideSessionId","getGridEventsKey","getPendingGridEventsKey","ragnarokConfig","executeQueuedOps","teleInstance","isCommonEventDataEqual","data1","data2","allValues1","allValues2","dbKey","pendingDbKey","telemetryInstance","oldPendingEvents","storedEvents","storedEventAttributes","previousEventAttributes","eventsToSend","pendingEvents","storedEventsOp","pendingEventsOp","telemetryInst","storedEvent","heldData","exceptionSource","createExceptionEvent","exceptionEvent","onNativeTelemetryConfig","configStr","onNativeTelemetry","eventStr","Functional","Technical","Behavioral","flushTelemetry","backoffStrategy","backoffStrategyConfigurationBlob","serviceName","serviceUseCase","serviceSubUseCase","subUseCase","contentLength","xRequestId","userDefaultUiLanguage","exceptionType","profileName","dynamicResEnabled","aspectRatio","clickType","inputType","operations","ELEMENT_ID_OVERRIDES_READER","RetrieveOverrides","parent","OverridesDOMError","GetOrCreateIFrameElement","GFN_STORAGE_EULA_VERSION_KEY","mEulaVersionAccepted","mUser","setEulaAccepted","onUserConsentsUpdated","onUserUpdated","FeedbackFileType","Feedback","feedbackSessionId","newFeedbackSession","feedbackName","feedbackProtocol","feedbackSchemaVer","feedbackSysVer","fileList","ObfuscatedLog","clientTs","TelemetryFeedbackFailed","initialOffset","failures","maxBufferLength","maxBufferSize","currentBuffer","currentBlob","mFeedbackSessionId","logOffset","feedbackSpan","closeSpan","SpanTagNames","DistributedTracing","lightstep","tracerConfig","mTracer","mCommonTags","ServiceVersion","ServiceType","AppName","DeviceId","ClientOs","ClientOsName","ClientOsVersion","Locale","VpcId","setCountryCode","countryCode","CountryCode","urlObj","tracingParams","injectSpanHttpHeaders","tracingParamsStr","getFormattedUrlForHttpPopupSpan","searchParamsStr","spanName","childSpan","carrierHeaders","handleHttpError","ErrorDetails","HttpUrl","handleHttpPopupError","HttpErrorText","handleHttpSuccess","httpRequester","RemoteConfig","getAndUpdateRemoteConfig","CloudVariable","variable","mCachedVariable","mVariablePromise","activity","mVariableResolve","CloudVariableService","mGuestModeClientConfigVariable","mClipboardPasteFeatureConfigVariable","mGuestModeCloudVariables","mCloudFeatureConfigss","updateCloudVariableSet","updateFeatureConfigs","varList","cloudVariablesResult","GamepadTickIntervalMs","GamepadHandler","mGamepads","mTickIntervalMs","mGamepadLongPressCallbacks","mGamepadKeyPressCallbacks","onGamepadConnection","cbList","buttonTsList","pressed","mStartTime","mRequestHandle","tick","updateGamepadState","buttonIndex","DEFAULT_GUESTMODE_CONFIG","hideAppStartButton","isIGOEnabled","isPostSessionTipsEnabled","isStreamingTimerEnabled","disableCloseOnStreamExit","forceTouchModeSettings","launchStreamInTouchFriendlyMode","useOsc","isGuestAppFlow","shortcutControls","micIconPosition","statisticsPosition","networkStatusIndicatorPosition","virtualKeyboard","virtualGamepad","IsWhitelabelingEnabled","GuestMode","cloudVariableService","mGuestFlowClientConfig","mGuestModeConfig","mGuestModeCloudVariable","onCloudVariableUpdate","updateGuestFlowConfig","cloudVar","cmsIdConfig","defaultPartnerConfig","allowedRedirectUrls","guestModeConfig","DEFAULT_CLIPBOARD_CONFIG","CloudFeatureConfigs","mClipboardPasteConfig","mCloudVariableService","mClipboardPasteConfigCloudVariable","onClipboardPasteCloudVariableUpdate","API","validateInitialization","mServer","mConfigurationPromise","mCloudVariables","mCloudFeatureConfigs","initCtx","initializables"],"sourceRoot":""}