{"version":3,"file":"amazon-chime-sdk-v3.21.min.js","sources":["../node_modules/amazon-chime-sdk-js/build/videostreamidset/DefaultVideoStreamIdSet.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/AllHighestVideoBandwidthPolicy.js","../node_modules/amazon-chime-sdk-js/build/applicationmetadata/ApplicationMetadata.js","../node_modules/amazon-chime-sdk-js/build/scheduler/TimeoutScheduler.js","../node_modules/amazon-chime-sdk-js/build/scheduler/AsyncScheduler.js","../node_modules/amazon-chime-sdk-js/build/statscollector/VideoLogEvent.js","../node_modules/amazon-chime-sdk-js/build/logger/LogLevel.js","../node_modules/amazon-chime-sdk-js/build/task/OnceTask.js","../node_modules/amazon-chime-sdk-js/build/task/TaskStatus.js","../node_modules/amazon-chime-sdk-js/build/task/BaseTask.js","../node_modules/amazon-chime-sdk-js/build/task/AttachMediaInputTask.js","../node_modules/amazon-chime-sdk-js/build/attendee/Attendee.js","../node_modules/amazon-chime-sdk-js/build/statscollector/AudioLogEvent.js","../node_modules/detect-browser/es/index.js","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/amazon-chime-sdk-js/build/browserbehavior/DefaultBrowserBehavior.js","../node_modules/amazon-chime-sdk-js/build/audioprofile/AudioProfile.js","../node_modules/amazon-chime-sdk-js/build/audiovideocontroller/AudioVideoControllerState.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/BackgroundBlurStrength.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/fetch.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/loader.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/support.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/ModelSpecBuilder.js","../node_modules/amazon-chime-sdk-js/build/versioning/version.js","../node_modules/amazon-chime-sdk-js/build/versioning/Versioning.js","../node_modules/amazon-chime-sdk-js/build/backgroundfilter/BackgroundFilterVideoFrameProcessor.js","../node_modules/amazon-chime-sdk-js/build/logger/ConsoleLogger.js","../node_modules/amazon-chime-sdk-js/build/videoframeprocessor/NoOpVideoFrameProcessor.js","../node_modules/amazon-chime-sdk-js/build/videoframeprocessor/CanvasVideoFrameBuffer.js","../node_modules/amazon-chime-sdk-js/build/backgroundfilter/BackgroundFilterFrameCounter.js","../node_modules/amazon-chime-sdk-js/build/backgroundfilter/BackgroundFilterProcessor.js","../node_modules/amazon-chime-sdk-js/build/backgroundfilter/BackgroundFilterVideoFrameProcessorDelegate.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/BackgroundBlurVideoFrameProcessorDelegate.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/BackgroundBlurProcessorProvided.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/BackgroundBlurProcessorBuiltIn.js","../node_modules/amazon-chime-sdk-js/build/backgroundblurprocessor/BackgroundBlurVideoFrameProcessor.js","../node_modules/amazon-chime-sdk-js/build/backgroundreplacementprocessor/BackgroundReplacementVideoFrameProcessorDelegate.js","../node_modules/amazon-chime-sdk-js/build/backgroundreplacementprocessor/BackgroundReplacementFilter.js","../node_modules/amazon-chime-sdk-js/build/backgroundreplacementprocessor/BackgroundReplacementVideoFrameProcessor.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/BaseConnectionHealthPolicy.js","../node_modules/amazon-chime-sdk-js/build/videouplinkbandwidthpolicy/BitrateParameters.js","../node_modules/amazon-chime-sdk-js/build/cspmonitor/CSPMonitor.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckAudioConnectivityFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckAudioInputFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckAudioOutputFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckCameraResolutionFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckContentShareConnectivityFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckNetworkTCPConnectivityFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckNetworkUDPConnectivityFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckVideoConnectivityFeedback.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/CheckVideoInputFeedback.js","../node_modules/amazon-chime-sdk-js/build/task/CleanRestartedSessionTask.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientEventType.js","../node_modules/amazon-chime-sdk-js/build/task/CleanStoppedSessionTask.js","../node_modules/@protobufjs/aspromise/index.js","../node_modules/@protobufjs/base64/index.js","../node_modules/@protobufjs/eventemitter/index.js","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/inquire/index.js","../node_modules/@protobufjs/utf8/index.js","../node_modules/@protobufjs/pool/index.js","../node_modules/protobufjs/src/util/longbits.js","../node_modules/protobufjs/src/util/minimal.js","../node_modules/protobufjs/src/writer.js","../node_modules/protobufjs/src/writer_buffer.js","../node_modules/protobufjs/src/reader.js","../node_modules/protobufjs/src/reader_buffer.js","../node_modules/protobufjs/src/rpc/service.js","../node_modules/protobufjs/src/rpc.js","../node_modules/protobufjs/src/roots.js","../node_modules/protobufjs/src/index-minimal.js","../node_modules/protobufjs/minimal.js","../node_modules/amazon-chime-sdk-js/build/signalingprotocol/SignalingProtocol.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/ClientMetricReportDirection.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/ClientMetricReportMediaType.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/GlobalMetricReport.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/ClientMetricReport.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/ClientVideoStreamReceivingReport.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/ConnectionHealthData.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/ConnectionHealthPolicyConfiguration.js","../node_modules/amazon-chime-sdk-js/build/contentsharecontroller/ContentShareConstants.js","../node_modules/amazon-chime-sdk-js/build/scheduler/IntervalScheduler.js","../node_modules/amazon-chime-sdk-js/build/mediadevicefactory/MediaDeviceProxyHandler.js","../node_modules/amazon-chime-sdk-js/build/mediadevicefactory/DefaultMediaDeviceFactory.js","../node_modules/amazon-chime-sdk-js/build/utils/PromiseQueue.js","../node_modules/amazon-chime-sdk-js/build/utils/Types.js","../node_modules/amazon-chime-sdk-js/build/videoframeprocessor/DefaultVideoFrameProcessorTimer.js","../node_modules/amazon-chime-sdk-js/build/videoframeprocessor/DefaultVideoFrameProcessorPipeline.js","../node_modules/amazon-chime-sdk-js/build/videoframeprocessor/DefaultVideoTransformDevice.js","../node_modules/amazon-chime-sdk-js/build/modality/DefaultModality.js","../node_modules/amazon-chime-sdk-js/build/videotile/VideoTileState.js","../node_modules/amazon-chime-sdk-js/build/videotile/DefaultVideoTile.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/AudioTransformDevice.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/DeviceSelection.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/GetUserMediaError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/NotFoundError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/NotReadableError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/OverconstrainedError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/PermissionDeniedError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/TypeError.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/VideoQualitySettings.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/VideoTransformDevice.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/DefaultDeviceController.js","../node_modules/amazon-chime-sdk-js/build/contentsharecontroller/ContentShareMediaStreamBroker.js","../node_modules/amazon-chime-sdk-js/build/task/CreatePeerConnectionTask.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionStatusCode.js","../node_modules/amazon-chime-sdk-js/build/sdp/SDPCandidateType.js","../node_modules/amazon-chime-sdk-js/build/sdp/SDPMediaSection.js","../node_modules/amazon-chime-sdk-js/build/sdp/VideoCodecCapability.js","../node_modules/amazon-chime-sdk-js/build/sdp/SDP.js","../node_modules/amazon-chime-sdk-js/build/task/CreateSDPTask.js","../node_modules/amazon-chime-sdk-js/build/datamessage/DataMessage.js","../node_modules/amazon-chime-sdk-js/build/activespeakerdetector/DefaultActiveSpeakerDetector.js","../node_modules/amazon-chime-sdk-js/build/activespeakerpolicy/DefaultActiveSpeakerPolicy.js","../node_modules/amazon-chime-sdk-js/build/audiomixcontroller/DefaultAudioMixController.js","../node_modules/amazon-chime-sdk-js/build/connectionmonitor/SignalingAndMetricsConnectionMonitor.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionStatus.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionVideoAvailability.js","../node_modules/amazon-chime-sdk-js/build/pingpong/DefaultPingPong.js","../node_modules/amazon-chime-sdk-js/build/transcript/Transcript.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptionStatus.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptionStatusType.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptItemType.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptEvent.js","../node_modules/amazon-chime-sdk-js/build/transcript/DefaultTranscriptionController.js","../node_modules/amazon-chime-sdk-js/build/realtimecontroller/RealtimeState.js","../node_modules/amazon-chime-sdk-js/build/realtimecontroller/RealtimeVolumeIndicator.js","../node_modules/amazon-chime-sdk-js/build/realtimecontroller/DefaultRealtimeController.js","../node_modules/amazon-chime-sdk-js/build/sessionstatecontroller/SessionStateControllerAction.js","../node_modules/amazon-chime-sdk-js/build/sessionstatecontroller/SessionStateControllerDeferPriority.js","../node_modules/amazon-chime-sdk-js/build/sessionstatecontroller/SessionStateControllerState.js","../node_modules/amazon-chime-sdk-js/build/sessionstatecontroller/SessionStateControllerTransitionResult.js","../node_modules/amazon-chime-sdk-js/build/sessionstatecontroller/DefaultSessionStateController.js","../node_modules/amazon-chime-sdk-js/build/utils/Utils.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoQualityAdaptationPreference.js","../node_modules/amazon-chime-sdk-js/build/websocketadapter/WebSocketReadyState.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/ServerSideNetworkAdaption.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientEvent.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/DefaultSignalingClient.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientVideoSubscriptionConfiguration.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/RedundantAudioRecoveryMetricReport.js","../node_modules/amazon-chime-sdk-js/build/clientmetricreport/StreamMetricReport.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionLifecycleEvent.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionLifecycleEventCondition.js","../node_modules/amazon-chime-sdk-js/build/statscollector/StatsCollector.js","../node_modules/amazon-chime-sdk-js/build/task/FinishGatheringICECandidatesTask.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionTURNCredentials.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientJoin.js","../node_modules/amazon-chime-sdk-js/build/task/JoinAndReceiveIndexTask.js","../node_modules/amazon-chime-sdk-js/build/task/LeaveAndReceiveLeaveAckTask.js","../node_modules/amazon-chime-sdk-js/build/task/ListenForVolumeIndicatorsTask.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/ReconnectionHealthPolicy.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/SendingAudioFailureConnectionHealthPolicy.js","../node_modules/amazon-chime-sdk-js/build/connectionhealthpolicy/UnusableAudioWarningConnectionHealthPolicy.js","../node_modules/amazon-chime-sdk-js/build/task/MonitorTask.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientConnectionRequest.js","../node_modules/amazon-chime-sdk-js/build/task/OpenSignalingConnectionTask.js","../node_modules/amazon-chime-sdk-js/build/task/ParallelGroupTask.js","../node_modules/amazon-chime-sdk-js/build/task/PromoteToPrimaryMeetingTask.js","../node_modules/amazon-chime-sdk-js/build/task/ReceiveAudioInputTask.js","../node_modules/amazon-chime-sdk-js/build/task/ReceiveRemoteVideoPauseResumeTask.js","../node_modules/amazon-chime-sdk-js/build/task/ReceiveVideoInputTask.js","../node_modules/amazon-chime-sdk-js/build/task/ReceiveVideoStreamIndexTask.js","../node_modules/amazon-chime-sdk-js/build/task/SendAndReceiveDataMessagesTask.js","../node_modules/amazon-chime-sdk-js/build/task/SerialGroupTask.js","../node_modules/amazon-chime-sdk-js/build/task/SetLocalDescriptionTask.js","../node_modules/amazon-chime-sdk-js/build/task/SetRemoteDescriptionTask.js","../node_modules/pako/lib/zlib/trees.js","../node_modules/pako/lib/zlib/adler32.js","../node_modules/pako/lib/zlib/crc32.js","../node_modules/pako/lib/zlib/messages.js","../node_modules/pako/lib/zlib/constants.js","../node_modules/pako/lib/zlib/deflate.js","../node_modules/pako/lib/utils/common.js","../node_modules/pako/lib/utils/strings.js","../node_modules/pako/lib/zlib/zstream.js","../node_modules/pako/lib/deflate.js","../node_modules/pako/lib/zlib/inffast.js","../node_modules/pako/lib/zlib/inftrees.js","../node_modules/pako/lib/zlib/inflate.js","../node_modules/pako/lib/zlib/gzheader.js","../node_modules/pako/lib/inflate.js","../node_modules/pako/index.js","../node_modules/amazon-chime-sdk-js/build/sdp/ZLIBTextCompressor.js","../node_modules/amazon-chime-sdk-js/build/signalingclient/SignalingClientSubscribe.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoPreferences.js","../node_modules/amazon-chime-sdk-js/build/task/SubscribeAndReceiveSubscribeAckTask.js","../node_modules/amazon-chime-sdk-js/build/task/TimeoutTask.js","../node_modules/amazon-chime-sdk-js/build/task/WaitForAttendeePresenceTask.js","../node_modules/amazon-chime-sdk-js/build/redundantaudioencoder/RedundantAudioEncoder.js","../node_modules/amazon-chime-sdk-js/build/redundantaudioencoderworkercode/RedundantAudioEncoderWorkerCode.js","../node_modules/amazon-chime-sdk-js/build/transceivercontroller/DefaultTransceiverController.js","../node_modules/amazon-chime-sdk-js/build/transceivercontroller/SimulcastTransceiverController.js","../node_modules/amazon-chime-sdk-js/build/transceivercontroller/SimulcastContentShareTransceiverController.js","../node_modules/amazon-chime-sdk-js/build/transceivercontroller/VideoOnlyTransceiverController.js","../node_modules/amazon-chime-sdk-js/build/videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/TargetDisplaySize.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoPreference.js","../node_modules/amazon-chime-sdk-js/build/videosource/VideoSource.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoPriorityBasedPolicyConfig.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoPriorityBasedPolicy.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/VideoAdaptiveProbePolicy.js","../node_modules/amazon-chime-sdk-js/build/videostreamindex/VideoStreamDescription.js","../node_modules/amazon-chime-sdk-js/build/videostreamindex/DefaultVideoStreamIndex.js","../node_modules/amazon-chime-sdk-js/build/videostreamindex/SimulcastVideoStreamIndex.js","../node_modules/amazon-chime-sdk-js/build/devicepixelratiomonitor/DefaultDevicePixelRatioMonitor.js","../node_modules/amazon-chime-sdk-js/build/devicepixelratiosource/DevicePixelRatioWindowSource.js","../node_modules/amazon-chime-sdk-js/build/videotilecontroller/DefaultVideoTileController.js","../node_modules/amazon-chime-sdk-js/build/videotilefactory/DefaultVideoTileFactory.js","../node_modules/amazon-chime-sdk-js/build/simulcastlayers/SimulcastLayers.js","../node_modules/amazon-chime-sdk-js/build/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy.js","../node_modules/amazon-chime-sdk-js/build/videouplinkbandwidthpolicy/NScaleVideoUplinkBandwidthPolicy.js","../node_modules/amazon-chime-sdk-js/build/volumeindicatoradapter/DefaultVolumeIndicatorAdapter.js","../node_modules/amazon-chime-sdk-js/build/audiovideocontroller/DefaultAudioVideoController.js","../node_modules/amazon-chime-sdk-js/build/audiovideofacade/DefaultAudioVideoFacade.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingFeatures.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionCredentials.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionURLs.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/MeetingSessionConfiguration.js","../node_modules/amazon-chime-sdk-js/build/videodownlinkbandwidthpolicy/NoVideoDownlinkBandwidthPolicy.js","../node_modules/amazon-chime-sdk-js/build/videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicyForContentShare.js","../node_modules/amazon-chime-sdk-js/build/contentsharecontroller/DefaultContentShareController.js","../node_modules/amazon-chime-sdk-js/build/destroyable/Destroyable.js","../node_modules/amazon-chime-sdk-js/build/eventbufferconfiguration/EventBufferConfiguration.js","../node_modules/amazon-chime-sdk-js/build/eventingestionconfiguration/EventIngestionConfiguration.js","../node_modules/amazon-chime-sdk-js/build/backoff/FullJitterBackoff.js","../node_modules/amazon-chime-sdk-js/build/useragentparser/DefaultUserAgentParser.js","../node_modules/amazon-chime-sdk-js/build/eventbuffer/InMemoryJSONEventBuffer.js","../node_modules/amazon-chime-sdk-js/build/eventreporter/DefaultMeetingEventReporter.js","../node_modules/amazon-chime-sdk-js/build/eventsclientconfiguration/MeetingEventsClientConfiguration.js","../node_modules/amazon-chime-sdk-js/build/eventcontroller/flattenEventAttributes.js","../node_modules/amazon-chime-sdk-js/build/eventcontroller/DefaultEventController.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/MeetingReadinessCheckerConfiguration.js","../node_modules/amazon-chime-sdk-js/build/meetingreadinesschecker/DefaultMeetingReadinessChecker.js","../node_modules/amazon-chime-sdk-js/build/reconnectcontroller/DefaultReconnectController.js","../node_modules/amazon-chime-sdk-js/build/websocketadapter/DefaultWebSocketAdapter.js","../node_modules/amazon-chime-sdk-js/build/meetingsession/DefaultMeetingSession.js","../node_modules/@smithy/protocol-http/dist-es/extensions/httpExtensionConfiguration.js","../node_modules/@smithy/types/dist-es/auth/auth.js","../node_modules/@smithy/types/dist-es/auth/HttpApiKeyAuth.js","../node_modules/@smithy/types/dist-es/endpoint.js","../node_modules/@smithy/types/dist-es/extensions/checksum.js","../node_modules/@smithy/types/dist-es/http.js","../node_modules/@smithy/types/dist-es/middleware.js","../node_modules/@smithy/types/dist-es/profile.js","../node_modules/@smithy/types/dist-es/transfer.js","../node_modules/@smithy/protocol-http/dist-es/httpRequest.js","../node_modules/@smithy/protocol-http/dist-es/httpResponse.js","../node_modules/@aws-sdk/middleware-host-header/dist-es/index.js","../node_modules/@aws-sdk/middleware-logger/dist-es/loggerMiddleware.js","../node_modules/@aws-sdk/middleware-recursion-detection/dist-es/index.js","../node_modules/@smithy/property-provider/dist-es/memoize.js","../node_modules/tslib/tslib.es6.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/pureJs.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/whatwgEncodingApi.js","../node_modules/@aws-sdk/util-utf8-browser/dist-es/index.js","../node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util/build/convertToBuffer.js","../node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util/build/isEmptyData.js","../node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util/build/numToUint8.js","../node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util/build/uint32ArrayFrom.js","../node_modules/@aws-crypto/crc32/node_modules/@aws-crypto/util/build/index.js","../node_modules/@aws-crypto/crc32/build/aws_crc32.js","../node_modules/@aws-crypto/crc32/build/index.js","../node_modules/@smithy/util-hex-encoding/dist-es/index.js","../node_modules/@smithy/eventstream-codec/dist-es/Int64.js","../node_modules/@smithy/eventstream-codec/dist-es/HeaderMarshaller.js","../node_modules/@smithy/util-middleware/dist-es/getSmithyContext.js","../node_modules/@smithy/util-middleware/dist-es/normalizeProvider.js","../node_modules/@smithy/util-utf8/dist-es/fromUtf8.browser.js","../node_modules/@smithy/util-utf8/dist-es/toUint8Array.js","../node_modules/@smithy/util-utf8/dist-es/toUtf8.browser.js","../node_modules/@smithy/signature-v4/dist-es/constants.js","../node_modules/@smithy/signature-v4/dist-es/credentialDerivation.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalHeaders.js","../node_modules/@smithy/util-uri-escape/dist-es/escape-uri.js","../node_modules/@smithy/signature-v4/dist-es/getCanonicalQuery.js","../node_modules/@smithy/is-array-buffer/dist-es/index.js","../node_modules/@smithy/signature-v4/dist-es/getPayloadHash.js","../node_modules/@smithy/signature-v4/dist-es/headerUtil.js","../node_modules/@smithy/signature-v4/dist-es/cloneRequest.js","../node_modules/@smithy/signature-v4/dist-es/moveHeadersToQuery.js","../node_modules/@smithy/signature-v4/dist-es/prepareRequest.js","../node_modules/@smithy/signature-v4/dist-es/utilDate.js","../node_modules/@smithy/signature-v4/dist-es/SignatureV4.js","../node_modules/@aws-sdk/middleware-signing/dist-es/awsAuthConfiguration.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/getSkewCorrectedDate.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/isClockSkewed.js","../node_modules/@aws-sdk/middleware-signing/dist-es/utils/getUpdatedSystemClockOffset.js","../node_modules/@aws-sdk/middleware-signing/dist-es/awsAuthMiddleware.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/configurations.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isIpAddress.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isValidHostLabel.js","../node_modules/@smithy/util-endpoints/dist-es/utils/customEndpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/debug/debugId.js","../node_modules/@smithy/util-endpoints/dist-es/debug/toDebugString.js","../node_modules/@smithy/util-endpoints/dist-es/types/EndpointError.js","../node_modules/@smithy/util-endpoints/dist-es/lib/booleanEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttrPathList.js","../node_modules/@smithy/util-endpoints/dist-es/lib/getAttr.js","../node_modules/@smithy/util-endpoints/dist-es/lib/isSet.js","../node_modules/@smithy/util-endpoints/dist-es/lib/not.js","../node_modules/@smithy/util-endpoints/dist-es/lib/parseURL.js","../node_modules/@smithy/util-endpoints/dist-es/lib/stringEquals.js","../node_modules/@smithy/util-endpoints/dist-es/lib/substring.js","../node_modules/@smithy/util-endpoints/dist-es/lib/uriEncode.js","../node_modules/@smithy/util-endpoints/dist-es/utils/endpointFunctions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTemplate.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getReferenceValue.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateExpression.js","../node_modules/@smithy/util-endpoints/dist-es/utils/callFunction.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateCondition.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateConditions.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointHeaders.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperty.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointProperties.js","../node_modules/@smithy/util-endpoints/dist-es/utils/getEndpointUrl.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateEndpointRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateErrorRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateTreeRule.js","../node_modules/@smithy/util-endpoints/dist-es/utils/evaluateRules.js","../node_modules/@smithy/util-endpoints/dist-es/resolveEndpoint.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/isVirtualHostableS3Bucket.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/parseArn.js","../node_modules/@aws-sdk/util-endpoints/dist-es/lib/aws/partition.js","../node_modules/@aws-sdk/util-endpoints/dist-es/aws.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/constants.js","../node_modules/@aws-sdk/middleware-user-agent/dist-es/user-agent-middleware.js","../node_modules/@smithy/util-config-provider/dist-es/types.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseDualstackEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/endpointsConfig/NodeUseFipsEndpointConfigOptions.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/isFipsRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/getRealRegion.js","../node_modules/@smithy/config-resolver/dist-es/regionConfig/resolveRegionConfig.js","../node_modules/@smithy/middleware-content-length/dist-es/index.js","../node_modules/@smithy/middleware-endpoint/dist-es/service-customizations/s3.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/createConfigValueProvider.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromConfig.browser.js","../node_modules/@smithy/querystring-parser/dist-es/index.js","../node_modules/@smithy/url-parser/dist-es/index.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/toEndpointV1.js","../node_modules/@smithy/middleware-endpoint/dist-es/adaptors/getEndpointFromInstructions.js","../node_modules/@smithy/middleware-endpoint/dist-es/endpointMiddleware.js","../node_modules/@smithy/middleware-serde/dist-es/deserializerMiddleware.js","../node_modules/@smithy/middleware-serde/dist-es/serializerMiddleware.js","../node_modules/@smithy/middleware-serde/dist-es/serdePlugin.js","../node_modules/@smithy/middleware-endpoint/dist-es/getEndpointPlugin.js","../node_modules/@smithy/middleware-endpoint/dist-es/resolveEndpointConfig.js","../node_modules/@smithy/util-retry/dist-es/config.js","../node_modules/@smithy/service-error-classification/dist-es/constants.js","../node_modules/@smithy/service-error-classification/dist-es/index.js","../node_modules/@smithy/util-retry/dist-es/DefaultRateLimiter.js","../node_modules/@smithy/util-retry/dist-es/constants.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryBackoffStrategy.js","../node_modules/@smithy/util-retry/dist-es/defaultRetryToken.js","../node_modules/@smithy/util-retry/dist-es/StandardRetryStrategy.js","../node_modules/@smithy/util-retry/dist-es/AdaptiveRetryStrategy.js","../node_modules/uuid/dist/esm-browser/rng.js","../node_modules/uuid/dist/esm-browser/regex.js","../node_modules/uuid/dist/esm-browser/validate.js","../node_modules/uuid/dist/esm-browser/stringify.js","../node_modules/uuid/dist/esm-browser/v4.js","../node_modules/@smithy/middleware-retry/dist-es/util.js","../node_modules/@smithy/middleware-retry/dist-es/configurations.js","../node_modules/@smithy/smithy-client/dist-es/NoOpLogger.js","../node_modules/@smithy/middleware-stack/dist-es/MiddlewareStack.js","../node_modules/@smithy/smithy-client/dist-es/client.js","../node_modules/@smithy/util-base64/dist-es/constants.browser.js","../node_modules/@smithy/util-base64/dist-es/fromBase64.browser.js","../node_modules/@smithy/util-base64/dist-es/toBase64.browser.js","../node_modules/@smithy/util-stream/dist-es/blob/transforms.js","../node_modules/@smithy/util-stream/dist-es/blob/Uint8ArrayBlobAdapter.js","../node_modules/@smithy/querystring-builder/dist-es/index.js","../node_modules/@smithy/fetch-http-handler/dist-es/request-timeout.js","../node_modules/@smithy/fetch-http-handler/dist-es/fetch-http-handler.js","../node_modules/@smithy/fetch-http-handler/dist-es/stream-collector.js","../node_modules/@smithy/smithy-client/dist-es/collect-stream-body.js","../node_modules/@smithy/smithy-client/dist-es/command.js","../node_modules/@smithy/smithy-client/dist-es/constants.js","../node_modules/@smithy/smithy-client/dist-es/create-aggregated-client.js","../node_modules/@smithy/smithy-client/dist-es/parse-utils.js","../node_modules/@smithy/smithy-client/dist-es/date-utils.js","../node_modules/@smithy/smithy-client/dist-es/exceptions.js","../node_modules/@smithy/smithy-client/dist-es/default-error-handler.js","../node_modules/@smithy/smithy-client/dist-es/defaults-mode.js","../node_modules/@smithy/smithy-client/dist-es/extensions/checksum.js","../node_modules/@smithy/smithy-client/dist-es/extensions/retry.js","../node_modules/@smithy/smithy-client/dist-es/extensions/defaultExtensionConfiguration.js","../node_modules/@smithy/smithy-client/dist-es/extended-encode-uri-component.js","../node_modules/@smithy/smithy-client/dist-es/lazy-json.js","../node_modules/@smithy/smithy-client/dist-es/object-mapping.js","../node_modules/@smithy/smithy-client/dist-es/resolve-path.js","../node_modules/@smithy/smithy-client/dist-es/serde-json.js","../node_modules/@smithy/middleware-retry/dist-es/isStreamingPayload/isStreamingPayload.browser.js","../node_modules/@smithy/middleware-retry/dist-es/retryMiddleware.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/endpoint/EndpointParameters.js","../node_modules/@aws-crypto/sha256-browser/build/isEmptyData.js","../node_modules/@aws-crypto/sha256-browser/build/constants.js","../node_modules/@aws-sdk/util-locate-window/dist-es/index.js","../node_modules/@aws-crypto/sha256-browser/build/ie11Sha256.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/util/build/convertToBuffer.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/util/build/isEmptyData.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/util/build/numToUint8.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/util/build/uint32ArrayFrom.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/util/build/index.js","../node_modules/@aws-crypto/sha256-browser/build/webCryptoSha256.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/sha256-js/build/constants.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/sha256-js/build/RawSha256.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/sha256-js/build/jsSha256.js","../node_modules/@aws-crypto/sha256-browser/node_modules/@aws-crypto/sha256-js/build/index.js","../node_modules/@aws-crypto/supports-web-crypto/build/supportsWebCrypto.js","../node_modules/@aws-crypto/supports-web-crypto/build/index.js","../node_modules/@aws-crypto/ie11-detection/build/CryptoOperation.js","../node_modules/@aws-crypto/ie11-detection/build/Key.js","../node_modules/@aws-crypto/ie11-detection/build/KeyOperation.js","../node_modules/@aws-crypto/ie11-detection/build/MsSubtleCrypto.js","../node_modules/@aws-crypto/ie11-detection/build/MsWindow.js","../node_modules/@aws-crypto/ie11-detection/build/index.js","../node_modules/@aws-crypto/sha256-browser/build/crossPlatformSha256.js","../node_modules/@aws-crypto/sha256-browser/build/index.js","../node_modules/bowser/src/constants.js","../node_modules/bowser/src/utils.js","../node_modules/bowser/src/parser-browsers.js","../node_modules/bowser/src/parser-os.js","../node_modules/bowser/src/parser-platforms.js","../node_modules/bowser/src/parser-engines.js","../node_modules/bowser/src/parser.js","../node_modules/bowser/src/bowser.js","../node_modules/@aws-sdk/util-user-agent-browser/dist-es/index.js","../node_modules/@smithy/invalid-dependency/dist-es/invalidProvider.js","../node_modules/@smithy/util-body-length-browser/dist-es/calculateBodyLength.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/endpoint/ruleset.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/endpoint/endpointResolver.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/runtimeConfig.shared.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/constants.js","../node_modules/@smithy/util-defaults-mode-browser/dist-es/resolveDefaultsModeConfig.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/runtimeConfig.browser.js","../node_modules/@aws-sdk/region-config-resolver/dist-es/extensions/index.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/runtimeExtensions.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/ChimeSDKMessagingClient.js","../node_modules/@smithy/core/dist-es/protocols/requestBuilder.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemeEndpointRuleSetPlugin.js","../node_modules/@smithy/core/dist-es/middleware-http-auth-scheme/getHttpAuthSchemePlugin.js","../node_modules/@smithy/core/dist-es/middleware-http-signing/getHttpSigningMiddleware.js","../node_modules/@smithy/core/dist-es/pagination/createPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/models/ChimeSDKMessagingServiceException.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/models/models_0.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/protocols/Aws_restJson1.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/AssociateChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/BatchCreateChannelMembershipCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ChannelFlowCallbackCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/CreateChannelBanCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/CreateChannelCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/CreateChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/CreateChannelMembershipCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/CreateChannelModeratorCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelBanCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelMembershipCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelMessageCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteChannelModeratorCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DeleteMessagingStreamingConfigurationsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelBanCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelMembershipCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelMembershipForAppInstanceUserCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelModeratedByAppInstanceUserCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DescribeChannelModeratorCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/DisassociateChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/GetChannelMembershipPreferencesCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/GetChannelMessageCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/GetChannelMessageStatusCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/GetMessagingSessionEndpointCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/GetMessagingStreamingConfigurationsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelBansCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelFlowsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelMembershipsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelMembershipsForAppInstanceUserCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelMessagesCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelModeratorsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelsAssociatedWithChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListChannelsModeratedByAppInstanceUserCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListSubChannelsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/ListTagsForResourceCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/PutChannelExpirationSettingsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/PutChannelMembershipPreferencesCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/PutMessagingStreamingConfigurationsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/RedactChannelMessageCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/SearchChannelsCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/SendChannelMessageCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/TagResourceCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/UntagResourceCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/UpdateChannelCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/UpdateChannelFlowCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/UpdateChannelMessageCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/commands/UpdateChannelReadMarkerCommand.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/ChimeSDKMessaging.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelBansPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelFlowsPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelMembershipsForAppInstanceUserPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelMembershipsPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelMessagesPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelModeratorsPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelsAssociatedWithChannelFlowPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelsModeratedByAppInstanceUserPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListChannelsPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/ListSubChannelsPaginator.js","../node_modules/@aws-sdk/client-chime-sdk-messaging/dist-es/pagination/SearchChannelsPaginator.js","../node_modules/amazon-chime-sdk-js/build/message/Message.js","../node_modules/@aws-crypto/sha256-js/build/constants.js","../node_modules/@aws-crypto/sha256-js/build/RawSha256.js","../node_modules/@aws-crypto/util/build/convertToBuffer.js","../node_modules/@aws-crypto/util/build/isEmptyData.js","../node_modules/@aws-crypto/util/build/numToUint8.js","../node_modules/@aws-crypto/util/build/uint32ArrayFrom.js","../node_modules/@aws-crypto/util/build/index.js","../node_modules/@aws-crypto/sha256-js/build/jsSha256.js","../node_modules/@aws-crypto/sha256-js/build/index.js","../node_modules/@aws-sdk/util-hex-encoding/dist-es/index.js","../node_modules/amazon-chime-sdk-js/build/sigv4/DefaultSigV4.js","../node_modules/amazon-chime-sdk-js/build/messagingsession/PrefetchOn.js","../node_modules/amazon-chime-sdk-js/build/messagingsession/DefaultMessagingSession.js","../node_modules/amazon-chime-sdk-js/build/backoff/FullJitterLimitedBackoff.js","../node_modules/amazon-chime-sdk-js/build/backoff/FullJitterBackoffFactory.js","../node_modules/amazon-chime-sdk-js/build/logger/Log.js","../node_modules/amazon-chime-sdk-js/build/messagingsession/MessagingSessionConfiguration.js","../node_modules/amazon-chime-sdk-js/build/logger/MultiLogger.js","../node_modules/amazon-chime-sdk-js/build/logger/NoOpLogger.js","../node_modules/amazon-chime-sdk-js/build/logger/NoOpDebugLogger.js","../node_modules/amazon-chime-sdk-js/build/mediastreambroker/NoOpMediaStreamBroker.js","../node_modules/amazon-chime-sdk-js/build/audiovideocontroller/NoOpAudioVideoController.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/NoOpDeviceController.js","../node_modules/amazon-chime-sdk-js/build/eventreporter/NoOpEventReporter.js","../node_modules/amazon-chime-sdk-js/build/task/NoOpTask.js","../node_modules/amazon-chime-sdk-js/build/videoelementfactory/NoOpVideoElementFactory.js","../node_modules/amazon-chime-sdk-js/build/videouplinkbandwidthpolicy/NoVideoUplinkBandwidthPolicy.js","../node_modules/amazon-chime-sdk-js/build/logger/POSTLogger.js","../node_modules/amazon-chime-sdk-js/build/messagingsession/PrefetchSortBy.js","../node_modules/amazon-chime-sdk-js/build/realtimecontroller/RealtimeAttendeePositionInFrame.js","../node_modules/amazon-chime-sdk-js/build/task/RunnableTask.js","../node_modules/amazon-chime-sdk-js/build/devicecontroller/SingleNodeAudioTransformDevice.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptAlternative.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptEntity.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptItem.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptLanguageWithScore.js","../node_modules/amazon-chime-sdk-js/build/transcript/TranscriptResult.js","../node_modules/amazon-chime-sdk-js/build/videofx/DeferredPromise.js","../node_modules/amazon-chime-sdk-js/build/videofx/VideoFxConstants.js","../node_modules/amazon-chime-sdk-js/build/videofx/VideoFxCanvasOpsManager.js","../node_modules/amazon-chime-sdk-js/build/videofx/VideoFxSegmentationRateManager.js","../node_modules/amazon-chime-sdk-js/build/videofx/VideoFxProcessor.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/decider.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/types.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/worklet-inline-node.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/worklet-worker-sab-node.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/worklet-worker-postMessage-node.js","../node_modules/amazon-chime-sdk-js/libs/voicefocus/voicefocus.js","../node_modules/amazon-chime-sdk-js/build/voicefocus/LoggerAdapter.js","../node_modules/amazon-chime-sdk-js/build/voicefocus/VoiceFocusTransformDevice.js","../node_modules/amazon-chime-sdk-js/build/voicefocus/VoiceFocusTransformDeviceDelegate.js","../node_modules/amazon-chime-sdk-js/build/voicefocus/VoiceFocusDeviceTransformer.js","../node_modules/amazon-chime-sdk-js/build/index.js"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[DefaultVideoStreamIdSet]] implements [[VideoStreamIdSet]].\n */\nclass DefaultVideoStreamIdSet {\n constructor(ids) {\n this.ids = new Set(ids);\n }\n add(streamId) {\n this.ids.add(streamId);\n }\n array() {\n const values = Array.from(this.ids.values());\n return values.sort((a, b) => a - b);\n }\n contain(streamId) {\n return this.ids.has(streamId);\n }\n forEach(callbackFn) {\n this.ids.forEach(callbackFn);\n }\n empty() {\n return this.ids.size === 0;\n }\n size() {\n return this.ids.size;\n }\n equal(other) {\n if (!other) {\n return this.ids.size === 0;\n }\n const x = this.array();\n const y = other.array();\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (x[i] !== y[i]) {\n return false;\n }\n }\n return true;\n }\n clone() {\n return new DefaultVideoStreamIdSet(this.array());\n }\n remove(streamId) {\n this.ids.delete(streamId);\n }\n toJSON() {\n return this.array();\n }\n truncate(length) {\n const x = this.array();\n return new DefaultVideoStreamIdSet(x.splice(0, length));\n }\n}\nexports.default = DefaultVideoStreamIdSet;\n//# sourceMappingURL=DefaultVideoStreamIdSet.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"../videostreamidset/DefaultVideoStreamIdSet\"));\n/**\n * [[AllHighestVideoBandwidthPolicy]] implements is a rudimentary policy that simply\n * always subscribes to the highest quality video stream available\n * for all non-self participants.\n */\nclass AllHighestVideoBandwidthPolicy {\n constructor(selfAttendeeId) {\n this.selfAttendeeId = selfAttendeeId;\n this.reset();\n }\n reset() {\n this.optimalReceiveSet = new DefaultVideoStreamIdSet_1.default();\n this.subscribedReceiveSet = new DefaultVideoStreamIdSet_1.default();\n this.videoSources = undefined;\n }\n updateIndex(videoIndex) {\n this.videoIndex = videoIndex;\n this.optimalReceiveSet = this.calculateOptimalReceiveSet(videoIndex);\n }\n updateMetrics(_clientMetricReport) { }\n wantsResubscribe() {\n return !this.subscribedReceiveSet.equal(this.optimalReceiveSet);\n }\n chooseSubscriptions() {\n this.subscribedReceiveSet = this.optimalReceiveSet.clone();\n return this.subscribedReceiveSet.clone();\n }\n chooseRemoteVideoSources(videoSources) {\n this.videoSources = videoSources;\n this.optimalReceiveSet = this.calculateOptimalReceiveSet(this.videoIndex).clone();\n }\n calculateOptimalReceiveSet(videoIndex) {\n const streamSelectionSet = new DefaultVideoStreamIdSet_1.default();\n if (!this.videoIndex || this.videoIndex.allStreams().empty()) {\n return streamSelectionSet;\n }\n const receiveSet = videoIndex.highestQualityStreamFromEachGroupExcludingSelf(this.selfAttendeeId);\n // If video sources are not chosen, then use all of them.\n const videoSources = !!this.videoSources\n ? this.videoSources\n : this.videoIndex.allVideoSendingSourcesExcludingSelf(this.selfAttendeeId);\n // Get the list of all the remote stream information\n const remoteInfos = this.videoIndex.remoteStreamDescriptions();\n const mapOfAttendeeIdToRemoteDescriptions = new Map();\n for (const info of remoteInfos) {\n if (receiveSet.contain(info.streamId)) {\n mapOfAttendeeIdToRemoteDescriptions.set(info.attendeeId, info);\n }\n }\n let totalBitrateKbps = 0;\n for (const videoSource of videoSources) {\n const attendeeId = videoSource.attendee.attendeeId;\n if (mapOfAttendeeIdToRemoteDescriptions.has(attendeeId)) {\n const info = mapOfAttendeeIdToRemoteDescriptions.get(attendeeId);\n if (totalBitrateKbps + info.maxBitrateKbps <=\n AllHighestVideoBandwidthPolicy.maxReceiveBitrateKbps) {\n streamSelectionSet.add(info.streamId);\n totalBitrateKbps += info.maxBitrateKbps;\n }\n else {\n console.warn('total bitrate ' +\n (totalBitrateKbps + info.maxBitrateKbps) +\n ' exceeds maximum limit (15000). Use chooseRemoteVideoSources to select a subset of participants to avoid this.');\n // We could continue to check more sources (some of them might still fall under the limit).\n // But we stop here to limit resubscribes if we're hovering near the cap.\n break;\n }\n }\n }\n return streamSelectionSet;\n }\n}\nexports.default = AllHighestVideoBandwidthPolicy;\n// Cap total receive bitrate at 15000 kbps to avoid hitting per client connection limits\nAllHighestVideoBandwidthPolicy.maxReceiveBitrateKbps = 15000;\n//# sourceMappingURL=AllHighestVideoBandwidthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n *\n * [[ApplicationMetadata]] contains application metadata such as application name and version.\n * Amazon Chime SDK for JavaScript allows builders to provide application metadata in\n * the meeting session configuration. This field is optional. Amazon Chime uses application metadata to\n * analyze meeting health trends or identify common failures to improve your meeting experience.\n *\n * Do not pass any Personal Identifiable Information (PII).\n *\n * ```js\n * import { MeetingSessionConfiguration, ApplicationMetadata } from 'amazon-chime-sdk-js';\n *\n * const createMeetingResponse = // CreateMeeting API response.\n * const createAttendeeResponse = // CreateAttendee API response.\n * const meetingSessionConfiguration = new MeetingSessionConfiguration(\n * createMeetingResponse,\n * createAttendeeResponse\n * );\n *\n * meetingSessionConfiguration.applicationMetadata = ApplicationMetadata.create({\n * appName: 'AppName',\n * appVersion: '1.0.0'\n * });\n *\n * ```\n */\nclass ApplicationMetadata {\n constructor(appName, appVersion) {\n this.appName = appName;\n this.appVersion = appVersion;\n }\n /**\n *\n * @param appName Builder's application name.\n * The app name must satisfy following regular expression:\n * `/^[a-zA-Z0-9]+[a-zA-Z0-9_-]*[a-zA-Z0-9]+$/g`\n *\n * @param appVersion Builder's application version.\n * The app version must follow the [Semantic Versioning](https://semver.org/) format.\n *\n * @returns [[ApplicationMetadata]]\n */\n static create(appName, appVersion) {\n const APP_NAME_REGEX = /^[a-zA-Z0-9]+[a-zA-Z0-9_-]*[a-zA-Z0-9]+$/g;\n if (!appName || appName.length > 32) {\n throw new Error(`appName should be a valid string and 1 to 32 characters in length`);\n }\n if (!APP_NAME_REGEX.test(appName)) {\n throw new Error(`appName must satisfy ${APP_NAME_REGEX} regular expression`);\n }\n const APP_VERSION_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/gm;\n if (!appVersion || appVersion.length > 32) {\n throw new Error(`appVersion should be a valid string and 1 to 32 characters in length`);\n }\n if (!APP_VERSION_REGEX.test(appVersion)) {\n throw new Error(`appVersion must satisfy Semantic Versioning format`);\n }\n return new ApplicationMetadata(appName, appVersion);\n }\n}\nexports.default = ApplicationMetadata;\n//# sourceMappingURL=ApplicationMetadata.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[TimeoutScheduler]] calls the callback once after timeoutMs milliseconds.\n */\nclass TimeoutScheduler {\n constructor(timeoutMs) {\n this.timeoutMs = timeoutMs;\n // eslint-disable-next-line\n this.timer = null;\n }\n start(callback) {\n this.stop();\n this.timer = setTimeout(() => {\n clearTimeout(this.timer);\n callback();\n }, this.timeoutMs);\n }\n stop() {\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n}\nexports.default = TimeoutScheduler;\n//# sourceMappingURL=TimeoutScheduler.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TimeoutScheduler_1 = __importDefault(require(\"./TimeoutScheduler\"));\n/**\n * [[AsyncScheduler]] enqueues the callback for the soonest available run of the\n * event loop.\n */\nclass AsyncScheduler extends TimeoutScheduler_1.default {\n constructor() {\n super(0);\n }\n /**\n * Execute the provided callback on the next tick of the event loop.\n * This is semantically equivalent to\n *\n * ```typescript\n * new AsyncScheduler(callback).start();\n * ```\n *\n * but with less overhead.\n *\n * @param callback the code to run.\n */\n static nextTick(callback) {\n setTimeout(callback, 0);\n }\n}\nexports.default = AsyncScheduler;\n//# sourceMappingURL=AsyncScheduler.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VideoLogEvent = void 0;\nvar VideoLogEvent;\n(function (VideoLogEvent) {\n VideoLogEvent[VideoLogEvent[\"InputAttached\"] = 0] = \"InputAttached\";\n VideoLogEvent[VideoLogEvent[\"SendingFailed\"] = 1] = \"SendingFailed\";\n VideoLogEvent[VideoLogEvent[\"SendingSuccess\"] = 2] = \"SendingSuccess\";\n})(VideoLogEvent = exports.VideoLogEvent || (exports.VideoLogEvent = {}));\nexports.default = VideoLogEvent;\n//# sourceMappingURL=VideoLogEvent.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LogLevel = void 0;\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 2] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n LogLevel[LogLevel[\"OFF\"] = 4] = \"OFF\";\n})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));\nexports.default = LogLevel;\n//# sourceMappingURL=LogLevel.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogLevel_1 = __importDefault(require(\"../logger/LogLevel\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\n/**\n * A task that wraps another task and ensures it is run only once,\n * regardless of how many times `run` is called.\n *\n * This allows you to implement a kind of barrier synchronization.\n */\nclass OnceTask {\n constructor(logger, task, dependencies) {\n this.logger = logger;\n this.task = task;\n this.dependencies = dependencies;\n // Whether we have canceled.\n this.canceled = false;\n }\n name() {\n return `${this.task.name()} (once)`;\n }\n cancel() {\n // We want to preserve one interesting property: the deepest dependency that hasn't\n // already finished or been canceled is the first to be canceled, and its failure\n // will propagate back up the promise chain.\n //\n // We can't just cancel ourselves with cancelPromise -- we will cut off the rest of\n // the tree. Nor can we necessarily do it on the same event loop tick, because the\n // cancelation might be subtly async.\n //\n // Instead, we immediately cancel each dependency, and then we cancel the current\n // task (if it's running), and then we cancel via our promise escape hatch if needed.\n /* istanbul ignore if */\n if (this.canceled) {\n return;\n }\n if (this.dependencies) {\n for (const dep of this.dependencies) {\n dep.cancel();\n }\n }\n // Do this on the next tick so that our canceled dependencies cascade.\n this.logger.info(`Canceling ${this.name()}`);\n AsyncScheduler_1.default.nextTick(() => this.task.cancel());\n this.canceled = true;\n if (this.cancelPromise) {\n AsyncScheduler_1.default.nextTick(() => this.cancelPromise(new Error(`canceling ${this.name()}`)));\n }\n }\n logDependencies() {\n if (this.logger.getLogLevel() > LogLevel_1.default.INFO) {\n return;\n }\n if (!this.dependencies) {\n return;\n }\n const names = this.dependencies\n .filter(d => d)\n .map(d => d.name())\n .join(', ');\n this.logger.info(`${this.task.name()} waiting for dependencies: ${names}`);\n }\n run() {\n if (this.promise) {\n return this.promise;\n }\n const dependencies = this.dependencies\n ? Promise.all(this.dependencies.map(d => d === null || d === void 0 ? void 0 : d.run()))\n : Promise.resolve();\n this.logDependencies();\n this.ongoing = dependencies.then(() => this.task.run());\n return (this.promise = new Promise((resolve, reject) => {\n this.cancelPromise = reject;\n this.ongoing.then(resolve).catch(reject);\n }));\n }\n setParent(parentTask) {\n this.task.setParent(parentTask);\n }\n}\nexports.default = OnceTask;\n//# sourceMappingURL=OnceTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TaskStatus;\n(function (TaskStatus) {\n TaskStatus[\"IDLE\"] = \"IDLE\";\n TaskStatus[\"RUNNING\"] = \"RUNNING\";\n TaskStatus[\"CANCELED\"] = \"CANCELED\";\n TaskStatus[\"FINISHED\"] = \"FINISHED\";\n})(TaskStatus || (TaskStatus = {}));\nexports.default = TaskStatus;\n//# sourceMappingURL=TaskStatus.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst OnceTask_1 = __importDefault(require(\"./OnceTask\"));\nconst TaskStatus_1 = __importDefault(require(\"./TaskStatus\"));\n/*\n * [[BaseTask]] provides common utilities for task implementations.\n */\nclass BaseTask {\n constructor(logger) {\n this.logger = logger;\n this.taskName = 'BaseTask';\n this.parentTask = null;\n this.status = TaskStatus_1.default.IDLE;\n this.run = this.baseRun.bind(this, this.run);\n this.cancel = this.baseCancel.bind(this, this.cancel);\n }\n once(...dependencies) {\n return new OnceTask_1.default(this.logger, this, dependencies);\n }\n cancel() { }\n name() {\n return this.parentTask ? `${this.parentTask.name()}/${this.taskName}` : this.taskName;\n }\n setParent(parentTask) {\n this.parentTask = parentTask;\n }\n getStatus() {\n return this.status;\n }\n logAndThrow(message) {\n this.logger.info(message);\n throw new Error(message);\n }\n baseRun(originalRun) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const startTime = Date.now();\n this.logger.info(`running task ${this.name()}`);\n switch (this.status) {\n case TaskStatus_1.default.RUNNING:\n this.logAndThrow(`${this.name()} is already running`);\n case TaskStatus_1.default.CANCELED:\n this.logAndThrow(`${this.name()} was canceled before running`);\n case TaskStatus_1.default.FINISHED:\n this.logAndThrow(`${this.name()} was already finished`);\n }\n this.status = TaskStatus_1.default.RUNNING;\n yield originalRun.call(this);\n this.logger.info(`${this.name()} took ${Math.round(Date.now() - startTime)} ms`);\n }\n catch (err) {\n throw err;\n }\n finally {\n if (this.status !== TaskStatus_1.default.CANCELED) {\n this.status = TaskStatus_1.default.FINISHED;\n }\n }\n });\n }\n baseCancel(originalCancel) {\n if (this.status === TaskStatus_1.default.CANCELED || this.status === TaskStatus_1.default.FINISHED) {\n this.logger.info(`Not canceling ${this.name()}: state is ${this.status}`);\n return;\n }\n this.logger.info(`canceling task ${this.name()}`);\n this.status = TaskStatus_1.default.CANCELED;\n originalCancel.call(this);\n }\n}\nexports.default = BaseTask;\n//# sourceMappingURL=BaseTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst VideoLogEvent_1 = __importDefault(require(\"../statscollector/VideoLogEvent\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[AttachMediaInputTask]] adds audio and video input to peer connection.\n */\nclass AttachMediaInputTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'AttachMediaInputTask';\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const transceiverController = this.context.transceiverController;\n transceiverController.setPeer(this.context.peer);\n transceiverController.setupLocalTransceivers();\n const audioInput = this.context.activeAudioInput;\n if (audioInput) {\n const audioTracks = audioInput.getAudioTracks();\n this.context.logger.info('attaching audio track to peer connection');\n yield transceiverController.setAudioInput(audioTracks.length ? audioTracks[0] : null);\n }\n else {\n yield transceiverController.setAudioInput(null);\n this.context.logger.info('no audio track');\n }\n this.setAudioCodecPreferences();\n const videoInput = this.context.activeVideoInput;\n if (videoInput) {\n const videoTracks = videoInput.getVideoTracks();\n const videoTrack = videoTracks.length ? videoTracks[0] : null;\n this.context.logger.info('attaching video track to peer connection');\n yield transceiverController.setVideoInput(videoTrack);\n if (this.context.enableSimulcast && this.context.videoUplinkBandwidthPolicy) {\n const encodingParam = this.context.videoUplinkBandwidthPolicy.chooseEncodingParameters();\n transceiverController.setEncodingParameters(encodingParam);\n }\n if (videoTrack) {\n this.context.statsCollector.logVideoEvent(VideoLogEvent_1.default.InputAttached, this.context.videoDeviceInformation);\n }\n }\n else {\n yield transceiverController.setVideoInput(null);\n this.context.logger.info('no video track');\n }\n this.context.videoSubscriptions = transceiverController.updateVideoTransceivers(this.context.videoStreamIndex, this.context.videosToReceive);\n });\n }\n setAudioCodecPreferences() {\n const supportsSetCodecPreferences = window.RTCRtpTransceiver && 'setCodecPreferences' in window.RTCRtpTransceiver.prototype;\n const enableAudioRedundancy = this.context.audioProfile.hasRedundancyEnabled();\n /* istanbul ignore if */\n if (!supportsSetCodecPreferences) {\n this.context.logger.warn(`Setting codec preferences not supported`);\n return;\n }\n const audioTransceiver = this.context.transceiverController.localAudioTransceiver();\n const { codecs } = RTCRtpSender.getCapabilities('audio');\n this.context.logger.debug(`Available audio codecs ${JSON.stringify(codecs, null, 4)}`);\n const redCodecIndex = codecs.findIndex(c => c.mimeType === 'audio/red');\n /* istanbul ignore if */\n if (!audioTransceiver) {\n this.context.logger.error(`audio transceiver is null`);\n return;\n }\n if (redCodecIndex >= 0) {\n const redCodec = codecs[redCodecIndex];\n codecs.splice(redCodecIndex, 1);\n if (enableAudioRedundancy) {\n // Add to the beginning of the codec list to\n // signify that this is the preferred codec.\n // Media backend enables RED only if the preference\n // for RED is highest.\n codecs.unshift(redCodec);\n this.context.logger.info('audio/red set as preferred codec');\n }\n else {\n this.context.logger.info('audio/red removed from preferred codec');\n }\n audioTransceiver.setCodecPreferences(codecs);\n return;\n }\n this.context.logger.info('audio/red codec not supported');\n }\n}\nexports.default = AttachMediaInputTask;\n//# sourceMappingURL=AttachMediaInputTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[Attendee]] contains the information of an attendee.\n */\nclass Attendee {\n}\nexports.default = Attendee;\n//# sourceMappingURL=Attendee.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AudioLogEvent = void 0;\nvar AudioLogEvent;\n(function (AudioLogEvent) {\n AudioLogEvent[AudioLogEvent[\"DeviceChanged\"] = 0] = \"DeviceChanged\";\n AudioLogEvent[AudioLogEvent[\"MutedLocal\"] = 1] = \"MutedLocal\";\n AudioLogEvent[AudioLogEvent[\"UnmutedLocal\"] = 2] = \"UnmutedLocal\";\n AudioLogEvent[AudioLogEvent[\"Connected\"] = 3] = \"Connected\";\n AudioLogEvent[AudioLogEvent[\"ConnectFailed\"] = 4] = \"ConnectFailed\";\n AudioLogEvent[AudioLogEvent[\"RedmicStartLoss\"] = 5] = \"RedmicStartLoss\";\n AudioLogEvent[AudioLogEvent[\"RedmicEndLoss\"] = 6] = \"RedmicEndLoss\";\n})(AudioLogEvent = exports.AudioLogEvent || (exports.AudioLogEvent = {}));\nexports.default = AudioLogEvent;\n//# sourceMappingURL=AudioLogEvent.js.map","var __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};\nvar BrowserInfo = /** @class */ (function () {\n function BrowserInfo(name, version, os) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.type = 'browser';\n }\n return BrowserInfo;\n}());\nexport { BrowserInfo };\nvar NodeInfo = /** @class */ (function () {\n function NodeInfo(version) {\n this.version = version;\n this.type = 'node';\n this.name = 'node';\n this.os = process.platform;\n }\n return NodeInfo;\n}());\nexport { NodeInfo };\nvar SearchBotDeviceInfo = /** @class */ (function () {\n function SearchBotDeviceInfo(name, version, os, bot) {\n this.name = name;\n this.version = version;\n this.os = os;\n this.bot = bot;\n this.type = 'bot-device';\n }\n return SearchBotDeviceInfo;\n}());\nexport { SearchBotDeviceInfo };\nvar BotInfo = /** @class */ (function () {\n function BotInfo() {\n this.type = 'bot';\n this.bot = true; // NOTE: deprecated test name instead\n this.name = 'bot';\n this.version = null;\n this.os = null;\n }\n return BotInfo;\n}());\nexport { BotInfo };\nvar ReactNativeInfo = /** @class */ (function () {\n function ReactNativeInfo() {\n this.type = 'react-native';\n this.name = 'react-native';\n this.version = null;\n this.os = null;\n }\n return ReactNativeInfo;\n}());\nexport { ReactNativeInfo };\n// tslint:disable-next-line:max-line-length\nvar SEARCHBOX_UA_REGEX = /alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/;\nvar SEARCHBOT_OS_REGEX = /(nuhk|curl|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask\\ Jeeves\\/Teoma|ia_archiver)/;\nvar REQUIRED_VERSION_PARTS = 3;\nvar userAgentRules = [\n ['aol', /AOLShield\\/([0-9\\._]+)/],\n ['edge', /Edge\\/([0-9\\._]+)/],\n ['edge-ios', /EdgiOS\\/([0-9\\._]+)/],\n ['yandexbrowser', /YaBrowser\\/([0-9\\._]+)/],\n ['kakaotalk', /KAKAOTALK\\s([0-9\\.]+)/],\n ['samsung', /SamsungBrowser\\/([0-9\\.]+)/],\n ['silk', /\\bSilk\\/([0-9._-]+)\\b/],\n ['miui', /MiuiBrowser\\/([0-9\\.]+)$/],\n ['beaker', /BeakerBrowser\\/([0-9\\.]+)/],\n ['edge-chromium', /EdgA?\\/([0-9\\.]+)/],\n [\n 'chromium-webview',\n /(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/,\n ],\n ['chrome', /(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],\n ['phantomjs', /PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],\n ['crios', /CriOS\\/([0-9\\.]+)(:?\\s|$)/],\n ['firefox', /Firefox\\/([0-9\\.]+)(?:\\s|$)/],\n ['fxios', /FxiOS\\/([0-9\\.]+)/],\n ['opera-mini', /Opera Mini.*Version\\/([0-9\\.]+)/],\n ['opera', /Opera\\/([0-9\\.]+)(?:\\s|$)/],\n ['opera', /OPR\\/([0-9\\.]+)(:?\\s|$)/],\n ['pie', /^Microsoft Pocket Internet Explorer\\/(\\d+\\.\\d+)$/],\n ['pie', /^Mozilla\\/\\d\\.\\d+\\s\\(compatible;\\s(?:MSP?IE|MSInternet Explorer) (\\d+\\.\\d+);.*Windows CE.*\\)$/],\n ['netfront', /^Mozilla\\/\\d\\.\\d+.*NetFront\\/(\\d.\\d)/],\n ['ie', /Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],\n ['ie', /MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],\n ['ie', /MSIE\\s(7\\.0)/],\n ['bb10', /BB10;\\sTouch.*Version\\/([0-9\\.]+)/],\n ['android', /Android\\s([0-9\\.]+)/],\n ['ios', /Version\\/([0-9\\._]+).*Mobile.*Safari.*/],\n ['safari', /Version\\/([0-9\\._]+).*Safari/],\n ['facebook', /FB[AS]V\\/([0-9\\.]+)/],\n ['instagram', /Instagram\\s([0-9\\.]+)/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Mobile/],\n ['ios-webview', /AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],\n ['curl', /^curl\\/([0-9\\.]+)$/],\n ['searchbot', SEARCHBOX_UA_REGEX],\n];\nvar operatingSystemRules = [\n ['iOS', /iP(hone|od|ad)/],\n ['Android OS', /Android/],\n ['BlackBerry OS', /BlackBerry|BB10/],\n ['Windows Mobile', /IEMobile/],\n ['Amazon OS', /Kindle/],\n ['Windows 3.11', /Win16/],\n ['Windows 95', /(Windows 95)|(Win95)|(Windows_95)/],\n ['Windows 98', /(Windows 98)|(Win98)/],\n ['Windows 2000', /(Windows NT 5.0)|(Windows 2000)/],\n ['Windows XP', /(Windows NT 5.1)|(Windows XP)/],\n ['Windows Server 2003', /(Windows NT 5.2)/],\n ['Windows Vista', /(Windows NT 6.0)/],\n ['Windows 7', /(Windows NT 6.1)/],\n ['Windows 8', /(Windows NT 6.2)/],\n ['Windows 8.1', /(Windows NT 6.3)/],\n ['Windows 10', /(Windows NT 10.0)/],\n ['Windows ME', /Windows ME/],\n ['Windows CE', /Windows CE|WinCE|Microsoft Pocket Internet Explorer/],\n ['Open BSD', /OpenBSD/],\n ['Sun OS', /SunOS/],\n ['Chrome OS', /CrOS/],\n ['Linux', /(Linux)|(X11)/],\n ['Mac OS', /(Mac_PowerPC)|(Macintosh)/],\n ['QNX', /QNX/],\n ['BeOS', /BeOS/],\n ['OS/2', /OS\\/2/],\n];\nexport function detect(userAgent) {\n if (!!userAgent) {\n return parseUserAgent(userAgent);\n }\n if (typeof document === 'undefined' &&\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative') {\n return new ReactNativeInfo();\n }\n if (typeof navigator !== 'undefined') {\n return parseUserAgent(navigator.userAgent);\n }\n return getNodeVersion();\n}\nfunction matchUserAgent(ua) {\n // opted for using reduce here rather than Array#first with a regex.test call\n // this is primarily because using the reduce we only perform the regex\n // execution once rather than once for the test and for the exec again below\n // probably something that needs to be benchmarked though\n return (ua !== '' &&\n userAgentRules.reduce(function (matched, _a) {\n var browser = _a[0], regex = _a[1];\n if (matched) {\n return matched;\n }\n var uaMatch = regex.exec(ua);\n return !!uaMatch && [browser, uaMatch];\n }, false));\n}\nexport function browserName(ua) {\n var data = matchUserAgent(ua);\n return data ? data[0] : null;\n}\nexport function parseUserAgent(ua) {\n var matchedRule = matchUserAgent(ua);\n if (!matchedRule) {\n return null;\n }\n var name = matchedRule[0], match = matchedRule[1];\n if (name === 'searchbot') {\n return new BotInfo();\n }\n // Do not use RegExp for split operation as some browser do not support it (See: http://blog.stevenlevithan.com/archives/cross-browser-split)\n var versionParts = match[1] && match[1].split('.').join('_').split('_').slice(0, 3);\n if (versionParts) {\n if (versionParts.length < REQUIRED_VERSION_PARTS) {\n versionParts = __spreadArray(__spreadArray([], versionParts, true), createVersionParts(REQUIRED_VERSION_PARTS - versionParts.length), true);\n }\n }\n else {\n versionParts = [];\n }\n var version = versionParts.join('.');\n var os = detectOS(ua);\n var searchBotMatch = SEARCHBOT_OS_REGEX.exec(ua);\n if (searchBotMatch && searchBotMatch[1]) {\n return new SearchBotDeviceInfo(name, version, os, searchBotMatch[1]);\n }\n return new BrowserInfo(name, version, os);\n}\nexport function detectOS(ua) {\n for (var ii = 0, count = operatingSystemRules.length; ii < count; ii++) {\n var _a = operatingSystemRules[ii], os = _a[0], regex = _a[1];\n var match = regex.exec(ua);\n if (match) {\n return os;\n }\n }\n return null;\n}\nexport function getNodeVersion() {\n var isNode = typeof process !== 'undefined' && process.version;\n return isNode ? new NodeInfo(process.version.slice(1)) : null;\n}\nfunction createVersionParts(count) {\n var output = [];\n for (var ii = 0; ii < count; ii++) {\n output.push('0');\n }\n return output;\n}\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.33\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.33',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 350;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SHARP = 'Sharp',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /microm.+\\bqbcore\\/([\\w\\.]+)/i, // WeChat Desktop for Windows Built-in Browser\n /\\bqbcore\\/([\\w\\.]+).+microm/i\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish/Huawei Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i, // LieBao Browser\n /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION], [\n \n /(cobalt)\\/([\\w\\.]+)/i // Cobalt\n ], [NAME, [VERSION, /master.|lts./, \"\"]]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n /(macintosh);/i\n ], [MODEL, [VENDOR, APPLE]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i,\n /(aquos-tv[\\w ]+)\\)/i // Sharp\n ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]],[\n /(bravia[\\w ]+)( bui|\\))/i // Sony\n ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [\n /(mitv-\\w{5}) bui/i // Xiaomi\n ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst detect_browser_1 = require(\"detect-browser\");\nconst ua_parser_js_1 = require(\"ua-parser-js\");\nclass DefaultBrowserBehavior {\n constructor() {\n this.FALLBACK_BROWSER = {\n type: 'browser',\n name: 'unknown',\n version: 'unknown',\n os: 'unknown',\n };\n this.browser = detect_browser_1.detect() || this.FALLBACK_BROWSER;\n this.uaParserResult = navigator && navigator.userAgent ? new ua_parser_js_1.UAParser(navigator.userAgent).getResult() : null;\n this.browserSupport = {\n chrome: 78,\n 'edge-chromium': 79,\n electron: 7,\n firefox: 75,\n ios: 13,\n safari: 13,\n opera: 66,\n samsung: 12,\n crios: 86,\n fxios: 23,\n 'ios-webview': 605,\n 'chromium-webview': 92,\n };\n this.browserName = {\n chrome: 'Google Chrome',\n 'edge-chromium': 'Microsoft Edge',\n electron: 'Electron',\n firefox: 'Mozilla Firefox',\n ios: 'Safari iOS',\n safari: 'Safari',\n opera: 'Opera',\n samsung: 'Samsung Internet',\n crios: 'Chrome iOS',\n fxios: 'Firefox iOS',\n 'ios-webview': 'WKWebView iOS',\n 'chromium-webview': 'Chrome WebView',\n };\n this.chromeLike = [\n 'chrome',\n 'edge-chromium',\n 'chromium-webview',\n 'opera',\n 'samsung',\n ];\n this.webkitBrowsers = ['crios', 'fxios', 'safari', 'ios', 'ios-webview', 'edge-ios'];\n }\n version() {\n return this.browser.version;\n }\n majorVersion() {\n return this.version() !== null ? parseInt(this.version().split('.')[0]) : -1;\n }\n osMajorVersion() {\n return parseInt(this.uaParserResult.os.version.split('.')[0]);\n }\n engine() {\n return this.uaParserResult.engine.name;\n }\n engineMajorVersion() {\n return parseInt(this.uaParserResult.engine.version.split('.')[0]);\n }\n name() {\n return this.browser.name;\n }\n hasChromiumWebRTC() {\n for (const browser of this.chromeLike) {\n if (browser === this.browser.name) {\n return true;\n }\n }\n return false;\n }\n hasWebKitWebRTC() {\n for (const browser of this.webkitBrowsers) {\n if (browser === this.browser.name) {\n return true;\n }\n }\n return false;\n }\n hasFirefoxWebRTC() {\n return this.isFirefox();\n }\n requiresPlaybackLatencyHintForAudioContext() {\n return navigator.userAgent.indexOf('Windows') !== -1;\n }\n supportsCanvasCapturedStreamPlayback() {\n return (\n // Desktop browser\n (!this.isIOSSafari() && !this.isIOSChrome() && !this.isIOSFirefox() && !this.isIOSEdge()) ||\n // iOS Safari (Firefox on iOS with desktop view will be identified as iOS Safari\n (this.isIOSSafari() &&\n this.majorVersion() >= DefaultBrowserBehavior.MIN_IOS_SUPPORT_CANVAS_STREAM_PLAYBACK) ||\n // Chrome, Edge, or Firefox (mobile view) on iOS\n this.majorVersion() >=\n DefaultBrowserBehavior.MIN_IOS_NON_SAFARI_SUPPORT_CANVAS_STREAM_PLAYBACK);\n }\n supportsBackgroundFilter() {\n // disable Safari 15\n // see: https://github.com/aws/amazon-chime-sdk-js/issues/1059\n if (this.name() === 'safari' && this.majorVersion() === 15) {\n return false;\n }\n if (!this.supportsCanvasCapturedStreamPlayback()) {\n return false;\n }\n return true;\n }\n supportsVideoLayersAllocationRtpHeaderExtension() {\n return this.hasChromiumWebRTC();\n }\n supportsDependencyDescriptorRtpHeaderExtension() {\n return this.hasChromiumWebRTC();\n }\n supportsScalableVideoCoding() {\n return (\n // Currently `this.hasChromiumWebRTC() && this.engine() === 'Blink'` completely\n // overlaps but we keep both just in case that changes in the future.\n this.hasChromiumWebRTC() && this.engine() === 'Blink' && this.engineMajorVersion() >= 111);\n }\n supportsAudioRedundancy() {\n if (this.hasChromiumWebRTC()) {\n // Audio redundancy may cause video decoding failure for Chromium version 106 and\n // earlier. Marking such Chromium versions as not supporting audio redundancy.\n return this.engineMajorVersion() >= 107;\n }\n return !this.hasFirefoxWebRTC();\n }\n requiresResolutionAlignment(width, height) {\n if (this.isAndroid() && this.isPixel3()) {\n return [Math.ceil(width / 64) * 64, Math.ceil(height / 64) * 64];\n }\n return [width, height];\n }\n requiresCheckForSdpConnectionAttributes() {\n return !this.isIOSSafari() && !this.isIOSChrome() && !this.isIOSFirefox();\n }\n requiresIceCandidateGatheringTimeoutWorkaround() {\n return this.hasChromiumWebRTC();\n }\n requiresBundlePolicy() {\n return 'max-bundle';\n }\n requiresNoExactMediaStreamConstraints() {\n return this.isSamsungInternet();\n }\n requiresGroupIdMediaStreamConstraints() {\n return this.isSamsungInternet();\n }\n getDisplayMediaAudioCaptureSupport() {\n return this.isChrome() || this.isEdge();\n }\n // There's a issue in Chormium WebView that causes enumerate devices to return empty labels, this is a check for this issue.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=669492\n doesNotSupportMediaDeviceLabels() {\n return this.browser.name === 'chromium-webview';\n }\n isSupported() {\n if (!this.browserSupport[this.browser.name] ||\n this.majorVersion() < this.browserSupport[this.browser.name]) {\n return false;\n }\n if (this.browser.name === 'firefox' && this.isAndroid()) {\n return false;\n }\n return true;\n }\n isSimulcastSupported() {\n return this.hasChromiumWebRTC();\n }\n supportDownlinkBandwidthEstimation() {\n return !this.isFirefox();\n }\n supportString() {\n if (this.isAndroid()) {\n return `${this.browserName['chrome']} ${this.browserSupport['chrome']}+, ${this.browserName['samsung']} ${this.browserSupport['samsung']}+`;\n }\n const s = [];\n for (const k in this.browserSupport) {\n s.push(`${this.browserName[k]} ${this.browserSupport[k]}+`);\n }\n return s.join(', ');\n }\n supportedVideoCodecs() {\n return __awaiter(this, void 0, void 0, function* () {\n const pc = new RTCPeerConnection();\n pc.addTransceiver('video', { direction: 'inactive', streams: [] });\n return (yield pc.createOffer({ offerToReceiveVideo: true })).sdp\n .split('\\r\\n')\n .filter(x => {\n return x.includes('a=rtpmap:');\n })\n .map(x => {\n return x.replace(/.* /, '').replace(/\\/.*/, '');\n })\n .filter((v, i, a) => {\n return a.indexOf(v) === i;\n })\n .filter(x => {\n return x !== 'rtx' && x !== 'red' && x !== 'ulpfec';\n });\n });\n }\n supportsSetSinkId() {\n return 'setSinkId' in HTMLAudioElement.prototype;\n }\n disableResolutionScaleDown() {\n return this.isAndroid();\n }\n disable480pResolutionScaleDown() {\n return /( Chrome\\/98\\.)/i.test(navigator.userAgent) && this.browser.os.startsWith('Windows');\n }\n requiresDisablingH264Encoding() {\n return ((this.isIOSSafari() || this.isIOSChrome() || this.isIOSFirefox()) &&\n (this.version() === '15.1.0' || /( OS 15_1)/i.test(navigator.userAgent)));\n }\n // In Safari, a hidden video element can show a black screen.\n // See https://bugs.webkit.org/show_bug.cgi?id=241152 for more information.\n requiresVideoPlayWorkaround() {\n return this.isSafari();\n }\n /**\n * Check if the current browser supports the [[VideoFxProcessor]].\n * @returns boolean representing if browser supports [[VideoFxProcessor]].\n */\n isVideoFxSupportedBrowser() {\n // Not supported on safari 15 and on environments without canvas capture playback\n return this.supportsBackgroundFilter();\n }\n // These helpers should be kept private to encourage\n // feature detection instead of browser detection.\n isIOSSafari() {\n return (this.browser.name === 'ios' ||\n this.browser.name === 'ios-webview' ||\n (this.browser.name === 'safari' &&\n /( Mac )/i.test(navigator.userAgent) &&\n navigator.maxTouchPoints > 1) //Ipad\n );\n }\n isSafari() {\n return this.browser.name === 'safari' || this.isIOSSafari();\n }\n isFirefox() {\n return this.browser.name === 'firefox';\n }\n isIOSFirefox() {\n return this.browser.name === 'fxios';\n }\n isIOSChrome() {\n return this.browser.name === 'crios';\n }\n isChrome() {\n return this.browser.name === 'chrome';\n }\n isEdge() {\n return this.browser.name === 'edge-chromium';\n }\n isIOSEdge() {\n return this.browser.name === 'edge-ios';\n }\n isSamsungInternet() {\n return this.browser.name === 'samsung';\n }\n isAndroid() {\n return /(android)/i.test(navigator.userAgent);\n }\n isPixel3() {\n return /( pixel 3)/i.test(navigator.userAgent);\n }\n}\nexports.default = DefaultBrowserBehavior;\nDefaultBrowserBehavior.MIN_IOS_SUPPORT_CANVAS_STREAM_PLAYBACK = 16;\nDefaultBrowserBehavior.MIN_IOS_NON_SAFARI_SUPPORT_CANVAS_STREAM_PLAYBACK = 106;\n//# sourceMappingURL=DefaultBrowserBehavior.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\n/**\n * AudioProfile defines settings for audio quality.\n */\nclass AudioProfile {\n /**\n * Constructs an AudioProfile. If no audio bitrate is supplied then the AudioProfile\n * does not adjust the browser's internal bitrate setting. If the enableAudioRedundancy\n * flag is not supplied then the AudioProfile enables it by default.\n */\n constructor(audioBitrateBps = null, enableAudioRedundancy = true) {\n this.audioBitrateBps = audioBitrateBps;\n this.enableAudioRedundancy =\n new DefaultBrowserBehavior_1.default().supportsAudioRedundancy() && enableAudioRedundancy;\n }\n /**\n * Creates an AudioProfile optimized for fullband speech (40 kbit/s mono).\n */\n static fullbandSpeechMono(enableAudioRedundancy = true) {\n return new AudioProfile(40000, enableAudioRedundancy);\n }\n /**\n * Creates an AudioProfile optimized for fullband music (64 kbit/s mono).\n */\n static fullbandMusicMono(enableAudioRedundancy = true) {\n return new AudioProfile(64000, enableAudioRedundancy);\n }\n /**\n * Creates an AudioProfile optimized for fullband stereo music (128 kbit/s stereo).\n */\n static fullbandMusicStereo(enableAudioRedundancy = true) {\n return new AudioProfile(128000, enableAudioRedundancy);\n }\n /**\n * Returns true if audio profile is set to stereo mode.\n */\n isStereo() {\n return this.audioBitrateBps === 128000;\n }\n /**\n * Returns true if redundancy is supported and enabled.\n */\n hasRedundancyEnabled() {\n return this.enableAudioRedundancy;\n }\n}\nexports.default = AudioProfile;\n//# sourceMappingURL=AudioProfile.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_VIDEO_SUBSCRIPTION_LIMIT = void 0;\nexports.DEFAULT_VIDEO_SUBSCRIPTION_LIMIT = 25;\n/**\n * [[AudioVideoControllerState]] includes the compute resources shared by [[DefaultAudioVideoController]] and any running [[Task]].\n *\n * **Note**: Any additions to this class need to consider whether they need to be reset in `resetConnectionSpecificState`, `CleanStoppedSessionTask`, or\n * `CleanRestartedSessionTask`, e.g. if it is relies on backend state and will go stale across reconnections. Failing\n * to reset state may lead to unexpected behavior.\n */\nclass AudioVideoControllerState {\n constructor() {\n this.logger = null;\n this.browserBehavior = null;\n this.meetingSessionConfiguration = null;\n this.signalingClient = null;\n this.peer = null;\n this.previousSdpOffer = null;\n this.sdpOfferInit = null;\n this.audioVideoController = null;\n this.realtimeController = null;\n this.videoTileController = null;\n this.mediaStreamBroker = null;\n this.activeAudioInput = undefined;\n this.activeVideoInput = undefined;\n this.audioMixController = null;\n this.transceiverController = null;\n this.indexFrame = null;\n this.iceCandidates = [];\n this.iceCandidateHandler = null;\n this.iceGatheringStateEventHandler = null;\n this.sdpAnswer = null;\n this.turnCredentials = null;\n this.reconnectController = null;\n this.removableObservers = [];\n this.audioProfile = null;\n this.videoStreamIndex = null;\n this.videoDownlinkBandwidthPolicy = null;\n this.videoUplinkBandwidthPolicy = null;\n this.lastKnownVideoAvailability = null;\n this.videoCaptureAndEncodeParameter = null;\n // An unordered list of IDs provided by the downlink policy that\n // we will eventually subscribe to.\n this.videosToReceive = null;\n // The last processed set of IDs provided by the policy, so that we can\n // compare what changes were additions, stream switches, or removals.\n this.lastVideosToReceive = null;\n // An ordered list corresponding to `videosToReceive` where the order\n // itself correspond to transceivers; 0 in this list corresponds to an inactive tranceiver.\n this.videoSubscriptions = null;\n // The last calculated list of subscription configuration used to send a remote video\n // update (i.e. not necessarily related to what is in subscribe). This is used to make the remote\n // video update a differential message (i.e. only sending changes)\n //\n // This is stored as a map keyed by group ID for convenience\n this.lastVideoSubscriptionConfiguration = new Map();\n // The video subscription limit is set by the backend and is subject to change in future.\n // This value is set in the `JoinAndReceiveIndexTask` when we process the `SdkJoinAckFrame`\n // and is used in the `ReceiveVideoStreamIndexTask` to limit the total number of streams\n // that we include in the `videosToReceive`.\n this.videoSubscriptionLimit = exports.DEFAULT_VIDEO_SUBSCRIPTION_LIMIT;\n // The previous SDP answer will be used as a dictionary to seed the compression library\n // during decompressing the compressed SDP answer.\n this.previousSdpAnswerAsString = '';\n // This flag indicates if the backend supports compression for the client.\n this.serverSupportsCompression = false;\n // Values set by `setVideoCodecSendPreferences`.\n this.videoSendCodecPreferences = [];\n // Calculated as the highest priority available codec set in the (possibly munged) SDP answer\n // that is provide to the peer connection, which will be what is sent.\n this.currentVideoSendCodec = undefined;\n // Intersection of `videoSendCodecPreferences` and the supported receive codecs of\n // all the other clients in the meeting.\n this.meetingSupportedVideoSendCodecPreferences = undefined;\n // Calculated as the list of available codec set in the (possibly munged) SDP answer\n // that is provided to the peer connection, which will be ordered by priority.\n this.prioritizedSendVideoCodecCapabilities = [];\n this.videosPaused = null;\n this.videoDuplexMode = null;\n this.volumeIndicatorAdapter = null;\n this.statsCollector = null;\n this.connectionMonitor = null;\n // This state is deprecated and unused.\n this.videoInputAttachedTimestampMs = 0;\n // This state is deprecated and unused.\n this.audioDeviceInformation = {};\n // This state is deprecated and unused.\n this.videoDeviceInformation = {};\n this.enableSimulcast = false;\n // If set to true, the client will actively try to use Scalable Video Coding (SVC) features\n // if possible. The availability of these features depends dynamically on the video codec used;\n // static browser availability and any competing features (e.g. simulcast) should\n // have already been checked before this is set to true.\n this.enableSVC = false;\n this.eventController = null;\n this.signalingOpenDurationMs = null;\n this.iceGatheringDurationMs = null;\n this.startAudioVideoTimestamp = null;\n this.attendeePresenceDurationMs = null;\n this.meetingStartDurationMs = null;\n this.poorConnectionCount = 0;\n this.maxVideoTileCount = 0;\n this.startTimeMs = null;\n }\n /*\n * Reset state corresponding to state that is dependent on a individual connection\n * and may not be valid for others, e.g. on a reconnection.\n */\n resetConnectionSpecificState() {\n // For auditing reasons, we will comment on the state that we do not touch here. Note that `DefaultAudioVideoController.actionConnect`\n // also resets certain state, some to cached members:\n // Reset to empty/null/new state: `browserBehavior`, `transceiverController`, `volumeIndicatorAdapter`, `enableSimulcast`\n // `signalingOpenDurationMs`, `iceGatheringDurationMs`, `startAudioVideoTimestamp`, `attendeePresenceDurationMs`\n // `meetingStartDurationMs`, `startTimeMs`, `lastKnownVideoAvailability`, `videoCaptureAndEncodeParameter`, `videosToReceive`\n // `videosPaused`, `videoStreamIndex`, `statsCollector`, `connectionMonitor`\n // Reset to existing/cached values: `logger`, `meetingSessionConfiguration`, `realtimeController`, `mediaStreamBroker`,\n // `audioMixController`, `reconnectController, `audioProfile`, `eventController`\n // `signalingClient` can be reused from a failed/disconnected state.\n if (this.peer) {\n this.peer.close();\n }\n this.peer = null;\n this.previousSdpOffer = null;\n this.sdpOfferInit = null;\n // `audioVideoController` members should either be reusable, or moved to `AudioVideoControllerState` and\n // cleaned up here.\n // We don't want to mutate `videoTileController` as most video tiles will still be there on reconnect. We can remove tiles on the\n // first index we receive if they no longer exist\n // `mediaStreamBroker`, `activeAudioInput`, and `activeVideoInput` are cleaned up seperately in `DefaultAudioVideoController.cleanUpMediaStreamsAfterStop`\n // but only on `stop` or non-reconnectable failures. They are also set to cached `DefaultAudioVideoController` members on restart.\n if (this.transceiverController !== undefined) {\n this.transceiverController.reset();\n }\n this.indexFrame = null;\n this.iceCandidates = [];\n this.iceCandidateHandler = null;\n this.sdpAnswer = null;\n this.turnCredentials = null;\n this.videoDownlinkBandwidthPolicy.reset();\n if (this.videoUplinkBandwidthPolicy.reset) {\n this.videoUplinkBandwidthPolicy.reset();\n }\n this.lastVideosToReceive = null;\n this.lastVideoSubscriptionConfiguration = new Map();\n this.videoSubscriptions = null;\n this.videoSubscriptionLimit = exports.DEFAULT_VIDEO_SUBSCRIPTION_LIMIT;\n this.previousSdpAnswerAsString = '';\n this.serverSupportsCompression = false;\n // `videoSendCodecPreferences` is set by builder and needs to stay consistent.\n this.currentVideoSendCodec = undefined;\n this.meetingSupportedVideoSendCodecPreferences = undefined;\n this.videoDuplexMode = null;\n // `poorConnectionCount`and `maxVideoTileCount` is intentionally not set to 0 across reconnections.\n }\n}\nexports.default = AudioVideoControllerState;\n//# sourceMappingURL=AudioVideoControllerState.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BlurStrengthMapper = void 0;\n/**\n * The numbers below indicate the amount of blur to apply. Larger numbers will produce\n * more blur.\n */\nconst BlurStrength = {\n LOW: 7,\n MEDIUM: 15,\n HIGH: 30,\n};\n/** @internal */\nclass BlurStrengthMapper {\n static getBlurAmount(bstrength, options) {\n if (bstrength <= 0) {\n throw new Error(`invalid value for blur strength: ${bstrength}`);\n }\n return Math.round((bstrength * options.height) / this.BLUR_STRENGTH_DIVISOR);\n }\n}\nexports.BlurStrengthMapper = BlurStrengthMapper;\nBlurStrengthMapper.BLUR_STRENGTH_DIVISOR = 540; // use 540P as baseline blur strength\nexports.default = BlurStrength;\n//# sourceMappingURL=BackgroundBlurStrength.js.map","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isValidRevisionID = exports.isValidAssetGroup = exports.resolveURL = exports.addQueryParams = exports.withQueryString = exports.withRequestHeaders = exports.fetchWithBehavior = void 0;\nfunction fetchWithBehavior(url, init, fetchBehavior) {\n if (!fetchBehavior) {\n return fetch(url, init);\n }\n const withQuery = withQueryString(url, fetchBehavior);\n const withHeaders = withRequestHeaders(init, fetchBehavior);\n return fetch(withQuery, withHeaders);\n}\nexports.fetchWithBehavior = fetchWithBehavior;\nfunction withRequestHeaders(init, fetchBehavior) {\n if (!(fetchBehavior === null || fetchBehavior === void 0 ? void 0 : fetchBehavior.headers)) {\n return init;\n }\n if (!init) {\n return {\n headers: fetchBehavior.headers,\n };\n }\n return Object.assign(Object.assign({}, init), { headers: Object.assign(Object.assign({}, init.headers || {}), fetchBehavior.headers) });\n}\nexports.withRequestHeaders = withRequestHeaders;\nfunction withQueryString(url, fetchBehavior) {\n if (!(fetchBehavior === null || fetchBehavior === void 0 ? void 0 : fetchBehavior.escapedQueryString)) {\n return url;\n }\n const hasQuery = url.lastIndexOf('?') !== -1;\n return `${url}${hasQuery ? '&' : '?'}${fetchBehavior.escapedQueryString}`;\n}\nexports.withQueryString = withQueryString;\nfunction addQueryParams(fetchBehavior, queryParams) {\n const keys = Object.keys(queryParams);\n if (!keys.length) {\n return fetchBehavior;\n }\n const params = new URLSearchParams(fetchBehavior === null || fetchBehavior === void 0 ? void 0 : fetchBehavior.escapedQueryString);\n for (const key of keys) {\n params.append(key, queryParams[key]);\n }\n return Object.assign(Object.assign({}, fetchBehavior), { escapedQueryString: params.toString() });\n}\nexports.addQueryParams = addQueryParams;\nconst HEAD_OPTIONS = {\n method: 'HEAD',\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n referrerPolicy: 'origin',\n};\nfunction resolveURL(url, fetchBehavior) {\n return fetchWithBehavior(url, HEAD_OPTIONS, fetchBehavior)\n .then(response => response.redirected ? response.url : url);\n}\nexports.resolveURL = resolveURL;\nfunction isValidAssetGroup(assetGroup) {\n return !!assetGroup && /^[-.a-zA-Z0-9]+$/.test(assetGroup);\n}\nexports.isValidAssetGroup = isValidAssetGroup;\nfunction isValidRevisionID(revisionID) {\n return !!revisionID && /^[123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ]{22}$/.test(revisionID);\n}\nexports.isValidRevisionID = isValidRevisionID;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.loadWorker = void 0;\nconst fetch_js_1 = require(\"./fetch.js\");\nconst WORKER_FETCH_OPTIONS = {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n};\nconst loadWorker = (workerURL, name, fetchBehavior, logger) => {\n logger === null || logger === void 0 ? void 0 : logger.debug(`Loading ${name} worker from ${workerURL}.`);\n let workerURLIsSameOrigin = false;\n try {\n workerURLIsSameOrigin = self.origin === (new URL(workerURL)).origin;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.error('Could not compare origins.', e);\n }\n if (workerURLIsSameOrigin) {\n const workerURLWithQuery = fetch_js_1.withQueryString(workerURL, fetchBehavior);\n return Promise.resolve(new Worker(workerURLWithQuery, { name }));\n }\n return fetch_js_1.fetchWithBehavior(workerURL, WORKER_FETCH_OPTIONS, fetchBehavior).then((res) => {\n if (res.ok) {\n return res.blob()\n .then((blob) => new Worker(window.URL.createObjectURL(blob)));\n }\n throw new Error('Fetch failed.');\n });\n};\nexports.loadWorker = loadWorker;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isOldChrome = exports.supportsWASMStreaming = exports.supportsSharedArrayBuffer = exports.supportsWASM = exports.supportsAudioWorklet = exports.supportsWorker = exports.supportsVoiceFocusWorker = exports.supportsWASMPostMessage = exports.isSafari = void 0;\nconst loader_js_1 = require(\"./loader.js\");\nconst isChrome = (global = globalThis) => {\n const ua = global.navigator.userAgent;\n return !!ua.match(/Chrom(?:e|ium)\\/([0-9]+)/);\n};\nconst isSafari = (global = globalThis) => {\n const ua = global.navigator.userAgent;\n const hasSafari = ua.match(/Safari\\//);\n const hasChrome = ua.match(/Chrom(?:e|ium)\\//);\n return !!(hasSafari && !hasChrome);\n};\nexports.isSafari = isSafari;\nconst supportsWASMPostMessage = (global = globalThis) => {\n if (exports.isSafari(global)) {\n return false;\n }\n if (isChrome(global)) {\n const version = chromeVersion(global) || 0;\n return version < 95;\n }\n return true;\n};\nexports.supportsWASMPostMessage = supportsWASMPostMessage;\nconst supportsVoiceFocusWorker = (scope = globalThis, fetchConfig, logger) => __awaiter(void 0, void 0, void 0, function* () {\n if (!exports.supportsWorker(scope, logger)) {\n return false;\n }\n const workerURL = `${fetchConfig.paths.workers}worker-v1.js`;\n try {\n const worker = yield loader_js_1.loadWorker(workerURL, 'VoiceFocusTestWorker', fetchConfig, logger);\n try {\n worker.terminate();\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.debug('Failed to terminate worker.', e);\n }\n return true;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Failed to fetch and instantiate test worker', e);\n return false;\n }\n});\nexports.supportsVoiceFocusWorker = supportsVoiceFocusWorker;\nconst supportsWorker = (scope = globalThis, logger) => {\n try {\n return !!scope.Worker;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Does not support Worker', e);\n return false;\n }\n};\nexports.supportsWorker = supportsWorker;\nconst supportsAudioWorklet = (scope = globalThis, logger) => {\n try {\n return !!scope.AudioWorklet && !!scope.AudioWorkletNode;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Does not support Audio Worklet', e);\n return false;\n }\n};\nexports.supportsAudioWorklet = supportsAudioWorklet;\nconst supportsWASM = (scope = globalThis, logger) => {\n try {\n return !!scope.WebAssembly && (!!scope.WebAssembly.compile || !!scope.WebAssembly.compileStreaming);\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Does not support WASM', e);\n return false;\n }\n};\nexports.supportsWASM = supportsWASM;\nconst supportsSharedArrayBuffer = (scope = globalThis, window = globalThis, logger) => {\n try {\n return !!scope.SharedArrayBuffer && (!!window.chrome || !!scope.crossOriginIsolated);\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Does not support SharedArrayBuffer.');\n return false;\n }\n};\nexports.supportsSharedArrayBuffer = supportsSharedArrayBuffer;\nconst supportsWASMStreaming = (scope = globalThis, logger) => {\n var _a;\n try {\n return !!((_a = scope.WebAssembly) === null || _a === void 0 ? void 0 : _a.compileStreaming);\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.info('Does not support WASM streaming compilation', e);\n return false;\n }\n};\nexports.supportsWASMStreaming = supportsWASMStreaming;\nconst SUPPORTED_CHROME_VERSION = 90;\nconst chromeVersion = (global = globalThis) => {\n try {\n if (!global.chrome) {\n return undefined;\n }\n }\n catch (e) {\n }\n const versionCheck = global.navigator.userAgent.match(/Chrom(?:e|ium)\\/([0-9]+)/);\n if (!versionCheck) {\n return undefined;\n }\n return parseInt(versionCheck[1], 10);\n};\nconst isOldChrome = (global = globalThis, logger) => {\n const version = chromeVersion(global);\n if (!version) {\n return false;\n }\n if (version < SUPPORTED_CHROME_VERSION) {\n logger === null || logger === void 0 ? void 0 : logger.debug(`Chrome ${version} has incomplete SIMD support.`);\n return true;\n }\n return false;\n};\nexports.isOldChrome = isOldChrome;\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A builder class to instantiate a model spec.\n */\nclass ModelSpecBuilder {\n constructor() {\n this.path = null;\n this.input = null;\n this.output = null;\n }\n static builder() {\n return new ModelSpecBuilder();\n }\n /**\n * Set up the builder to use the default model implementation.\n *\n * Members of this interface can change without a major version bump to accommodate new browser\n * bugs and capabilities. If you extend this type, you might need to rework your code for new minor\n * versions of this library.\n * @returns a reference to the current builder.\n */\n withDefaultModel() {\n return this.withSelfieSegmentationDefaults();\n }\n /**\n * Set up the builder to use the defaults for selfie segmentation model.\n * @returns the builder to allow for fluent API (e.g., ModelSpecBuilder.withSelfieSegmentationDefaults().build()).\n */\n withSelfieSegmentationDefaults() {\n const SELFIE_MODEL_INPUT_SHAPE = {\n height: 144,\n width: 256,\n range: [0, 1],\n channels: 3,\n };\n const SELFIE_MODEL_OUTPUT_SHAPE = {\n height: 144,\n width: 256,\n range: [0, 1],\n channels: 1,\n };\n const DEFAULT_SELFIE_MODEL_PATH = 'https://static.sdkassets.chime.aws/bgblur/models/selfie_segmentation_landscape.tflite';\n this.path = DEFAULT_SELFIE_MODEL_PATH;\n this.input = SELFIE_MODEL_INPUT_SHAPE;\n this.output = SELFIE_MODEL_OUTPUT_SHAPE;\n return this;\n }\n /**\n * A method to override the path to the segmentation model.\n * @param path A function that returns the path to the segmentation model.\n * @returns the builder to allow for fluent API (e.g., ModelSpecBuilder.builder().withPath(\"some path\").build()).\n */\n withPath(path) {\n this.path = path;\n return this;\n }\n /**\n * A method to override the input shape to the segmentation model.\n * @param input An object that defines input shape of the segmentation model.\n * @returns the builder to allow for fluent API (e.g., ModelSpecBuilder.builder().withInput({}).build()).\n */\n withInput(input) {\n this.input = input;\n return this;\n }\n /**\n * A method to override the output shape to the segmentation model.\n * @param input An object that defines input shape of the segmentation model.\n * @returns the builder to allow for fluent API (e.g., ModelSpecBuilder.builder().withOutput({}).build()).\n */\n withOutput(output) {\n this.output = output;\n return this;\n }\n /**\n * Validate that inputs to the model spec are valid.\n */\n validate() {\n if (!this.path) {\n throw new Error('model spec path is not set');\n }\n if (!this.input) {\n throw new Error('model spec input is not set');\n }\n if (!this.output) {\n throw new Error('model spec output is not set');\n }\n }\n /**\n * A method that returns an instantiated object that implements the ModelSpec interface with values set for\n * the use of the selfie segmentation model.\n * @returns an object that implements the ModelSpec interface.\n */\n build() {\n this.validate();\n return {\n path: this.path,\n input: this.input,\n output: this.output,\n };\n }\n}\nexports.default = ModelSpecBuilder;\n//# sourceMappingURL=ModelSpecBuilder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = {\n \"hash\": \"9158963\",\n \"raw\": \"v3.21.1\",\n \"semverString\": \"3.21.1\"\n};\n//# sourceMappingURL=version.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst version_1 = __importDefault(require(\"./version\"));\nclass Versioning {\n /**\n * Return string representation of SDK name\n */\n static get sdkName() {\n return 'amazon-chime-sdk-js';\n }\n /**\n * Return string representation of SDK version\n */\n static get sdkVersion() {\n return version_1.default.semverString;\n }\n /**\n * Returns the parts of the semver, so major/minor/patch can be extracted individually.\n */\n static get sdkVersionSemVer() {\n var _a, _b, _c, _d;\n const v = version_1.default.semverString.match(/^(?[0-9]+)\\.(?[0-9]+)((?:\\.(?[0-9]+))(?:-(?[a-zA-Z]+(\\.[0-9])*))?)?/);\n return {\n major: (_a = v === null || v === void 0 ? void 0 : v.groups) === null || _a === void 0 ? void 0 : _a.major,\n minor: (_b = v === null || v === void 0 ? void 0 : v.groups) === null || _b === void 0 ? void 0 : _b.minor,\n patch: (_c = v === null || v === void 0 ? void 0 : v.groups) === null || _c === void 0 ? void 0 : _c.patch,\n preRelease: (_d = v === null || v === void 0 ? void 0 : v.groups) === null || _d === void 0 ? void 0 : _d.preRelease,\n };\n }\n /**\n * Return the SHA-1 of the Git commit from which this build was created.\n */\n static get buildSHA() {\n // Skip the leading 'g'.\n return version_1.default.hash.substr(1);\n }\n /**\n * Return low-resolution string representation of SDK user agent (e.g. `chrome-78`)\n */\n static get sdkUserAgentLowResolution() {\n const browserBehavior = new DefaultBrowserBehavior_1.default();\n return `${browserBehavior.name()}-${browserBehavior.majorVersion()}`;\n }\n /**\n * Return URL with versioning information appended\n */\n static urlWithVersion(url) {\n const urlWithVersion = new URL(url);\n urlWithVersion.searchParams.append(Versioning.X_AMZN_VERSION, Versioning.sdkVersion);\n urlWithVersion.searchParams.append(Versioning.X_AMZN_USER_AGENT, Versioning.sdkUserAgentLowResolution);\n return urlWithVersion.toString();\n }\n}\nexports.default = Versioning;\nVersioning.X_AMZN_VERSION = 'X-Amzn-Version';\nVersioning.X_AMZN_USER_AGENT = 'X-Amzn-User-Agent';\n//# sourceMappingURL=Versioning.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst loader_1 = require(\"../../libs/voicefocus/loader\");\nconst support_1 = require(\"../../libs/voicefocus/support\");\nconst ModelSpecBuilder_1 = __importDefault(require(\"../backgroundblurprocessor/ModelSpecBuilder\"));\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\n/** @internal */\nconst CREATE_DEFAULT_MODEL_SPEC = () => ModelSpecBuilder_1.default.builder().withSelfieSegmentationDefaults().build();\n/** @internal */\nconst DEFAULT_CDN = 'https://static.sdkassets.chime.aws';\n/** @internal */\nconst DEFAULT_PATHS = {\n worker: `${DEFAULT_CDN}/bgblur/workers/worker.js`,\n wasm: `${DEFAULT_CDN}/bgblur/wasm/_cwt-wasm.wasm`,\n simd: `${DEFAULT_CDN}/bgblur/wasm/_cwt-wasm-simd.wasm`,\n};\nclass BackgroundFilterVideoFrameProcessor {\n /**\n * Based on the SDK version, return an asset group.\n *\n * @returns the default asset spec, based on the SDK version.\n */\n static defaultAssetSpec() {\n const version = Versioning_1.default.sdkVersionSemVer;\n return {\n assetGroup: `sdk-${version.major}.${version.minor}`,\n };\n }\n /**\n * Set the given parameters to the url. Existing parameters in the url are preserved.\n * If duplicate parameters exist, they are overwritten, so it's safe to call this method multiple\n * times on the same url.\n *\n * @param url the initial url, can include query parameters\n * @param queryParams the query parameters to set\n * @returns a new url with the given query parameters.\n */\n static createUrlWithParams(url, queryParams) {\n const u = new URL(url);\n const keys = Object.keys(queryParams);\n for (const key of keys) {\n if (queryParams[key] !== undefined) {\n u.searchParams.set(key, queryParams[key]);\n }\n }\n return u.toString();\n }\n /**\n * Based on the spec that is passed in set defaults for spec\n * @param spec the spec that was passed in\n * @returns An updated spec with defaults set\n */\n static resolveSpec(spec) {\n const { paths = DEFAULT_PATHS, model = CREATE_DEFAULT_MODEL_SPEC(), assetGroup = this.defaultAssetSpec().assetGroup, revisionID = this.defaultAssetSpec().revisionID, } = spec || {};\n const params = {\n assetGroup,\n revisionID,\n sdk: encodeURIComponent(Versioning_1.default.sdkVersion),\n ua: encodeURIComponent(Versioning_1.default.sdkUserAgentLowResolution),\n };\n paths.worker = this.createUrlWithParams(paths.worker, params);\n paths.wasm = this.createUrlWithParams(paths.wasm, params);\n paths.simd = this.createUrlWithParams(paths.simd, params);\n model.path = this.createUrlWithParams(model.path, params);\n return {\n paths,\n model,\n assetGroup,\n revisionID,\n };\n }\n /**\n * Based on the options that are passed in set defaults for options\n * @param options the options that are passed in\n * @returns An updated set of options with defaults set\n */\n static resolveOptions(options) {\n if (!options.reportingPeriodMillis) {\n options.reportingPeriodMillis = 1000;\n }\n const DEFAULT_FILTER_CPU_UTILIZATION = 30;\n if (!options.filterCPUUtilization) {\n options.filterCPUUtilization = DEFAULT_FILTER_CPU_UTILIZATION;\n }\n else if (options.filterCPUUtilization < 0 || options.filterCPUUtilization > 100) {\n options.logger.warn(`filterCPUUtilization must be set to a range between 0 and 100 percent. Falling back to default of ${DEFAULT_FILTER_CPU_UTILIZATION} percent`);\n options.filterCPUUtilization = DEFAULT_FILTER_CPU_UTILIZATION;\n }\n return options;\n }\n /**\n * This method will detect the environment in which it is being used and determine if background\n * blur/replacement can be used.\n * @param spec The {@link BackgroundBlurSpec} spec that will be used to initialize assets\n * @param options options such as logger\n * @returns a boolean promise that will resolve to true if supported and false if not\n */\n static isSupported(spec, options) {\n const { logger } = options;\n // could not figure out how to remove globalThis to test failure case\n /* istanbul ignore next */\n if (typeof globalThis === 'undefined') {\n logger.info('Browser does not have globalThis.');\n return Promise.resolve(false);\n }\n const browser = new DefaultBrowserBehavior_1.default();\n if (!browser.supportsBackgroundFilter()) {\n logger.info('Browser is not supported.');\n return Promise.resolve(false);\n }\n if (!support_1.supportsWASM(globalThis, logger)) {\n logger.info('Browser does not support WASM.');\n return Promise.resolve(false);\n }\n return this.supportsBackgroundFilter(globalThis, spec, logger);\n }\n static supportsBackgroundFilter(\n /* istanbul ignore next */\n scope = globalThis, spec, logger) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!support_1.supportsWorker(scope, logger)) {\n logger.info('Browser does not support web workers.');\n return false;\n }\n // Use the actual worker path -- it's only 20KB, and it'll get the cache warm.\n const workerURL = spec.paths.worker;\n try {\n const worker = yield loader_1.loadWorker(workerURL, 'BackgroundFilterWorker', {}, null);\n try {\n worker.terminate();\n }\n catch (e) {\n logger.info(`Failed to terminate worker. ${e.message}`);\n }\n return true;\n }\n catch (e) {\n logger.info(`Failed to fetch and instantiate test worker ${e.message}`);\n return false;\n }\n });\n }\n}\nexports.default = BackgroundFilterVideoFrameProcessor;\n//# sourceMappingURL=BackgroundFilterVideoFrameProcessor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogLevel_1 = __importDefault(require(\"./LogLevel\"));\n/**\n * ConsoleLogger writes logs with console\n *\n * ```typescript\n * // working with the ConsoleLogger\n * const logger = new ConsoleLogger('demo'); //default level is LogLevel.WARN\n * logger.info('info');\n * logger.debug('debug');\n * logger.warn('warn');\n * logger.error('error');\n *\n * // setting logging levels\n * const logger = new ConsoleLogger('demo', LogLevel.INFO)\n * logger.debug(debugFunc()); // this will not show up\n * logger.setLogLevel(LogLevel.DEBUG)\n * logger.debug(debugFunc()); // this will show up\n *\n * ```\n */\nclass ConsoleLogger {\n constructor(name, level = LogLevel_1.default.WARN) {\n this.name = name;\n this.level = level;\n }\n info(msg) {\n this.log(LogLevel_1.default.INFO, msg);\n }\n warn(msg) {\n this.log(LogLevel_1.default.WARN, msg);\n }\n error(msg) {\n this.log(LogLevel_1.default.ERROR, msg);\n }\n debug(debugFunction) {\n if (LogLevel_1.default.DEBUG < this.level) {\n return;\n }\n if (typeof debugFunction === 'string') {\n this.log(LogLevel_1.default.DEBUG, debugFunction);\n }\n else if (debugFunction) {\n this.log(LogLevel_1.default.DEBUG, debugFunction());\n }\n else {\n this.log(LogLevel_1.default.DEBUG, '' + debugFunction);\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n getLogLevel() {\n return this.level;\n }\n log(type, msg) {\n if (type < this.level) {\n return;\n }\n const timestamp = new Date().toISOString();\n const logMessage = `${timestamp} [${LogLevel_1.default[type]}] ${this.name} - ${msg}`;\n switch (type) {\n case LogLevel_1.default.ERROR:\n console.error(logMessage);\n break;\n case LogLevel_1.default.WARN:\n console.warn(logMessage);\n break;\n case LogLevel_1.default.DEBUG:\n console.debug(logMessage.replace(/\\\\r\\\\n/g, '\\n'));\n break;\n case LogLevel_1.default.INFO:\n console.info(logMessage);\n break;\n }\n }\n}\nexports.default = ConsoleLogger;\n//# sourceMappingURL=ConsoleLogger.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[NoOpVideoFrameProcessor]] implements [[VideoFrameProcessor]].\n * It's a no-op processor and input is passed to output directly.\n */\nclass NoOpVideoFrameProcessor {\n process(buffers) {\n return __awaiter(this, void 0, void 0, function* () {\n return buffers;\n });\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n}\nexports.default = NoOpVideoFrameProcessor;\n//# sourceMappingURL=NoOpVideoFrameProcessor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[CanvasVideoFrameBuffer]] implements [[VideoFrameBuffer]]. It internally holds an `HTMLCanvasElement`.\n */\nclass CanvasVideoFrameBuffer {\n constructor(canvas) {\n this.canvas = canvas;\n this.destroyed = false;\n }\n destroy() {\n this.canvas = null;\n this.destroyed = true;\n }\n asCanvasImageSource() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.destroyed) {\n return Promise.reject('canvas buffer is destroyed');\n }\n return Promise.resolve(this.canvas);\n });\n }\n asCanvasElement() {\n return this.canvas;\n }\n}\nexports.default = CanvasVideoFrameBuffer;\n//# sourceMappingURL=CanvasVideoFrameBuffer.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst FILTER_DURATION_FACTOR = 0.8;\n/**\n * The frame counter tracks frame rates of video and segmentation.\n */\n/** @internal */\nclass BackgroundFilterFrameCounter {\n constructor(delegate, reportingPeriodMillis, filterCPUUtilization, logger) {\n this.delegate = delegate;\n this.reportingPeriodMillis = reportingPeriodMillis;\n this.filterCPUUtilization = filterCPUUtilization;\n this.logger = logger;\n this._processingFilter = true;\n this.lastReportedEventTimestamp = 0;\n this.lastFilterCompleteTimestamp = 0;\n this.filterTotalMillis = 0;\n this.filterCount = 0;\n this.framerate = 0;\n this.filterDurationNotifyMillis = 0;\n this.setSegmentationDuration();\n }\n /**\n * Report events once per period.\n */\n reportEvent(timestamp) {\n const timeDiff = timestamp - this.lastReportedEventTimestamp;\n if (timeDiff >= this.reportingPeriodMillis) {\n const currentFilterCount = this.filterCount;\n const currentFilterTotalMillis = this.filterTotalMillis;\n this.filterCount = 0;\n this.filterTotalMillis = 0;\n this.lastReportedEventTimestamp = timestamp;\n // Do not send notification unless a valid framerate or segment count is set.\n if (this.framerate === 0 || currentFilterCount === 0) {\n return;\n }\n const avgFilterDurationMillis = Math.round(currentFilterTotalMillis / currentFilterCount);\n const framesDropped = Math.round(this.framerate * (timeDiff / 1000)) - currentFilterCount;\n const cpuUtilization = Math.round((100 * currentFilterTotalMillis) / timeDiff);\n if (avgFilterDurationMillis >= this.filterDurationNotifyMillis) {\n this.delegate.filterFrameDurationHigh({\n framesDropped,\n avgFilterDurationMillis,\n framerate: this.framerate,\n periodMillis: timeDiff,\n });\n }\n if (cpuUtilization >= this.filterCPUUtilization) {\n this.delegate.filterCPUUtilizationHigh({\n cpuUtilization,\n filterMillis: currentFilterTotalMillis,\n periodMillis: timeDiff,\n });\n }\n }\n }\n setSegmentationDuration() {\n // allow filtering to take up to 80% of the expected frame duration\n this.filterDurationNotifyMillis = Math.round((1000 / this.framerate) * FILTER_DURATION_FACTOR);\n }\n frameReceived(framerate) {\n if (framerate !== this.framerate) {\n this.framerate = framerate;\n this.logger.info(`frame counter setting frame rate to ${this.framerate}`);\n this.setSegmentationDuration();\n }\n const timestamp = Date.now();\n this.reportEvent(timestamp);\n }\n filterSubmitted() {\n this._processingFilter = true;\n this.lastFilterCompleteTimestamp = Date.now();\n }\n filterComplete() {\n this.filterTotalMillis += Date.now() - this.lastFilterCompleteTimestamp;\n this._processingFilter = false;\n this.filterCount++;\n }\n get processingSegment() {\n return this._processingFilter;\n }\n}\nexports.default = BackgroundFilterFrameCounter;\n//# sourceMappingURL=BackgroundFilterFrameCounter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BackgroundFilterMonitor = void 0;\nconst loader_1 = require(\"../../libs/voicefocus/loader\");\nconst CanvasVideoFrameBuffer_1 = __importDefault(require(\"../videoframeprocessor/CanvasVideoFrameBuffer\"));\nconst BackgroundFilterFrameCounter_1 = __importDefault(require(\"./BackgroundFilterFrameCounter\"));\n/** @internal */\nclass DeferredObservable {\n constructor() {\n /** Access the last-resolved value of next()\n */\n this.value = undefined;\n this.resolve = null;\n }\n /** Create a promise that resolves once next() is called\n */\n whenNext() {\n /* istanbul ignore else */\n if (!this.promise) {\n // externally-resolvable promise\n this.promise = new Promise(resolve => (this.resolve = resolve));\n }\n return this.promise;\n }\n /** Update the value and resolve\n */\n next(value) {\n // store the value, for sync access\n this.value = value;\n // resolve the promise so anyone awaiting whenNext resolves\n this.resolve(value);\n // delete the promise so future whenNext calls get a new promise\n delete this.promise;\n }\n}\n/**\n * The [[BackgroundFilterProcessor]] uses WASM and TensorFlow Lite to apply changes to the\n * background image.\n */\n/** @internal */\nclass BackgroundFilterProcessor {\n constructor(filterType, spec, options, delegate, eventController) {\n this.targetCanvas = document.createElement('canvas');\n this.canvasCtx = this.targetCanvas.getContext('2d');\n this.canvasVideoFrameBuffer = new CanvasVideoFrameBuffer_1.default(this.targetCanvas);\n this.mask$ = new DeferredObservable();\n this.sourceWidth = 0;\n this.sourceHeight = 0;\n this.frameNumber = 0;\n this.videoFramesPerFilterUpdate = 1;\n this.initWorkerPromise = BackgroundFilterProcessor.createWorkerPromise();\n this.loadModelPromise = BackgroundFilterProcessor.createWorkerPromise();\n this.modelInitialized = false;\n this.destroyed = false;\n this.filterType = filterType;\n this.validateSpec(spec);\n this.validateOptions(options);\n this.spec = spec;\n this.logger = options.logger;\n this.delegate = delegate;\n this.initCPUMonitor(options);\n this.eventController = eventController;\n }\n static createWorkerPromise() {\n const resolver = { resolve: null, reject: null, promise: null };\n resolver.promise = new Promise((resolve, reject) => {\n resolver.resolve = resolve;\n resolver.reject = reject;\n });\n return resolver;\n }\n /** Check if the input spec are not null\n */\n validateSpec(spec) {\n if (!spec) {\n throw new Error('processor has null spec');\n }\n if (!spec.model) {\n throw new Error('processor spec has null model');\n }\n if (!spec.paths) {\n throw new Error('processor spec has null paths');\n }\n }\n validateOptions(options) {\n if (!options) {\n throw new Error('processor has null options');\n }\n if (!options.logger) {\n throw new Error('processor has null options - logger');\n }\n if (!options.reportingPeriodMillis) {\n throw new Error('processor has null options - reportingPeriodMillis');\n }\n if (!options.filterCPUUtilization) {\n throw new Error('processor has null options - filterCPUUtilization');\n }\n }\n initCPUMonitor(options) {\n const CPU_MONITORING_PERIOD_MILLIS = 5000;\n const MAX_SEGMENTATION_SKIP_RATE = 10;\n const MIN_SEGMENTATION_SKIP_RATE = 1;\n this.videoFramesPerFilterUpdate = 1;\n this.frameCounter = new BackgroundFilterFrameCounter_1.default(this.delegate, options.reportingPeriodMillis, options.filterCPUUtilization, this.logger);\n this.cpuMonitor = new BackgroundFilterMonitor(CPU_MONITORING_PERIOD_MILLIS, {\n reduceCPUUtilization: () => {\n this.updateVideoFramesPerFilterUpdate(Math.min(this.videoFramesPerFilterUpdate + 1, MAX_SEGMENTATION_SKIP_RATE));\n },\n increaseCPUUtilization: () => {\n this.updateVideoFramesPerFilterUpdate(Math.max(this.videoFramesPerFilterUpdate - 1, MIN_SEGMENTATION_SKIP_RATE));\n },\n });\n this.delegate.addObserver(this.cpuMonitor);\n }\n /** Converts a value to a JSON string\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n stringify(value) {\n return JSON.stringify(value, null, 2);\n }\n /**\n * Sends a message to worker and resolves promise in response to worker's initialize event\n */\n handleInitialize(msg) {\n this.logger.info(`received initialize message: ${this.stringify(msg)}`);\n if (!msg.payload) {\n this.logger.error('failed to initialize module');\n this.initWorkerPromise.reject(new Error('failed to initialize the module'));\n return;\n }\n const model = this.spec.model;\n this.worker.postMessage({\n msg: 'loadModel',\n payload: {\n modelUrl: model.path,\n inputHeight: model.input.height,\n inputWidth: model.input.width,\n inputChannels: 4,\n modelRangeMin: model.input.range[0],\n modelRangeMax: model.input.range[1],\n blurPixels: 0,\n },\n });\n this.initWorkerPromise.resolve({});\n }\n /**\n * Resolves promise in response to worker's loadModel event\n */\n handleLoadModel(msg) {\n this.logger.info(`received load model message: ${this.stringify(msg)}`);\n if (msg.payload !== 2) {\n this.logger.error('failed to load model! status: ' + msg.payload);\n /** Rejects model promise\n */\n this.loadModelPromise.reject(new Error('failed to load model! status: ' + msg.payload));\n return;\n }\n this.modelInitialized = true;\n this.loadModelPromise.resolve({});\n }\n /** Updates the payload output value in response to worker's predict event\n */\n handlePredict(msg) {\n this.mask$.next(msg.payload.output);\n }\n /**\n * This method will handle the asynchronous messaging between the main JS thread\n * and the worker thread.\n * @param evt An event that was sent from the worker to the JS thread.\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n handleWorkerEvent(evt) {\n const msg = evt.data;\n switch (msg.msg) {\n case 'initialize':\n this.handleInitialize(msg);\n break;\n case 'loadModel':\n this.handleLoadModel(msg);\n break;\n case 'predict':\n this.handlePredict(msg);\n break;\n default:\n this.logger.info(`unexpected event msg: ${this.stringify(msg)}`);\n break;\n }\n }\n /**\n * This method initializes all of the resource necessary to processs background filter. It returns\n * a promise and resolves or rejects the promise once the initialization is complete.\n * @returns\n * @throws An error will be thrown\n */\n loadAssets() {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info('start initializing the processor');\n try {\n this.worker = yield loader_1.loadWorker(this.spec.paths.worker, 'BackgroundFilterWorker', {}, null);\n this.worker.addEventListener('message', ev => this.handleWorkerEvent(ev));\n this.worker.postMessage({\n msg: 'initialize',\n payload: {\n wasmPath: this.spec.paths.wasm,\n simdPath: this.spec.paths.simd,\n },\n });\n yield this.initWorkerPromise.promise;\n this.logger.info(`successfully initialized the ${this.filterType} worker`);\n yield this.loadModelPromise.promise;\n this.logger.info(`successfully loaded ${this.filterType} worker segmentation model`);\n }\n catch (error) {\n throw new Error(`could not initialize the ${this.filterType} video frame processor due to '${error.message}'`);\n }\n this.logger.info(`successfully initialized the ${this.filterType} processor`);\n });\n }\n /**\n * Processes the VideoFrameBuffer by applying a segmentation mask and replacing the background.\n * @param buffers object that contains the canvas element that will be used to obtain the image data to process\n * @returns the updated buffer that contains the image with the background replaced.\n */\n process(buffers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.destroyed) {\n return buffers;\n }\n this.frameCounter.frameReceived(buffers[0].framerate);\n this.cpuMonitor.frameReceived();\n const inputCanvas = buffers[0].asCanvasElement();\n if (!inputCanvas) {\n return buffers;\n }\n if (!this.modelInitialized) {\n // return existing buffer, if any\n buffers[0] = this.canvasVideoFrameBuffer;\n return buffers;\n }\n const frameWidth = inputCanvas.width;\n const frameHeight = inputCanvas.height;\n if (frameWidth === 0 || frameHeight === 0) {\n return buffers;\n }\n // on first execution of process the source width will be zero\n if (this.sourceWidth === 0) {\n this.sourceWidth = frameWidth;\n this.sourceHeight = frameHeight;\n // update target canvas size to match the frame size\n this.targetCanvas.width = this.sourceWidth;\n this.targetCanvas.height = this.sourceHeight;\n this.logger.info(`${this.filterType} source width: ${this.sourceWidth}`);\n this.logger.info(`${this.filterType} source height: ${this.sourceHeight}`);\n this.initOnFirstExecution();\n }\n if (this.sourceWidth !== frameWidth || this.sourceHeight !== frameHeight) {\n this.sourceWidth = frameWidth;\n this.sourceHeight = frameHeight;\n // update target canvas size to match the frame size\n this.targetCanvas.width = this.sourceWidth;\n this.targetCanvas.height = this.sourceHeight;\n }\n try {\n this.frameCounter.filterSubmitted();\n let mask = this.mask$.value;\n const hscale = this.spec.model.input.width / inputCanvas.width;\n const vscale = this.spec.model.input.height / inputCanvas.height;\n if (this.scaledCanvas === undefined) {\n this.scaledCanvas = document.createElement('canvas');\n this.scaledCanvas.width = this.spec.model.input.width;\n this.scaledCanvas.height = this.spec.model.input.height;\n }\n const scaledCtx = this.scaledCanvas.getContext('2d');\n scaledCtx.save();\n scaledCtx.scale(hscale, vscale);\n scaledCtx.drawImage(inputCanvas, 0, 0);\n scaledCtx.restore();\n const imageData = scaledCtx.getImageData(0, 0, this.scaledCanvas.width, this.scaledCanvas.height);\n // update the filter mask based on the filter update rate\n if (this.frameNumber % this.videoFramesPerFilterUpdate === 0) {\n // process frame...\n const maskPromise = this.mask$.whenNext();\n this.worker.postMessage({ msg: 'predict', payload: imageData }, [imageData.data.buffer]);\n mask = yield maskPromise;\n }\n // It's possible that while waiting for the predict to complete the processor was destroyed.\n // adding a destroyed check here to ensure the implementation of drawImageWithMask does not throw\n // an error due to destroyed processor.\n if (!this.destroyed) {\n this.drawImageWithMask(inputCanvas, mask);\n }\n }\n catch (error) {\n this.logger.error(`could not process ${this.filterType} frame buffer due to ${error}`);\n return buffers;\n }\n finally {\n this.frameCounter.filterComplete();\n this.frameNumber++;\n }\n buffers[0] = this.canvasVideoFrameBuffer;\n return buffers;\n });\n }\n updateVideoFramesPerFilterUpdate(newRate) {\n if (newRate !== this.videoFramesPerFilterUpdate) {\n this.videoFramesPerFilterUpdate = newRate;\n this.logger.info(`Adjusting filter rate to compensate for CPU utilization. ` +\n `Filter rate is ${this.videoFramesPerFilterUpdate} video frames per filter.`);\n }\n }\n /**\n * Clean up processor resources\n */\n destroy() {\n var _a, _b, _c, _d;\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyed = true;\n this.delegate.removeObserver(this.cpuMonitor);\n this.canvasVideoFrameBuffer.destroy();\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.postMessage({ msg: 'destroy' });\n (_b = this.worker) === null || _b === void 0 ? void 0 : _b.postMessage({ msg: 'stop' });\n (_c = this.targetCanvas) === null || _c === void 0 ? void 0 : _c.remove();\n this.targetCanvas = undefined;\n (_d = this.scaledCanvas) === null || _d === void 0 ? void 0 : _d.remove();\n this.scaledCanvas = undefined;\n this.logger.info(`${this.filterType} frame process destroyed`);\n });\n }\n}\nexports.default = BackgroundFilterProcessor;\n/** @internal */\nclass BackgroundFilterMonitor {\n constructor(monitoringPeriodMillis, observer) {\n this.monitoringPeriodMillis = monitoringPeriodMillis;\n this.observer = observer;\n this.lastCPUChangeTimestamp = 0;\n }\n filterCPUUtilizationHigh() {\n const timestamp = Date.now();\n // Allow some time to pass before we check CPU utilization.\n if (timestamp - this.lastCPUChangeTimestamp >= this.monitoringPeriodMillis) {\n this.lastCPUChangeTimestamp = timestamp;\n this.observer.reduceCPUUtilization();\n }\n }\n frameReceived() {\n const timestamp = Date.now();\n // If a enough time has passed, reset the processor and continue to monitor\n if (timestamp - this.lastCPUChangeTimestamp >= this.monitoringPeriodMillis * 2) {\n this.lastCPUChangeTimestamp = timestamp;\n this.observer.increaseCPUUtilization();\n }\n }\n}\nexports.BackgroundFilterMonitor = BackgroundFilterMonitor;\n//# sourceMappingURL=BackgroundFilterProcessor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This class adds the functionality to allow for a set of unique observers to be added to the\n * video frame processor.\n */\n/** @internal */\nclass BackgroundFilterVideoFrameProcessorDelegate {\n constructor() {\n this.observers = new Set();\n }\n /**\n * Add an observer to the unique set. If a duplicate observer cannot be added.\n * @param observer An implementation of the observer interface.\n */\n addObserver(observer) {\n this.observers.add(observer);\n }\n /**\n * Remove the observer from the set of observers.\n * @param observer An implementation of the observer interface.\n */\n removeObserver(observer) {\n this.observers.delete(observer);\n }\n /**\n * Call the observer method with the event information. See [[BackgroundFilterVideoFrameProcessorObserver]]\n * for detailed info on this event.\n * @param event\n */\n filterFrameDurationHigh(event) {\n var _a;\n for (const observer of this.observers) {\n (_a = observer.filterFrameDurationHigh) === null || _a === void 0 ? void 0 : _a.call(observer, event);\n }\n }\n filterCPUUtilizationHigh(event) {\n var _a;\n for (const observer of this.observers) {\n (_a = observer.filterCPUUtilizationHigh) === null || _a === void 0 ? void 0 : _a.call(observer, event);\n }\n }\n}\nexports.default = BackgroundFilterVideoFrameProcessorDelegate;\n//# sourceMappingURL=BackgroundFilterVideoFrameProcessorDelegate.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterVideoFrameProcessorDelegate_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterVideoFrameProcessorDelegate\"));\n/**\n * This class adds the functionality to allow for a set of unique observers to be added to the\n * video frame processor.\n */\n/** @internal */\nclass BackgroundBlurVideoFrameProcessorDelegate extends BackgroundFilterVideoFrameProcessorDelegate_1.default {\n}\nexports.default = BackgroundBlurVideoFrameProcessorDelegate;\n//# sourceMappingURL=BackgroundBlurVideoFrameProcessorDelegate.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterProcessor_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterProcessor\"));\nconst BackgroundBlurStrength_1 = require(\"./BackgroundBlurStrength\");\nconst BackgroundBlurVideoFrameProcessorDelegate_1 = __importDefault(require(\"./BackgroundBlurVideoFrameProcessorDelegate\"));\n/**\n * [[BackgroundBlurProcessorProvided]] implements [[BackgroundBlurProcessor]].\n * It's a background blur processor and input is passed into a worker that will apply a segmentation\n * to separate the foreground from the background. Then the background will have a blur applied.\n *\n * The [[BackgroundBlurProcessorProvided]] uses WASM and TensorFlow Lite to apply the blurring of the\n * background image as apposed to [[BackgroundBlurProcessorBuiltIn]] that uses the browser's built-in\n * capability to apply the blur.\n */\n/** @internal */\nclass BackgroundBlurProcessorProvided extends BackgroundFilterProcessor_1.default {\n /**\n * A constructor that will apply default values if spec and strength are not provided.\n * If no spec is provided the selfie segmentation model is used with default paths to CDN for the\n * worker and wasm files used to process each frame.\n * @param spec The spec defines the assets that will be used for adding background blur to a frame\n * @param options How much blur to apply to a frame\n */\n constructor(spec, options) {\n super('background blur', spec, options, new BackgroundBlurVideoFrameProcessorDelegate_1.default());\n this.blurAmount = 0;\n this.setBlurStrength(options.blurStrength);\n this.logger.info('BackgroundBlur processor successfully created');\n this.logger.info(`BackgroundBlur spec: ${this.stringify(this.spec)}`);\n this.logger.info(`BackgroundBlur options: ${this.stringify(options)}`);\n }\n validateOptions(options) {\n super.validateOptions(options);\n if (!options.blurStrength) {\n throw new Error('processor has null options - blurStrength');\n }\n }\n initOnFirstExecution() {\n this.setBlurPixels();\n }\n drawImageWithMask(inputCanvas, mask) {\n // Mask will not be set until the worker has completed handling the predict event. Until the first frame is processed,\n // the whole frame will be blurred.\n if (!mask) {\n mask = new ImageData(this.spec.model.input.width, this.spec.model.input.height);\n }\n const scaledCtx = this.scaledCanvas.getContext('2d');\n scaledCtx.putImageData(mask, 0, 0);\n const { canvasCtx, targetCanvas } = this;\n const { width, height } = targetCanvas;\n // draw the mask\n canvasCtx.save();\n canvasCtx.clearRect(0, 0, width, height);\n canvasCtx.drawImage(this.scaledCanvas, 0, 0, width, height);\n // Only overwrite existing pixels.\n canvasCtx.globalCompositeOperation = 'source-in';\n // draw image over mask...\n canvasCtx.drawImage(inputCanvas, 0, 0, width, height);\n // draw under person\n canvasCtx.globalCompositeOperation = 'destination-over';\n canvasCtx.filter = `blur(${this.blurAmount}px)`;\n canvasCtx.drawImage(inputCanvas, 0, 0, targetCanvas.width, targetCanvas.height);\n canvasCtx.restore();\n }\n setBlurStrength(blurStrength) {\n this._blurStrength = blurStrength;\n this.logger.info(`blur strength set to ${this._blurStrength}`);\n this.setBlurPixels();\n }\n /**\n * Calculate the blur amount based on the blur strength passed in and height of the image being blurred.\n */\n setBlurPixels() {\n this.blurAmount = BackgroundBlurStrength_1.BlurStrengthMapper.getBlurAmount(this._blurStrength, {\n height: this.sourceHeight,\n });\n this.logger.info(`background blur amount set to ${this.blurAmount}`);\n }\n addObserver(observer) {\n this.delegate.addObserver(observer);\n }\n removeObserver(observer) {\n this.delegate.removeObserver(observer);\n }\n static isSupported() {\n return __awaiter(this, void 0, void 0, function* () {\n const canvas = document.createElement('canvas');\n const supportsBlurFilter = canvas.getContext('2d').filter !== undefined;\n canvas.remove();\n return supportsBlurFilter;\n });\n }\n /** @internal */\n setEventController(eventController) {\n /*\n if this is a first time we set the eventController, need to publish the current BackgroundFilterConfig.\n Otherwise, just set the eventController.\n */\n if (this.eventController) {\n this.eventController = eventController;\n }\n else {\n this.eventController = eventController;\n this.publishBackgroundFilterEvent();\n }\n }\n publishBackgroundFilterEvent() {\n const backgroundFilterEventAttributes = {\n backgroundBlurEnabled: 'true',\n backgroundBlurStrength: this._blurStrength,\n backgroundReplacementEnabled: 'false',\n backgroundFilterVersion: 1,\n };\n this.eventController.publishEvent('backgroundFilterConfigSelected', backgroundFilterEventAttributes);\n }\n}\nexports.default = BackgroundBlurProcessorProvided;\n//# sourceMappingURL=BackgroundBlurProcessorProvided.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundBlurProcessorProvided_1 = __importDefault(require(\"./BackgroundBlurProcessorProvided\"));\nconst BackgroundBlurStrength_1 = require(\"./BackgroundBlurStrength\");\n/**\n * The [[BackgroundBlurProcessorBuiltIn]] uses the browser's built-in capability to apply blurring to\n * the background image as apposed to [[BackgroundBlurProcessorProvided]] that uses WASM and\n * TensorFlow Lite to apply the blur.\n */\n/** @internal */\nclass BackgroundBlurProcessorBuiltIn extends BackgroundBlurProcessorProvided_1.default {\n /**\n * A constructor that will apply default values if spec and strength are not provided.\n * If no spec is provided the selfie segmentation model is used with default paths to CDN for the\n * worker and wasm files used to process each frame.\n * @param spec The spec defines the assets that will be used for adding background blur to a frame.\n * @param options How much blur to apply to a frame.\n */\n constructor(spec, options) {\n super(spec, options);\n this.blurCanvas = document.createElement('canvas');\n this.blurCanvasCtx = this.blurCanvas.getContext('2d');\n this.blurCanvas.width = this.spec.model.input.width;\n this.blurCanvas.height = this.spec.model.input.height;\n this.logger.info('BackgroundBlur processor using builtin blur');\n }\n drawImageWithMask(inputCanvas, mask) {\n // Mask will not be set until the worker has completed handling the predict event. Until the first frame is processed,\n // the whole frame will be blurred.\n const blurredImage = this.blurredImage;\n const { canvasCtx, targetCanvas } = this;\n const { width, height } = targetCanvas;\n if (!mask || !blurredImage) {\n canvasCtx.clearRect(0, 0, width, height);\n return;\n }\n const scaledCtx = this.scaledCanvas.getContext('2d');\n scaledCtx.putImageData(mask, 0, 0);\n this.blurCanvasCtx.putImageData(this.blurredImage, 0, 0);\n // draw the mask\n canvasCtx.save();\n canvasCtx.clearRect(0, 0, width, height);\n canvasCtx.drawImage(this.scaledCanvas, 0, 0, width, height);\n // Only overwrite existing pixels.\n canvasCtx.globalCompositeOperation = 'source-in';\n // draw image over mask...\n canvasCtx.drawImage(inputCanvas, 0, 0, width, height);\n // draw under person\n canvasCtx.globalCompositeOperation = 'destination-over';\n canvasCtx.drawImage(this.blurCanvas, 0, 0, width, height);\n canvasCtx.restore();\n }\n setBlurStrength(blurStrength) {\n super.setBlurStrength(blurStrength);\n if (this.worker) {\n // live update\n this.modelInitialized = false;\n this.worker.postMessage({ msg: 'destroy' });\n const model = this.spec.model;\n this.worker.postMessage({\n msg: 'loadModel',\n payload: {\n modelUrl: model.path,\n inputHeight: model.input.height,\n inputWidth: model.input.width,\n inputChannels: 4,\n modelRangeMin: model.input.range[0],\n modelRangeMax: model.input.range[1],\n blurPixels: this.blurAmount,\n },\n });\n }\n }\n setBlurPixels() {\n // the blurred image is sized down to 144, regardless of what the canvas size is, so\n // we use the default blur strengths (540p)\n this.blurAmount = BackgroundBlurStrength_1.BlurStrengthMapper.getBlurAmount(this._blurStrength, { height: 540 });\n this.logger.info(`background blur amount set to ${this.blurAmount}`);\n }\n handleInitialize(msg) {\n this.logger.info(`received initialize message: ${this.stringify(msg)}`);\n if (!msg.payload) {\n this.logger.error('failed to initialize module');\n this.initWorkerPromise.reject(new Error('failed to initialize the module'));\n return;\n }\n const model = this.spec.model;\n this.worker.postMessage({\n msg: 'loadModel',\n payload: {\n modelUrl: model.path,\n inputHeight: model.input.height,\n inputWidth: model.input.width,\n inputChannels: 4,\n modelRangeMin: model.input.range[0],\n modelRangeMax: model.input.range[1],\n blurPixels: this.blurAmount,\n },\n });\n this.initWorkerPromise.resolve({});\n }\n handlePredict(msg) {\n this.blurredImage = msg.payload.blurOutput;\n super.handlePredict(msg);\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n _super.destroy.call(this);\n (_a = this.blurCanvas) === null || _a === void 0 ? void 0 : _a.remove();\n this.blurCanvas = undefined;\n });\n }\n}\nexports.default = BackgroundBlurProcessorBuiltIn;\n//# sourceMappingURL=BackgroundBlurProcessorBuiltIn.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterVideoFrameProcessor_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterVideoFrameProcessor\"));\nconst ConsoleLogger_1 = __importDefault(require(\"../logger/ConsoleLogger\"));\nconst LogLevel_1 = __importDefault(require(\"../logger/LogLevel\"));\nconst NoOpVideoFrameProcessor_1 = __importDefault(require(\"../videoframeprocessor/NoOpVideoFrameProcessor\"));\nconst BackgroundBlurProcessorBuiltIn_1 = __importDefault(require(\"./BackgroundBlurProcessorBuiltIn\"));\nconst BackgroundBlurProcessorProvided_1 = __importDefault(require(\"./BackgroundBlurProcessorProvided\"));\nconst BackgroundBlurStrength_1 = __importDefault(require(\"./BackgroundBlurStrength\"));\n/**\n * No-op implementation of the blur processor. An instance of this class will be returned when a user attempts\n * to create a blur processor when it is not supported.\n */\n/** @internal */\nclass NoOpBackgroundBlurProcessor extends NoOpVideoFrameProcessor_1.default {\n /**\n * no-op\n */\n setBlurStrength() { }\n /**\n * no-op\n * @returns\n */\n loadAssets() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * no-op\n */\n addObserver() { }\n /**\n * no-op\n */\n removeObserver() { }\n}\n/**\n * [[BackgroundBlurVideoFrameProcessor]]\n * Creates a background blur processor which identifies the foreground person and blurs the background.\n */\nclass BackgroundBlurVideoFrameProcessor extends BackgroundFilterVideoFrameProcessor_1.default {\n /**\n * A factory method that will call the private constructor to instantiate the processor and asynchronously\n * initialize the worker, wasm, and ML models. Upon completion of the initialization the promise will either\n * be resolved or rejected.\n * @param spec The spec defines the assets that will be used for adding background blur to a frame\n * @param blurStrength How much blur to apply to a frame\n * @returns\n */\n static create(spec, options) {\n return __awaiter(this, void 0, void 0, function* () {\n spec = BackgroundBlurVideoFrameProcessor.resolveSpec(spec);\n options = BackgroundBlurVideoFrameProcessor.resolveOptions(options);\n const { logger } = options;\n const supported = yield BackgroundBlurVideoFrameProcessor.isSupported(spec, options);\n // if blur is not supported do not initialize. The processor will become a no op if not supported.\n logger.info(`processor is ${supported ? '' : 'not'} supported`);\n if (!supported) {\n logger.warn('Using no-op processor because background blur is not supported');\n return new NoOpBackgroundBlurProcessor();\n }\n let processor;\n if (yield BackgroundBlurProcessorProvided_1.default.isSupported()) {\n logger.info('Using browser-provided background blur');\n processor = new BackgroundBlurProcessorProvided_1.default(spec, options);\n }\n else {\n logger.info('Using built-in background blur');\n processor = new BackgroundBlurProcessorBuiltIn_1.default(spec, options);\n }\n yield processor.loadAssets();\n return processor;\n });\n }\n /**\n * Based on the options that are passed in set defaults for options\n * @param options the options that are passed in\n * @returns An updated set of options with defaults set\n */\n static resolveOptions(options = {}) {\n let processorOptions = Object.assign({}, options);\n if (!processorOptions.blurStrength) {\n processorOptions.blurStrength = BackgroundBlurStrength_1.default.MEDIUM;\n }\n if (!processorOptions.logger) {\n processorOptions.logger = new ConsoleLogger_1.default('BackgroundBlurProcessor', LogLevel_1.default.INFO);\n }\n processorOptions = super.resolveOptions(processorOptions);\n return processorOptions;\n }\n /**\n * This method will detect the environment in which it is being used and determine if background\n * blur can be used.\n * @param spec The {@link BackgroundBlurSpec} spec that will be used to initialize assets\n * @param options options such as logger\n * @returns a boolean promise that will resolve to true if supported and false if not\n */\n static isSupported(spec, options) {\n spec = BackgroundBlurVideoFrameProcessor.resolveSpec(spec);\n options = BackgroundBlurVideoFrameProcessor.resolveOptions(options);\n return super.isSupported(spec, options);\n }\n}\nexports.default = BackgroundBlurVideoFrameProcessor;\n//# sourceMappingURL=BackgroundBlurVideoFrameProcessor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterVideoFrameProcessorDelegate_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterVideoFrameProcessorDelegate\"));\n/**\n * This class adds the functionality to allow for a set of unique observers to be added to the\n * video frame processor.\n */\n/** @internal */\nclass BackgroundReplacementVideoFrameProcessorDelegate extends BackgroundFilterVideoFrameProcessorDelegate_1.default {\n}\nexports.default = BackgroundReplacementVideoFrameProcessorDelegate;\n//# sourceMappingURL=BackgroundReplacementVideoFrameProcessorDelegate.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterProcessor_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterProcessor\"));\nconst BackgroundReplacementVideoFrameProcessorDelegate_1 = __importDefault(require(\"./BackgroundReplacementVideoFrameProcessorDelegate\"));\n/**\n * [[BackgroundReplacementFilter]] implements [[BackgroundReplacementProcessor]].\n * It's a background replacement processor and input is passed into a worker that will apply a segmentation\n * to separate the foreground from the background. Then the background will have a replacement applied.\n *\n * The [[BackgroundReplacementProcessorProvided]] uses WASM and TensorFlow Lite to apply replacement of the\n * background image.\n */\n/** @internal */\nclass BackgroundReplacementFilter extends BackgroundFilterProcessor_1.default {\n /**\n * A constructor that will apply default values if spec and strength are not provided.\n * If no spec is provided the selfie segmentation model is used with default paths to CDN for the\n * worker and wasm files used to process each frame.\n * @param spec The spec defines the assets that will be used for adding background filter to a frame\n * @param options The background replacement image path\n */\n constructor(spec, options) {\n super('background replacement', spec, options, new BackgroundReplacementVideoFrameProcessorDelegate_1.default());\n this.replacementBlob = options.imageBlob;\n this.logger.info('BackgroundReplacement processor successfully created');\n this.logger.info(`BackgroundReplacement spec: ${this.stringify(this.spec)}`);\n this.logger.info(`BackgroundReplacement options: ${this.stringify(options)}`);\n }\n setImageBlob(blob) {\n return __awaiter(this, void 0, void 0, function* () {\n this.replacementBlob = blob;\n this.replacementImage = yield BackgroundReplacementFilter.loadImage(this.createReplacementObjectUrl());\n });\n }\n initOnFirstExecution() { }\n drawImageWithMask(inputCanvas, mask) {\n // Mask will not be set until the worker has completed handling the predict event. Until the first frame is processed,\n // the whole frame will be replaced.\n if (!mask) {\n mask = new ImageData(this.spec.model.input.width, this.spec.model.input.height);\n }\n const scaledCtx = this.scaledCanvas.getContext('2d');\n scaledCtx.putImageData(mask, 0, 0);\n const { canvasCtx, targetCanvas } = this;\n const { width, height } = targetCanvas;\n // draw the mask\n canvasCtx.save();\n canvasCtx.clearRect(0, 0, width, height);\n canvasCtx.drawImage(this.scaledCanvas, 0, 0, width, height);\n // Only overwrite existing pixels.\n canvasCtx.globalCompositeOperation = 'source-in';\n // draw image over mask...\n canvasCtx.drawImage(inputCanvas, 0, 0, width, height);\n // draw under person\n canvasCtx.globalCompositeOperation = 'destination-over';\n canvasCtx.drawImage(this.replacementImage, 0, 0, targetCanvas.width, targetCanvas.height);\n canvasCtx.restore();\n }\n /* istanbul ignore next */\n static loadImageExecutor(resolve, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject, imageUrl) {\n const image = new Image();\n image.crossOrigin = 'Anonymous';\n image.addEventListener('load', () => {\n resolve(image);\n }, false);\n image.addEventListener('error', error => {\n reject(new Error(`Could not load replacement image ${image.src}: ${error.message}`));\n }, false);\n image.src = imageUrl;\n }\n /** @internal */\n static loadImage(imageUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => this.loadImageExecutor(resolve, reject, imageUrl));\n });\n }\n revokeReplacementObjectUrl() {\n if (this.replacementObjectUrl) {\n URL.revokeObjectURL(this.replacementObjectUrl);\n }\n }\n createReplacementObjectUrl() {\n this.revokeReplacementObjectUrl();\n this.replacementObjectUrl = URL.createObjectURL(this.replacementBlob);\n return this.replacementObjectUrl;\n }\n /**\n * This method initializes all of the resource necessary to process background replacement. It returns\n * a promise and resolves or rejects the promise once the initialization is complete.\n * @returns\n * @throws An error will be thrown\n */\n loadAssets() {\n const _super = Object.create(null, {\n loadAssets: { get: () => super.loadAssets }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.replacementImage = yield BackgroundReplacementFilter.loadImage(this.createReplacementObjectUrl());\n _super.loadAssets.call(this);\n return;\n });\n }\n addObserver(observer) {\n this.delegate.addObserver(observer);\n }\n removeObserver(observer) {\n this.delegate.removeObserver(observer);\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n _super.destroy.call(this);\n this.revokeReplacementObjectUrl();\n });\n }\n /** @internal */\n setEventController(eventController) {\n /*\n if this is a first time we set the eventController, need to publish the current BackgroundFilterConfig.\n Otherwise, just set the eventController.\n */\n if (this.eventController) {\n this.eventController = eventController;\n }\n else {\n this.eventController = eventController;\n this.publishBackgroundFilterEvent();\n }\n }\n publishBackgroundFilterEvent() {\n const backgroundFilterEventAttributes = {\n backgroundBlurEnabled: 'false',\n backgroundBlurStrength: 'low',\n backgroundReplacementEnabled: 'true',\n backgroundFilterVersion: 1,\n };\n this.eventController.publishEvent('backgroundFilterConfigSelected', backgroundFilterEventAttributes);\n }\n}\nexports.default = BackgroundReplacementFilter;\n//# sourceMappingURL=BackgroundReplacementFilter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BackgroundFilterVideoFrameProcessor_1 = __importDefault(require(\"../backgroundfilter/BackgroundFilterVideoFrameProcessor\"));\nconst ConsoleLogger_1 = __importDefault(require(\"../logger/ConsoleLogger\"));\nconst LogLevel_1 = __importDefault(require(\"../logger/LogLevel\"));\nconst NoOpVideoFrameProcessor_1 = __importDefault(require(\"../videoframeprocessor/NoOpVideoFrameProcessor\"));\nconst BackgroundReplacementFilter_1 = __importDefault(require(\"./BackgroundReplacementFilter\"));\n/**\n * No-op implementation of the background replacement processor. An instance of this class will be returned when a user attempts\n * to create a background replacement processor when it is not supported.\n */\n/** @internal */\nclass NoOpBackgroundReplacementProcessor extends NoOpVideoFrameProcessor_1.default {\n /**\n * no-op\n * @returns\n */\n loadAssets() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * no-op\n */\n addObserver() { }\n /**\n * no-op\n */\n removeObserver() { }\n /**\n * no-op\n */\n setImageBlob() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n}\n/**\n * [[BackgroundReplacementVideoFrameProcessor]]\n * Creates a background replacement processor which identifies the foreground person and replaces the background.\n */\nclass BackgroundReplacementVideoFrameProcessor extends BackgroundFilterVideoFrameProcessor_1.default {\n /**\n * A factory method that will call the private constructor to instantiate the processor and asynchronously\n * initialize the worker, wasm, and ML models. Upon completion of the initialization the promise will either\n * be resolved or rejected.\n * @param spec The spec defines the assets that will be used for adding background filter to a frame\n * @param imagePath The background replacement image path\n */\n static create(spec, options) {\n return __awaiter(this, void 0, void 0, function* () {\n spec = this.resolveSpec(spec);\n options = this.resolveOptions(options);\n yield this.resolveOptionsAsync(options);\n const { logger } = options;\n const supported = yield BackgroundReplacementVideoFrameProcessor.isSupported(spec, options);\n // if background replacement is not supported do not initialize. The processor will become a no op if not supported.\n if (!supported) {\n logger.warn('Using no-op processor because background replacement is not supported');\n return new NoOpBackgroundReplacementProcessor();\n }\n logger.info('Using background replacement filter');\n const processor = new BackgroundReplacementFilter_1.default(spec, options);\n yield processor.loadAssets();\n return processor;\n });\n }\n /**\n * Based on the options that are passed in set defaults for options\n * @param options the options that are passed in\n * @returns An updated set of options with defaults set\n */\n static resolveOptions(options = {}) {\n const processorOptions = Object.assign({}, options);\n if (!processorOptions.logger) {\n processorOptions.logger = new ConsoleLogger_1.default('BackgroundReplacementProcessor', LogLevel_1.default.INFO);\n }\n return super.resolveOptions(processorOptions);\n }\n static resolveOptionsAsync(options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!options.imageBlob) {\n const canvas = document.createElement('canvas');\n canvas.width = 100;\n canvas.height = 100;\n const ctx = canvas.getContext('2d');\n ctx.fillStyle = 'blue';\n ctx.fillRect(0, 0, 100, 100);\n const blob = yield new Promise(resolve => {\n canvas.toBlob(resolve);\n });\n options.imageBlob = blob;\n }\n return;\n });\n }\n /**\n * This method will detect the environment in which it is being used and determine if background\n * replacement can be used.\n * @param spec The {@link BackgroundFilterSpec} spec that will be used to initialize assets\n * @param options options such as logger and imagePath\n * @returns a boolean promise that will resolve to true if supported and false if not\n */\n static isSupported(spec, options) {\n const _super = Object.create(null, {\n isSupported: { get: () => super.isSupported }\n });\n return __awaiter(this, void 0, void 0, function* () {\n spec = this.resolveSpec(spec);\n options = this.resolveOptions(options);\n yield this.resolveOptionsAsync(options);\n const imageBlob = options.imageBlob;\n const imageUrl = URL.createObjectURL(imageBlob);\n try {\n yield BackgroundReplacementFilter_1.default.loadImage(imageUrl);\n }\n catch (e) {\n options.logger.info(`Failed to fetch load replacement image ${e.message}`);\n return false;\n }\n finally {\n URL.revokeObjectURL(imageUrl);\n }\n return _super.isSupported.call(this, spec, options);\n });\n }\n}\nexports.default = BackgroundReplacementVideoFrameProcessor;\n//# sourceMappingURL=BackgroundReplacementVideoFrameProcessor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass BaseConnectionHealthPolicy {\n constructor(configuration, data, name) {\n this.minHealth = configuration.minHealth;\n this.maxHealth = configuration.maxHealth;\n this.currentHealth = configuration.initialHealth;\n this.currentData = data.clone();\n this.name = name;\n }\n minimumHealth() {\n return this.minHealth;\n }\n maximumHealth() {\n return this.maxHealth;\n }\n health() {\n return this.maximumHealth();\n }\n update(connectionHealthData) {\n this.currentData = connectionHealthData;\n }\n getConnectionHealthData() {\n return this.currentData.clone();\n }\n healthy() {\n return this.health() > this.minimumHealth();\n }\n healthIfChanged() {\n const newHealth = this.health();\n if (newHealth !== this.currentHealth) {\n this.currentHealth = newHealth;\n return newHealth;\n }\n return null;\n }\n}\nexports.default = BaseConnectionHealthPolicy;\n//# sourceMappingURL=BaseConnectionHealthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass BitrateParameters {\n}\nexports.default = BitrateParameters;\n//# sourceMappingURL=BitrateParameters.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass CSPMonitor {\n /* istanbul ignore next */\n static register() {\n if (!('document' in global) || !document.addEventListener) {\n return;\n }\n if (CSPMonitor.shouldRegisterCSPMonitor) {\n if (!CSPMonitor.added) {\n document.addEventListener('securitypolicyviolation', CSPMonitor.listener);\n CSPMonitor.added = true;\n }\n }\n }\n /* istanbul ignore next */\n static unregister() {\n if (!('document' in global) || !document.removeEventListener) {\n return;\n }\n document.removeEventListener('securitypolicyviolation', CSPMonitor.listener);\n CSPMonitor.loggers = new Set();\n CSPMonitor.added = false;\n }\n static disable() {\n CSPMonitor.shouldRegisterCSPMonitor = false;\n CSPMonitor.unregister();\n }\n static addLogger(logger) {\n if (logger) {\n CSPMonitor.loggers.add(logger);\n }\n }\n static removeLogger(logger) {\n if (logger) {\n CSPMonitor.loggers.delete(logger);\n }\n }\n}\nexports.default = CSPMonitor;\nCSPMonitor.loggers = new Set();\nCSPMonitor.shouldRegisterCSPMonitor = true;\nCSPMonitor.added = false;\n/* istanbul ignore next */\nCSPMonitor.listener = (event) => {\n const message = 'Security Policy Violation\\n' +\n `Blocked URI: ${event.blockedURI}\\n` +\n `Violated Directive: ${event.violatedDirective}\\n` +\n `Original Policy: ${event.originalPolicy}\\n` +\n `Document URI: ${event.documentURI}\\n` +\n `Source File: ${event.sourceFile}\\n` +\n `Line No.: ${event.lineNumber}\\n`;\n for (const logger of CSPMonitor.loggers) {\n logger.error(message);\n }\n if (CSPMonitor.loggers.size === 0) {\n console.error(message);\n }\n};\n//# sourceMappingURL=CSPMonitor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckAudioConnectivityFeedback = void 0;\nvar CheckAudioConnectivityFeedback;\n(function (CheckAudioConnectivityFeedback) {\n CheckAudioConnectivityFeedback[CheckAudioConnectivityFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckAudioConnectivityFeedback[CheckAudioConnectivityFeedback[\"AudioInputRequestFailed\"] = 1] = \"AudioInputRequestFailed\";\n CheckAudioConnectivityFeedback[CheckAudioConnectivityFeedback[\"AudioInputPermissionDenied\"] = 2] = \"AudioInputPermissionDenied\";\n CheckAudioConnectivityFeedback[CheckAudioConnectivityFeedback[\"ConnectionFailed\"] = 3] = \"ConnectionFailed\";\n CheckAudioConnectivityFeedback[CheckAudioConnectivityFeedback[\"AudioNotReceived\"] = 4] = \"AudioNotReceived\";\n})(CheckAudioConnectivityFeedback = exports.CheckAudioConnectivityFeedback || (exports.CheckAudioConnectivityFeedback = {}));\nexports.default = CheckAudioConnectivityFeedback;\n//# sourceMappingURL=CheckAudioConnectivityFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckAudioInputFeedback = void 0;\nvar CheckAudioInputFeedback;\n(function (CheckAudioInputFeedback) {\n CheckAudioInputFeedback[CheckAudioInputFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckAudioInputFeedback[CheckAudioInputFeedback[\"Failed\"] = 1] = \"Failed\";\n CheckAudioInputFeedback[CheckAudioInputFeedback[\"PermissionDenied\"] = 2] = \"PermissionDenied\";\n})(CheckAudioInputFeedback = exports.CheckAudioInputFeedback || (exports.CheckAudioInputFeedback = {}));\nexports.default = CheckAudioInputFeedback;\n//# sourceMappingURL=CheckAudioInputFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckAudioOutputFeedback = void 0;\nvar CheckAudioOutputFeedback;\n(function (CheckAudioOutputFeedback) {\n CheckAudioOutputFeedback[CheckAudioOutputFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckAudioOutputFeedback[CheckAudioOutputFeedback[\"Failed\"] = 1] = \"Failed\";\n})(CheckAudioOutputFeedback = exports.CheckAudioOutputFeedback || (exports.CheckAudioOutputFeedback = {}));\nexports.default = CheckAudioOutputFeedback;\n//# sourceMappingURL=CheckAudioOutputFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckCameraResolutionFeedback = void 0;\nvar CheckCameraResolutionFeedback;\n(function (CheckCameraResolutionFeedback) {\n CheckCameraResolutionFeedback[CheckCameraResolutionFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckCameraResolutionFeedback[CheckCameraResolutionFeedback[\"Failed\"] = 1] = \"Failed\";\n CheckCameraResolutionFeedback[CheckCameraResolutionFeedback[\"ResolutionNotSupported\"] = 2] = \"ResolutionNotSupported\";\n CheckCameraResolutionFeedback[CheckCameraResolutionFeedback[\"PermissionDenied\"] = 3] = \"PermissionDenied\";\n})(CheckCameraResolutionFeedback = exports.CheckCameraResolutionFeedback || (exports.CheckCameraResolutionFeedback = {}));\nexports.default = CheckCameraResolutionFeedback;\n//# sourceMappingURL=CheckCameraResolutionFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckContentShareConnectivityFeedback = void 0;\nvar CheckContentShareConnectivityFeedback;\n(function (CheckContentShareConnectivityFeedback) {\n CheckContentShareConnectivityFeedback[CheckContentShareConnectivityFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckContentShareConnectivityFeedback[CheckContentShareConnectivityFeedback[\"Failed\"] = 1] = \"Failed\";\n CheckContentShareConnectivityFeedback[CheckContentShareConnectivityFeedback[\"PermissionDenied\"] = 2] = \"PermissionDenied\";\n CheckContentShareConnectivityFeedback[CheckContentShareConnectivityFeedback[\"TimedOut\"] = 3] = \"TimedOut\";\n CheckContentShareConnectivityFeedback[CheckContentShareConnectivityFeedback[\"ConnectionFailed\"] = 4] = \"ConnectionFailed\";\n})(CheckContentShareConnectivityFeedback = exports.CheckContentShareConnectivityFeedback || (exports.CheckContentShareConnectivityFeedback = {}));\nexports.default = CheckContentShareConnectivityFeedback;\n//# sourceMappingURL=CheckContentShareConnectivityFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckNetworkTCPConnectivityFeedback = void 0;\nvar CheckNetworkTCPConnectivityFeedback;\n(function (CheckNetworkTCPConnectivityFeedback) {\n CheckNetworkTCPConnectivityFeedback[CheckNetworkTCPConnectivityFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckNetworkTCPConnectivityFeedback[CheckNetworkTCPConnectivityFeedback[\"MeetingSessionURLsNotInitialized\"] = 1] = \"MeetingSessionURLsNotInitialized\";\n CheckNetworkTCPConnectivityFeedback[CheckNetworkTCPConnectivityFeedback[\"ConnectionFailed\"] = 2] = \"ConnectionFailed\";\n CheckNetworkTCPConnectivityFeedback[CheckNetworkTCPConnectivityFeedback[\"ICENegotiationFailed\"] = 3] = \"ICENegotiationFailed\";\n})(CheckNetworkTCPConnectivityFeedback = exports.CheckNetworkTCPConnectivityFeedback || (exports.CheckNetworkTCPConnectivityFeedback = {}));\nexports.default = CheckNetworkTCPConnectivityFeedback;\n//# sourceMappingURL=CheckNetworkTCPConnectivityFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckNetworkUDPConnectivityFeedback = void 0;\nvar CheckNetworkUDPConnectivityFeedback;\n(function (CheckNetworkUDPConnectivityFeedback) {\n CheckNetworkUDPConnectivityFeedback[CheckNetworkUDPConnectivityFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckNetworkUDPConnectivityFeedback[CheckNetworkUDPConnectivityFeedback[\"MeetingSessionURLsNotInitialized\"] = 1] = \"MeetingSessionURLsNotInitialized\";\n CheckNetworkUDPConnectivityFeedback[CheckNetworkUDPConnectivityFeedback[\"ConnectionFailed\"] = 2] = \"ConnectionFailed\";\n CheckNetworkUDPConnectivityFeedback[CheckNetworkUDPConnectivityFeedback[\"ICENegotiationFailed\"] = 3] = \"ICENegotiationFailed\";\n})(CheckNetworkUDPConnectivityFeedback = exports.CheckNetworkUDPConnectivityFeedback || (exports.CheckNetworkUDPConnectivityFeedback = {}));\nexports.default = CheckNetworkUDPConnectivityFeedback;\n//# sourceMappingURL=CheckNetworkUDPConnectivityFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckVideoConnectivityFeedback = void 0;\nvar CheckVideoConnectivityFeedback;\n(function (CheckVideoConnectivityFeedback) {\n CheckVideoConnectivityFeedback[CheckVideoConnectivityFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckVideoConnectivityFeedback[CheckVideoConnectivityFeedback[\"VideoInputRequestFailed\"] = 1] = \"VideoInputRequestFailed\";\n CheckVideoConnectivityFeedback[CheckVideoConnectivityFeedback[\"VideoInputPermissionDenied\"] = 2] = \"VideoInputPermissionDenied\";\n CheckVideoConnectivityFeedback[CheckVideoConnectivityFeedback[\"ConnectionFailed\"] = 3] = \"ConnectionFailed\";\n CheckVideoConnectivityFeedback[CheckVideoConnectivityFeedback[\"VideoNotSent\"] = 4] = \"VideoNotSent\";\n})(CheckVideoConnectivityFeedback = exports.CheckVideoConnectivityFeedback || (exports.CheckVideoConnectivityFeedback = {}));\nexports.default = CheckVideoConnectivityFeedback;\n//# sourceMappingURL=CheckVideoConnectivityFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CheckVideoInputFeedback = void 0;\nvar CheckVideoInputFeedback;\n(function (CheckVideoInputFeedback) {\n CheckVideoInputFeedback[CheckVideoInputFeedback[\"Succeeded\"] = 0] = \"Succeeded\";\n CheckVideoInputFeedback[CheckVideoInputFeedback[\"Failed\"] = 1] = \"Failed\";\n CheckVideoInputFeedback[CheckVideoInputFeedback[\"PermissionDenied\"] = 2] = \"PermissionDenied\";\n})(CheckVideoInputFeedback = exports.CheckVideoInputFeedback || (exports.CheckVideoInputFeedback = {}));\nexports.default = CheckVideoInputFeedback;\n//# sourceMappingURL=CheckVideoInputFeedback.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\nclass CleanRestartedSessionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'CleanRestartedSessionTask';\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.resetConnectionSpecificState();\n });\n }\n}\nexports.default = CleanRestartedSessionTask;\n//# sourceMappingURL=CleanRestartedSessionTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SignalingClientEventType = void 0;\n/** Defines the event types generated by SignalingClient and the underlying WebSocket connection. */\nvar SignalingClientEventType;\n(function (SignalingClientEventType) {\n SignalingClientEventType[SignalingClientEventType[\"WebSocketConnecting\"] = 0] = \"WebSocketConnecting\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketOpen\"] = 1] = \"WebSocketOpen\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketError\"] = 2] = \"WebSocketError\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketClosing\"] = 3] = \"WebSocketClosing\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketClosed\"] = 4] = \"WebSocketClosed\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketFailed\"] = 5] = \"WebSocketFailed\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketMessage\"] = 6] = \"WebSocketMessage\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketSendMessageFailure\"] = 7] = \"WebSocketSendMessageFailure\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketSentMessage\"] = 8] = \"WebSocketSentMessage\";\n SignalingClientEventType[SignalingClientEventType[\"ProtocolDecodeFailure\"] = 9] = \"ProtocolDecodeFailure\";\n SignalingClientEventType[SignalingClientEventType[\"ReceivedSignalFrame\"] = 10] = \"ReceivedSignalFrame\";\n SignalingClientEventType[SignalingClientEventType[\"WebSocketSkippedMessage\"] = 11] = \"WebSocketSkippedMessage\";\n})(SignalingClientEventType = exports.SignalingClientEventType || (exports.SignalingClientEventType = {}));\nexports.default = SignalingClientEventType;\n//# sourceMappingURL=SignalingClientEventType.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * `CleanStoppedSessionTask` permenently cleans up all components of `AudioVideoControllerState` after a stop call.\n */\nclass CleanStoppedSessionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'CleanStoppedSessionTask';\n this.taskCanceler = null;\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (this.context.signalingClient.ready()) {\n this.context.signalingClient.closeConnection();\n yield this.receiveWebSocketClosedEvent();\n }\n }\n catch (error) {\n throw error;\n }\n finally {\n for (const observer of this.context.removableObservers) {\n observer.removeObserver();\n }\n this.context.resetConnectionSpecificState();\n this.context.statsCollector.stop();\n this.context.statsCollector = null;\n this.context.connectionMonitor.stop();\n this.context.connectionMonitor = null;\n if (this.context.videoUplinkBandwidthPolicy.setTransceiverController) {\n this.context.videoUplinkBandwidthPolicy.setTransceiverController(undefined);\n }\n if (this.context.videoDownlinkBandwidthPolicy.bindToTileController) {\n this.context.videoDownlinkBandwidthPolicy.bindToTileController(undefined);\n }\n // This state may be reused to join another conference, so clear out all the existing video tiles\n const tile = this.context.videoTileController.getLocalVideoTile();\n if (tile) {\n tile.bindVideoStream('', true, null, null, null, null);\n }\n this.context.videoTileController.removeAllVideoTiles();\n }\n });\n }\n receiveWebSocketClosedEvent() {\n return new Promise((resolve, reject) => {\n class Interceptor {\n constructor(signalingClient) {\n this.signalingClient = signalingClient;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n reject(new Error(`CleanStoppedSessionTask got canceled while waiting for the WebSocket closed event`));\n }\n handleSignalingClientEvent(event) {\n if (event.type === SignalingClientEventType_1.default.WebSocketClosed) {\n this.signalingClient.removeObserver(this);\n resolve();\n }\n }\n }\n const interceptor = new Interceptor(this.context.signalingClient);\n this.taskCanceler = interceptor;\n this.context.signalingClient.registerObserver(interceptor);\n });\n }\n}\nexports.default = CleanStoppedSessionTask;\n//# sourceMappingURL=CleanStoppedSessionTask.js.map","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.} dst Destination object\n * @param {Object.} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n CustomError.prototype = Object.create(Error.prototype, {\n constructor: {\n value: CustomError,\n writable: true,\n enumerable: false,\n configurable: true,\n },\n name: {\n get: function get() { return name; },\n set: undefined,\n enumerable: false,\n // configurable: false would accurately preserve the behavior of\n // the original, but I'm guessing that was not intentional.\n // For an actual error subclass, this property would\n // be configurable.\n configurable: true,\n },\n toString: {\n value: function value() { return this.name + \": \" + this.message; },\n writable: true,\n enumerable: false,\n configurable: true,\n },\n });\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message\n * @constructor\n * @param {string} message Error message\n * @param {Object.} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n\n if (start === end) { // fix for IE 10/Win8 and others' subarray returning array of size 1\n var nativeBuffer = util.Buffer;\n return nativeBuffer\n ? nativeBuffer.alloc(0)\n : new this.buf.constructor(0);\n }\n return this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message\n * @template TRes extends Message\n * @type {function}\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod} method Reflected or static method\n * @param {Constructor} requestCtor Request constructor\n * @param {Constructor} responseCtor Response constructor\n * @param {TReq|Properties} request Request message or plain object\n * @param {rpc.ServiceMethodCallback} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message\n * @template TRes extends Message\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\n$root.SdkSignalFrame = (function() {\n\n /**\n * Properties of a SdkSignalFrame.\n * @name ISdkSignalFrame\n * @interface ISdkSignalFrame\n * @property {number|Long} timestampMs SdkSignalFrame timestampMs\n * @property {SdkSignalFrame.Type} type SdkSignalFrame type\n * @property {ISdkErrorFrame|null} [error] SdkSignalFrame error\n * @property {ISdkJoinFrame|null} [join] SdkSignalFrame join\n * @property {ISdkJoinAckFrame|null} [joinack] SdkSignalFrame joinack\n * @property {ISdkSubscribeFrame|null} [sub] SdkSignalFrame sub\n * @property {ISdkSubscribeAckFrame|null} [suback] SdkSignalFrame suback\n * @property {ISdkIndexFrame|null} [index] SdkSignalFrame index\n * @property {ISdkPauseResumeFrame|null} [pause] SdkSignalFrame pause\n * @property {ISdkLeaveFrame|null} [leave] SdkSignalFrame leave\n * @property {ISdkLeaveAckFrame|null} [leaveAck] SdkSignalFrame leaveAck\n * @property {ISdkBitrateFrame|null} [bitrates] SdkSignalFrame bitrates\n * @property {ISdkAudioControlFrame|null} [audioControl] SdkSignalFrame audioControl\n * @property {ISdkAudioMetadataFrame|null} [audioMetadata] SdkSignalFrame audioMetadata\n * @property {ISdkAudioStreamIdInfoFrame|null} [audioStreamIdInfo] SdkSignalFrame audioStreamIdInfo\n * @property {ISdkPingPongFrame|null} [pingPong] SdkSignalFrame pingPong\n * @property {ISdkAudioStatusFrame|null} [audioStatus] SdkSignalFrame audioStatus\n * @property {ISdkClientMetricFrame|null} [clientMetric] SdkSignalFrame clientMetric\n * @property {ISdkDataMessageFrame|null} [dataMessage] SdkSignalFrame dataMessage\n * @property {ISdkRemoteVideoUpdateFrame|null} [remoteVideoUpdate] SdkSignalFrame remoteVideoUpdate\n * @property {ISdkPrimaryMeetingJoinFrame|null} [primaryMeetingJoin] SdkSignalFrame primaryMeetingJoin\n * @property {ISdkPrimaryMeetingJoinAckFrame|null} [primaryMeetingJoinAck] SdkSignalFrame primaryMeetingJoinAck\n * @property {ISdkPrimaryMeetingLeaveFrame|null} [primaryMeetingLeave] SdkSignalFrame primaryMeetingLeave\n * @property {ISdkNotificationFrame|null} [notification] SdkSignalFrame notification\n */\n\n /**\n * Constructs a new SdkSignalFrame.\n * @name SdkSignalFrame\n * @classdesc Represents a SdkSignalFrame.\n * @implements ISdkSignalFrame\n * @constructor\n * @param {ISdkSignalFrame=} [properties] Properties to set\n */\n function SdkSignalFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkSignalFrame timestampMs.\n * @member {number|Long} timestampMs\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.timestampMs = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * SdkSignalFrame type.\n * @member {SdkSignalFrame.Type} type\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.type = 1;\n\n /**\n * SdkSignalFrame error.\n * @member {ISdkErrorFrame|null|undefined} error\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.error = null;\n\n /**\n * SdkSignalFrame join.\n * @member {ISdkJoinFrame|null|undefined} join\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.join = null;\n\n /**\n * SdkSignalFrame joinack.\n * @member {ISdkJoinAckFrame|null|undefined} joinack\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.joinack = null;\n\n /**\n * SdkSignalFrame sub.\n * @member {ISdkSubscribeFrame|null|undefined} sub\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.sub = null;\n\n /**\n * SdkSignalFrame suback.\n * @member {ISdkSubscribeAckFrame|null|undefined} suback\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.suback = null;\n\n /**\n * SdkSignalFrame index.\n * @member {ISdkIndexFrame|null|undefined} index\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.index = null;\n\n /**\n * SdkSignalFrame pause.\n * @member {ISdkPauseResumeFrame|null|undefined} pause\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.pause = null;\n\n /**\n * SdkSignalFrame leave.\n * @member {ISdkLeaveFrame|null|undefined} leave\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.leave = null;\n\n /**\n * SdkSignalFrame leaveAck.\n * @member {ISdkLeaveAckFrame|null|undefined} leaveAck\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.leaveAck = null;\n\n /**\n * SdkSignalFrame bitrates.\n * @member {ISdkBitrateFrame|null|undefined} bitrates\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.bitrates = null;\n\n /**\n * SdkSignalFrame audioControl.\n * @member {ISdkAudioControlFrame|null|undefined} audioControl\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.audioControl = null;\n\n /**\n * SdkSignalFrame audioMetadata.\n * @member {ISdkAudioMetadataFrame|null|undefined} audioMetadata\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.audioMetadata = null;\n\n /**\n * SdkSignalFrame audioStreamIdInfo.\n * @member {ISdkAudioStreamIdInfoFrame|null|undefined} audioStreamIdInfo\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.audioStreamIdInfo = null;\n\n /**\n * SdkSignalFrame pingPong.\n * @member {ISdkPingPongFrame|null|undefined} pingPong\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.pingPong = null;\n\n /**\n * SdkSignalFrame audioStatus.\n * @member {ISdkAudioStatusFrame|null|undefined} audioStatus\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.audioStatus = null;\n\n /**\n * SdkSignalFrame clientMetric.\n * @member {ISdkClientMetricFrame|null|undefined} clientMetric\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.clientMetric = null;\n\n /**\n * SdkSignalFrame dataMessage.\n * @member {ISdkDataMessageFrame|null|undefined} dataMessage\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.dataMessage = null;\n\n /**\n * SdkSignalFrame remoteVideoUpdate.\n * @member {ISdkRemoteVideoUpdateFrame|null|undefined} remoteVideoUpdate\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.remoteVideoUpdate = null;\n\n /**\n * SdkSignalFrame primaryMeetingJoin.\n * @member {ISdkPrimaryMeetingJoinFrame|null|undefined} primaryMeetingJoin\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.primaryMeetingJoin = null;\n\n /**\n * SdkSignalFrame primaryMeetingJoinAck.\n * @member {ISdkPrimaryMeetingJoinAckFrame|null|undefined} primaryMeetingJoinAck\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.primaryMeetingJoinAck = null;\n\n /**\n * SdkSignalFrame primaryMeetingLeave.\n * @member {ISdkPrimaryMeetingLeaveFrame|null|undefined} primaryMeetingLeave\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.primaryMeetingLeave = null;\n\n /**\n * SdkSignalFrame notification.\n * @member {ISdkNotificationFrame|null|undefined} notification\n * @memberof SdkSignalFrame\n * @instance\n */\n SdkSignalFrame.prototype.notification = null;\n\n /**\n * Creates a new SdkSignalFrame instance using the specified properties.\n * @function create\n * @memberof SdkSignalFrame\n * @static\n * @param {ISdkSignalFrame=} [properties] Properties to set\n * @returns {SdkSignalFrame} SdkSignalFrame instance\n */\n SdkSignalFrame.create = function create(properties) {\n return new SdkSignalFrame(properties);\n };\n\n /**\n * Encodes the specified SdkSignalFrame message. Does not implicitly {@link SdkSignalFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkSignalFrame\n * @static\n * @param {ISdkSignalFrame} message SdkSignalFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSignalFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n writer.uint32(/* id 1, wireType 0 =*/8).uint64(message.timestampMs);\n writer.uint32(/* id 2, wireType 0 =*/16).int32(message.type);\n if (message.error != null && Object.hasOwnProperty.call(message, \"error\"))\n $root.SdkErrorFrame.encode(message.error, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n if (message.join != null && Object.hasOwnProperty.call(message, \"join\"))\n $root.SdkJoinFrame.encode(message.join, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n if (message.joinack != null && Object.hasOwnProperty.call(message, \"joinack\"))\n $root.SdkJoinAckFrame.encode(message.joinack, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n if (message.sub != null && Object.hasOwnProperty.call(message, \"sub\"))\n $root.SdkSubscribeFrame.encode(message.sub, writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\n if (message.suback != null && Object.hasOwnProperty.call(message, \"suback\"))\n $root.SdkSubscribeAckFrame.encode(message.suback, writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();\n if (message.index != null && Object.hasOwnProperty.call(message, \"index\"))\n $root.SdkIndexFrame.encode(message.index, writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\n if (message.pause != null && Object.hasOwnProperty.call(message, \"pause\"))\n $root.SdkPauseResumeFrame.encode(message.pause, writer.uint32(/* id 10, wireType 2 =*/82).fork()).ldelim();\n if (message.leave != null && Object.hasOwnProperty.call(message, \"leave\"))\n $root.SdkLeaveFrame.encode(message.leave, writer.uint32(/* id 11, wireType 2 =*/90).fork()).ldelim();\n if (message.leaveAck != null && Object.hasOwnProperty.call(message, \"leaveAck\"))\n $root.SdkLeaveAckFrame.encode(message.leaveAck, writer.uint32(/* id 12, wireType 2 =*/98).fork()).ldelim();\n if (message.bitrates != null && Object.hasOwnProperty.call(message, \"bitrates\"))\n $root.SdkBitrateFrame.encode(message.bitrates, writer.uint32(/* id 14, wireType 2 =*/114).fork()).ldelim();\n if (message.audioControl != null && Object.hasOwnProperty.call(message, \"audioControl\"))\n $root.SdkAudioControlFrame.encode(message.audioControl, writer.uint32(/* id 17, wireType 2 =*/138).fork()).ldelim();\n if (message.audioMetadata != null && Object.hasOwnProperty.call(message, \"audioMetadata\"))\n $root.SdkAudioMetadataFrame.encode(message.audioMetadata, writer.uint32(/* id 18, wireType 2 =*/146).fork()).ldelim();\n if (message.audioStreamIdInfo != null && Object.hasOwnProperty.call(message, \"audioStreamIdInfo\"))\n $root.SdkAudioStreamIdInfoFrame.encode(message.audioStreamIdInfo, writer.uint32(/* id 19, wireType 2 =*/154).fork()).ldelim();\n if (message.pingPong != null && Object.hasOwnProperty.call(message, \"pingPong\"))\n $root.SdkPingPongFrame.encode(message.pingPong, writer.uint32(/* id 20, wireType 2 =*/162).fork()).ldelim();\n if (message.audioStatus != null && Object.hasOwnProperty.call(message, \"audioStatus\"))\n $root.SdkAudioStatusFrame.encode(message.audioStatus, writer.uint32(/* id 21, wireType 2 =*/170).fork()).ldelim();\n if (message.clientMetric != null && Object.hasOwnProperty.call(message, \"clientMetric\"))\n $root.SdkClientMetricFrame.encode(message.clientMetric, writer.uint32(/* id 22, wireType 2 =*/178).fork()).ldelim();\n if (message.dataMessage != null && Object.hasOwnProperty.call(message, \"dataMessage\"))\n $root.SdkDataMessageFrame.encode(message.dataMessage, writer.uint32(/* id 23, wireType 2 =*/186).fork()).ldelim();\n if (message.remoteVideoUpdate != null && Object.hasOwnProperty.call(message, \"remoteVideoUpdate\"))\n $root.SdkRemoteVideoUpdateFrame.encode(message.remoteVideoUpdate, writer.uint32(/* id 25, wireType 2 =*/202).fork()).ldelim();\n if (message.primaryMeetingJoin != null && Object.hasOwnProperty.call(message, \"primaryMeetingJoin\"))\n $root.SdkPrimaryMeetingJoinFrame.encode(message.primaryMeetingJoin, writer.uint32(/* id 26, wireType 2 =*/210).fork()).ldelim();\n if (message.primaryMeetingJoinAck != null && Object.hasOwnProperty.call(message, \"primaryMeetingJoinAck\"))\n $root.SdkPrimaryMeetingJoinAckFrame.encode(message.primaryMeetingJoinAck, writer.uint32(/* id 27, wireType 2 =*/218).fork()).ldelim();\n if (message.primaryMeetingLeave != null && Object.hasOwnProperty.call(message, \"primaryMeetingLeave\"))\n $root.SdkPrimaryMeetingLeaveFrame.encode(message.primaryMeetingLeave, writer.uint32(/* id 28, wireType 2 =*/226).fork()).ldelim();\n if (message.notification != null && Object.hasOwnProperty.call(message, \"notification\"))\n $root.SdkNotificationFrame.encode(message.notification, writer.uint32(/* id 35, wireType 2 =*/282).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkSignalFrame message, length delimited. Does not implicitly {@link SdkSignalFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkSignalFrame\n * @static\n * @param {ISdkSignalFrame} message SdkSignalFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSignalFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkSignalFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkSignalFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkSignalFrame} SdkSignalFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSignalFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSignalFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.timestampMs = reader.uint64();\n break;\n }\n case 2: {\n message.type = reader.int32();\n break;\n }\n case 3: {\n message.error = $root.SdkErrorFrame.decode(reader, reader.uint32());\n break;\n }\n case 4: {\n message.join = $root.SdkJoinFrame.decode(reader, reader.uint32());\n break;\n }\n case 5: {\n message.joinack = $root.SdkJoinAckFrame.decode(reader, reader.uint32());\n break;\n }\n case 6: {\n message.sub = $root.SdkSubscribeFrame.decode(reader, reader.uint32());\n break;\n }\n case 7: {\n message.suback = $root.SdkSubscribeAckFrame.decode(reader, reader.uint32());\n break;\n }\n case 8: {\n message.index = $root.SdkIndexFrame.decode(reader, reader.uint32());\n break;\n }\n case 10: {\n message.pause = $root.SdkPauseResumeFrame.decode(reader, reader.uint32());\n break;\n }\n case 11: {\n message.leave = $root.SdkLeaveFrame.decode(reader, reader.uint32());\n break;\n }\n case 12: {\n message.leaveAck = $root.SdkLeaveAckFrame.decode(reader, reader.uint32());\n break;\n }\n case 14: {\n message.bitrates = $root.SdkBitrateFrame.decode(reader, reader.uint32());\n break;\n }\n case 17: {\n message.audioControl = $root.SdkAudioControlFrame.decode(reader, reader.uint32());\n break;\n }\n case 18: {\n message.audioMetadata = $root.SdkAudioMetadataFrame.decode(reader, reader.uint32());\n break;\n }\n case 19: {\n message.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.decode(reader, reader.uint32());\n break;\n }\n case 20: {\n message.pingPong = $root.SdkPingPongFrame.decode(reader, reader.uint32());\n break;\n }\n case 21: {\n message.audioStatus = $root.SdkAudioStatusFrame.decode(reader, reader.uint32());\n break;\n }\n case 22: {\n message.clientMetric = $root.SdkClientMetricFrame.decode(reader, reader.uint32());\n break;\n }\n case 23: {\n message.dataMessage = $root.SdkDataMessageFrame.decode(reader, reader.uint32());\n break;\n }\n case 25: {\n message.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.decode(reader, reader.uint32());\n break;\n }\n case 26: {\n message.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.decode(reader, reader.uint32());\n break;\n }\n case 27: {\n message.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.decode(reader, reader.uint32());\n break;\n }\n case 28: {\n message.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.decode(reader, reader.uint32());\n break;\n }\n case 35: {\n message.notification = $root.SdkNotificationFrame.decode(reader, reader.uint32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n if (!message.hasOwnProperty(\"timestampMs\"))\n throw $util.ProtocolError(\"missing required 'timestampMs'\", { instance: message });\n if (!message.hasOwnProperty(\"type\"))\n throw $util.ProtocolError(\"missing required 'type'\", { instance: message });\n return message;\n };\n\n /**\n * Decodes a SdkSignalFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkSignalFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkSignalFrame} SdkSignalFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSignalFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkSignalFrame message.\n * @function verify\n * @memberof SdkSignalFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkSignalFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (!$util.isInteger(message.timestampMs) && !(message.timestampMs && $util.isInteger(message.timestampMs.low) && $util.isInteger(message.timestampMs.high)))\n return \"timestampMs: integer|Long expected\";\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 7:\n case 8:\n case 9:\n case 10:\n case 13:\n case 16:\n case 17:\n case 18:\n case 19:\n case 20:\n case 21:\n case 22:\n case 24:\n case 25:\n case 26:\n case 27:\n case 34:\n break;\n }\n if (message.error != null && message.hasOwnProperty(\"error\")) {\n var error = $root.SdkErrorFrame.verify(message.error);\n if (error)\n return \"error.\" + error;\n }\n if (message.join != null && message.hasOwnProperty(\"join\")) {\n var error = $root.SdkJoinFrame.verify(message.join);\n if (error)\n return \"join.\" + error;\n }\n if (message.joinack != null && message.hasOwnProperty(\"joinack\")) {\n var error = $root.SdkJoinAckFrame.verify(message.joinack);\n if (error)\n return \"joinack.\" + error;\n }\n if (message.sub != null && message.hasOwnProperty(\"sub\")) {\n var error = $root.SdkSubscribeFrame.verify(message.sub);\n if (error)\n return \"sub.\" + error;\n }\n if (message.suback != null && message.hasOwnProperty(\"suback\")) {\n var error = $root.SdkSubscribeAckFrame.verify(message.suback);\n if (error)\n return \"suback.\" + error;\n }\n if (message.index != null && message.hasOwnProperty(\"index\")) {\n var error = $root.SdkIndexFrame.verify(message.index);\n if (error)\n return \"index.\" + error;\n }\n if (message.pause != null && message.hasOwnProperty(\"pause\")) {\n var error = $root.SdkPauseResumeFrame.verify(message.pause);\n if (error)\n return \"pause.\" + error;\n }\n if (message.leave != null && message.hasOwnProperty(\"leave\")) {\n var error = $root.SdkLeaveFrame.verify(message.leave);\n if (error)\n return \"leave.\" + error;\n }\n if (message.leaveAck != null && message.hasOwnProperty(\"leaveAck\")) {\n var error = $root.SdkLeaveAckFrame.verify(message.leaveAck);\n if (error)\n return \"leaveAck.\" + error;\n }\n if (message.bitrates != null && message.hasOwnProperty(\"bitrates\")) {\n var error = $root.SdkBitrateFrame.verify(message.bitrates);\n if (error)\n return \"bitrates.\" + error;\n }\n if (message.audioControl != null && message.hasOwnProperty(\"audioControl\")) {\n var error = $root.SdkAudioControlFrame.verify(message.audioControl);\n if (error)\n return \"audioControl.\" + error;\n }\n if (message.audioMetadata != null && message.hasOwnProperty(\"audioMetadata\")) {\n var error = $root.SdkAudioMetadataFrame.verify(message.audioMetadata);\n if (error)\n return \"audioMetadata.\" + error;\n }\n if (message.audioStreamIdInfo != null && message.hasOwnProperty(\"audioStreamIdInfo\")) {\n var error = $root.SdkAudioStreamIdInfoFrame.verify(message.audioStreamIdInfo);\n if (error)\n return \"audioStreamIdInfo.\" + error;\n }\n if (message.pingPong != null && message.hasOwnProperty(\"pingPong\")) {\n var error = $root.SdkPingPongFrame.verify(message.pingPong);\n if (error)\n return \"pingPong.\" + error;\n }\n if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\")) {\n var error = $root.SdkAudioStatusFrame.verify(message.audioStatus);\n if (error)\n return \"audioStatus.\" + error;\n }\n if (message.clientMetric != null && message.hasOwnProperty(\"clientMetric\")) {\n var error = $root.SdkClientMetricFrame.verify(message.clientMetric);\n if (error)\n return \"clientMetric.\" + error;\n }\n if (message.dataMessage != null && message.hasOwnProperty(\"dataMessage\")) {\n var error = $root.SdkDataMessageFrame.verify(message.dataMessage);\n if (error)\n return \"dataMessage.\" + error;\n }\n if (message.remoteVideoUpdate != null && message.hasOwnProperty(\"remoteVideoUpdate\")) {\n var error = $root.SdkRemoteVideoUpdateFrame.verify(message.remoteVideoUpdate);\n if (error)\n return \"remoteVideoUpdate.\" + error;\n }\n if (message.primaryMeetingJoin != null && message.hasOwnProperty(\"primaryMeetingJoin\")) {\n var error = $root.SdkPrimaryMeetingJoinFrame.verify(message.primaryMeetingJoin);\n if (error)\n return \"primaryMeetingJoin.\" + error;\n }\n if (message.primaryMeetingJoinAck != null && message.hasOwnProperty(\"primaryMeetingJoinAck\")) {\n var error = $root.SdkPrimaryMeetingJoinAckFrame.verify(message.primaryMeetingJoinAck);\n if (error)\n return \"primaryMeetingJoinAck.\" + error;\n }\n if (message.primaryMeetingLeave != null && message.hasOwnProperty(\"primaryMeetingLeave\")) {\n var error = $root.SdkPrimaryMeetingLeaveFrame.verify(message.primaryMeetingLeave);\n if (error)\n return \"primaryMeetingLeave.\" + error;\n }\n if (message.notification != null && message.hasOwnProperty(\"notification\")) {\n var error = $root.SdkNotificationFrame.verify(message.notification);\n if (error)\n return \"notification.\" + error;\n }\n return null;\n };\n\n /**\n * Creates a SdkSignalFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkSignalFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkSignalFrame} SdkSignalFrame\n */\n SdkSignalFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkSignalFrame)\n return object;\n var message = new $root.SdkSignalFrame();\n if (object.timestampMs != null)\n if ($util.Long)\n (message.timestampMs = $util.Long.fromValue(object.timestampMs)).unsigned = true;\n else if (typeof object.timestampMs === \"string\")\n message.timestampMs = parseInt(object.timestampMs, 10);\n else if (typeof object.timestampMs === \"number\")\n message.timestampMs = object.timestampMs;\n else if (typeof object.timestampMs === \"object\")\n message.timestampMs = new $util.LongBits(object.timestampMs.low >>> 0, object.timestampMs.high >>> 0).toNumber(true);\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"JOIN\":\n case 1:\n message.type = 1;\n break;\n case \"JOIN_ACK\":\n case 2:\n message.type = 2;\n break;\n case \"SUBSCRIBE\":\n case 3:\n message.type = 3;\n break;\n case \"SUBSCRIBE_ACK\":\n case 4:\n message.type = 4;\n break;\n case \"INDEX\":\n case 5:\n message.type = 5;\n break;\n case \"PAUSE\":\n case 7:\n message.type = 7;\n break;\n case \"RESUME\":\n case 8:\n message.type = 8;\n break;\n case \"LEAVE\":\n case 9:\n message.type = 9;\n break;\n case \"LEAVE_ACK\":\n case 10:\n message.type = 10;\n break;\n case \"BITRATES\":\n case 13:\n message.type = 13;\n break;\n case \"AUDIO_CONTROL\":\n case 16:\n message.type = 16;\n break;\n case \"AUDIO_METADATA\":\n case 17:\n message.type = 17;\n break;\n case \"AUDIO_STREAM_ID_INFO\":\n case 18:\n message.type = 18;\n break;\n case \"PING_PONG\":\n case 19:\n message.type = 19;\n break;\n case \"AUDIO_STATUS\":\n case 20:\n message.type = 20;\n break;\n case \"CLIENT_METRIC\":\n case 21:\n message.type = 21;\n break;\n case \"DATA_MESSAGE\":\n case 22:\n message.type = 22;\n break;\n case \"REMOTE_VIDEO_UPDATE\":\n case 24:\n message.type = 24;\n break;\n case \"PRIMARY_MEETING_JOIN\":\n case 25:\n message.type = 25;\n break;\n case \"PRIMARY_MEETING_JOIN_ACK\":\n case 26:\n message.type = 26;\n break;\n case \"PRIMARY_MEETING_LEAVE\":\n case 27:\n message.type = 27;\n break;\n case \"NOTIFICATION\":\n case 34:\n message.type = 34;\n break;\n }\n if (object.error != null) {\n if (typeof object.error !== \"object\")\n throw TypeError(\".SdkSignalFrame.error: object expected\");\n message.error = $root.SdkErrorFrame.fromObject(object.error);\n }\n if (object.join != null) {\n if (typeof object.join !== \"object\")\n throw TypeError(\".SdkSignalFrame.join: object expected\");\n message.join = $root.SdkJoinFrame.fromObject(object.join);\n }\n if (object.joinack != null) {\n if (typeof object.joinack !== \"object\")\n throw TypeError(\".SdkSignalFrame.joinack: object expected\");\n message.joinack = $root.SdkJoinAckFrame.fromObject(object.joinack);\n }\n if (object.sub != null) {\n if (typeof object.sub !== \"object\")\n throw TypeError(\".SdkSignalFrame.sub: object expected\");\n message.sub = $root.SdkSubscribeFrame.fromObject(object.sub);\n }\n if (object.suback != null) {\n if (typeof object.suback !== \"object\")\n throw TypeError(\".SdkSignalFrame.suback: object expected\");\n message.suback = $root.SdkSubscribeAckFrame.fromObject(object.suback);\n }\n if (object.index != null) {\n if (typeof object.index !== \"object\")\n throw TypeError(\".SdkSignalFrame.index: object expected\");\n message.index = $root.SdkIndexFrame.fromObject(object.index);\n }\n if (object.pause != null) {\n if (typeof object.pause !== \"object\")\n throw TypeError(\".SdkSignalFrame.pause: object expected\");\n message.pause = $root.SdkPauseResumeFrame.fromObject(object.pause);\n }\n if (object.leave != null) {\n if (typeof object.leave !== \"object\")\n throw TypeError(\".SdkSignalFrame.leave: object expected\");\n message.leave = $root.SdkLeaveFrame.fromObject(object.leave);\n }\n if (object.leaveAck != null) {\n if (typeof object.leaveAck !== \"object\")\n throw TypeError(\".SdkSignalFrame.leaveAck: object expected\");\n message.leaveAck = $root.SdkLeaveAckFrame.fromObject(object.leaveAck);\n }\n if (object.bitrates != null) {\n if (typeof object.bitrates !== \"object\")\n throw TypeError(\".SdkSignalFrame.bitrates: object expected\");\n message.bitrates = $root.SdkBitrateFrame.fromObject(object.bitrates);\n }\n if (object.audioControl != null) {\n if (typeof object.audioControl !== \"object\")\n throw TypeError(\".SdkSignalFrame.audioControl: object expected\");\n message.audioControl = $root.SdkAudioControlFrame.fromObject(object.audioControl);\n }\n if (object.audioMetadata != null) {\n if (typeof object.audioMetadata !== \"object\")\n throw TypeError(\".SdkSignalFrame.audioMetadata: object expected\");\n message.audioMetadata = $root.SdkAudioMetadataFrame.fromObject(object.audioMetadata);\n }\n if (object.audioStreamIdInfo != null) {\n if (typeof object.audioStreamIdInfo !== \"object\")\n throw TypeError(\".SdkSignalFrame.audioStreamIdInfo: object expected\");\n message.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.fromObject(object.audioStreamIdInfo);\n }\n if (object.pingPong != null) {\n if (typeof object.pingPong !== \"object\")\n throw TypeError(\".SdkSignalFrame.pingPong: object expected\");\n message.pingPong = $root.SdkPingPongFrame.fromObject(object.pingPong);\n }\n if (object.audioStatus != null) {\n if (typeof object.audioStatus !== \"object\")\n throw TypeError(\".SdkSignalFrame.audioStatus: object expected\");\n message.audioStatus = $root.SdkAudioStatusFrame.fromObject(object.audioStatus);\n }\n if (object.clientMetric != null) {\n if (typeof object.clientMetric !== \"object\")\n throw TypeError(\".SdkSignalFrame.clientMetric: object expected\");\n message.clientMetric = $root.SdkClientMetricFrame.fromObject(object.clientMetric);\n }\n if (object.dataMessage != null) {\n if (typeof object.dataMessage !== \"object\")\n throw TypeError(\".SdkSignalFrame.dataMessage: object expected\");\n message.dataMessage = $root.SdkDataMessageFrame.fromObject(object.dataMessage);\n }\n if (object.remoteVideoUpdate != null) {\n if (typeof object.remoteVideoUpdate !== \"object\")\n throw TypeError(\".SdkSignalFrame.remoteVideoUpdate: object expected\");\n message.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.fromObject(object.remoteVideoUpdate);\n }\n if (object.primaryMeetingJoin != null) {\n if (typeof object.primaryMeetingJoin !== \"object\")\n throw TypeError(\".SdkSignalFrame.primaryMeetingJoin: object expected\");\n message.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.fromObject(object.primaryMeetingJoin);\n }\n if (object.primaryMeetingJoinAck != null) {\n if (typeof object.primaryMeetingJoinAck !== \"object\")\n throw TypeError(\".SdkSignalFrame.primaryMeetingJoinAck: object expected\");\n message.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.fromObject(object.primaryMeetingJoinAck);\n }\n if (object.primaryMeetingLeave != null) {\n if (typeof object.primaryMeetingLeave !== \"object\")\n throw TypeError(\".SdkSignalFrame.primaryMeetingLeave: object expected\");\n message.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.fromObject(object.primaryMeetingLeave);\n }\n if (object.notification != null) {\n if (typeof object.notification !== \"object\")\n throw TypeError(\".SdkSignalFrame.notification: object expected\");\n message.notification = $root.SdkNotificationFrame.fromObject(object.notification);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkSignalFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkSignalFrame\n * @static\n * @param {SdkSignalFrame} message SdkSignalFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkSignalFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n if ($util.Long) {\n var long = new $util.Long(0, 0, true);\n object.timestampMs = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.timestampMs = options.longs === String ? \"0\" : 0;\n object.type = options.enums === String ? \"JOIN\" : 1;\n object.error = null;\n object.join = null;\n object.joinack = null;\n object.sub = null;\n object.suback = null;\n object.index = null;\n object.pause = null;\n object.leave = null;\n object.leaveAck = null;\n object.bitrates = null;\n object.audioControl = null;\n object.audioMetadata = null;\n object.audioStreamIdInfo = null;\n object.pingPong = null;\n object.audioStatus = null;\n object.clientMetric = null;\n object.dataMessage = null;\n object.remoteVideoUpdate = null;\n object.primaryMeetingJoin = null;\n object.primaryMeetingJoinAck = null;\n object.primaryMeetingLeave = null;\n object.notification = null;\n }\n if (message.timestampMs != null && message.hasOwnProperty(\"timestampMs\"))\n if (typeof message.timestampMs === \"number\")\n object.timestampMs = options.longs === String ? String(message.timestampMs) : message.timestampMs;\n else\n object.timestampMs = options.longs === String ? $util.Long.prototype.toString.call(message.timestampMs) : options.longs === Number ? new $util.LongBits(message.timestampMs.low >>> 0, message.timestampMs.high >>> 0).toNumber(true) : message.timestampMs;\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkSignalFrame.Type[message.type] === undefined ? message.type : $root.SdkSignalFrame.Type[message.type] : message.type;\n if (message.error != null && message.hasOwnProperty(\"error\"))\n object.error = $root.SdkErrorFrame.toObject(message.error, options);\n if (message.join != null && message.hasOwnProperty(\"join\"))\n object.join = $root.SdkJoinFrame.toObject(message.join, options);\n if (message.joinack != null && message.hasOwnProperty(\"joinack\"))\n object.joinack = $root.SdkJoinAckFrame.toObject(message.joinack, options);\n if (message.sub != null && message.hasOwnProperty(\"sub\"))\n object.sub = $root.SdkSubscribeFrame.toObject(message.sub, options);\n if (message.suback != null && message.hasOwnProperty(\"suback\"))\n object.suback = $root.SdkSubscribeAckFrame.toObject(message.suback, options);\n if (message.index != null && message.hasOwnProperty(\"index\"))\n object.index = $root.SdkIndexFrame.toObject(message.index, options);\n if (message.pause != null && message.hasOwnProperty(\"pause\"))\n object.pause = $root.SdkPauseResumeFrame.toObject(message.pause, options);\n if (message.leave != null && message.hasOwnProperty(\"leave\"))\n object.leave = $root.SdkLeaveFrame.toObject(message.leave, options);\n if (message.leaveAck != null && message.hasOwnProperty(\"leaveAck\"))\n object.leaveAck = $root.SdkLeaveAckFrame.toObject(message.leaveAck, options);\n if (message.bitrates != null && message.hasOwnProperty(\"bitrates\"))\n object.bitrates = $root.SdkBitrateFrame.toObject(message.bitrates, options);\n if (message.audioControl != null && message.hasOwnProperty(\"audioControl\"))\n object.audioControl = $root.SdkAudioControlFrame.toObject(message.audioControl, options);\n if (message.audioMetadata != null && message.hasOwnProperty(\"audioMetadata\"))\n object.audioMetadata = $root.SdkAudioMetadataFrame.toObject(message.audioMetadata, options);\n if (message.audioStreamIdInfo != null && message.hasOwnProperty(\"audioStreamIdInfo\"))\n object.audioStreamIdInfo = $root.SdkAudioStreamIdInfoFrame.toObject(message.audioStreamIdInfo, options);\n if (message.pingPong != null && message.hasOwnProperty(\"pingPong\"))\n object.pingPong = $root.SdkPingPongFrame.toObject(message.pingPong, options);\n if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n object.audioStatus = $root.SdkAudioStatusFrame.toObject(message.audioStatus, options);\n if (message.clientMetric != null && message.hasOwnProperty(\"clientMetric\"))\n object.clientMetric = $root.SdkClientMetricFrame.toObject(message.clientMetric, options);\n if (message.dataMessage != null && message.hasOwnProperty(\"dataMessage\"))\n object.dataMessage = $root.SdkDataMessageFrame.toObject(message.dataMessage, options);\n if (message.remoteVideoUpdate != null && message.hasOwnProperty(\"remoteVideoUpdate\"))\n object.remoteVideoUpdate = $root.SdkRemoteVideoUpdateFrame.toObject(message.remoteVideoUpdate, options);\n if (message.primaryMeetingJoin != null && message.hasOwnProperty(\"primaryMeetingJoin\"))\n object.primaryMeetingJoin = $root.SdkPrimaryMeetingJoinFrame.toObject(message.primaryMeetingJoin, options);\n if (message.primaryMeetingJoinAck != null && message.hasOwnProperty(\"primaryMeetingJoinAck\"))\n object.primaryMeetingJoinAck = $root.SdkPrimaryMeetingJoinAckFrame.toObject(message.primaryMeetingJoinAck, options);\n if (message.primaryMeetingLeave != null && message.hasOwnProperty(\"primaryMeetingLeave\"))\n object.primaryMeetingLeave = $root.SdkPrimaryMeetingLeaveFrame.toObject(message.primaryMeetingLeave, options);\n if (message.notification != null && message.hasOwnProperty(\"notification\"))\n object.notification = $root.SdkNotificationFrame.toObject(message.notification, options);\n return object;\n };\n\n /**\n * Converts this SdkSignalFrame to JSON.\n * @function toJSON\n * @memberof SdkSignalFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkSignalFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkSignalFrame\n * @function getTypeUrl\n * @memberof SdkSignalFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkSignalFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkSignalFrame\";\n };\n\n /**\n * Type enum.\n * @name SdkSignalFrame.Type\n * @enum {number}\n * @property {number} JOIN=1 JOIN value\n * @property {number} JOIN_ACK=2 JOIN_ACK value\n * @property {number} SUBSCRIBE=3 SUBSCRIBE value\n * @property {number} SUBSCRIBE_ACK=4 SUBSCRIBE_ACK value\n * @property {number} INDEX=5 INDEX value\n * @property {number} PAUSE=7 PAUSE value\n * @property {number} RESUME=8 RESUME value\n * @property {number} LEAVE=9 LEAVE value\n * @property {number} LEAVE_ACK=10 LEAVE_ACK value\n * @property {number} BITRATES=13 BITRATES value\n * @property {number} AUDIO_CONTROL=16 AUDIO_CONTROL value\n * @property {number} AUDIO_METADATA=17 AUDIO_METADATA value\n * @property {number} AUDIO_STREAM_ID_INFO=18 AUDIO_STREAM_ID_INFO value\n * @property {number} PING_PONG=19 PING_PONG value\n * @property {number} AUDIO_STATUS=20 AUDIO_STATUS value\n * @property {number} CLIENT_METRIC=21 CLIENT_METRIC value\n * @property {number} DATA_MESSAGE=22 DATA_MESSAGE value\n * @property {number} REMOTE_VIDEO_UPDATE=24 REMOTE_VIDEO_UPDATE value\n * @property {number} PRIMARY_MEETING_JOIN=25 PRIMARY_MEETING_JOIN value\n * @property {number} PRIMARY_MEETING_JOIN_ACK=26 PRIMARY_MEETING_JOIN_ACK value\n * @property {number} PRIMARY_MEETING_LEAVE=27 PRIMARY_MEETING_LEAVE value\n * @property {number} NOTIFICATION=34 NOTIFICATION value\n */\n SdkSignalFrame.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"JOIN\"] = 1;\n values[valuesById[2] = \"JOIN_ACK\"] = 2;\n values[valuesById[3] = \"SUBSCRIBE\"] = 3;\n values[valuesById[4] = \"SUBSCRIBE_ACK\"] = 4;\n values[valuesById[5] = \"INDEX\"] = 5;\n values[valuesById[7] = \"PAUSE\"] = 7;\n values[valuesById[8] = \"RESUME\"] = 8;\n values[valuesById[9] = \"LEAVE\"] = 9;\n values[valuesById[10] = \"LEAVE_ACK\"] = 10;\n values[valuesById[13] = \"BITRATES\"] = 13;\n values[valuesById[16] = \"AUDIO_CONTROL\"] = 16;\n values[valuesById[17] = \"AUDIO_METADATA\"] = 17;\n values[valuesById[18] = \"AUDIO_STREAM_ID_INFO\"] = 18;\n values[valuesById[19] = \"PING_PONG\"] = 19;\n values[valuesById[20] = \"AUDIO_STATUS\"] = 20;\n values[valuesById[21] = \"CLIENT_METRIC\"] = 21;\n values[valuesById[22] = \"DATA_MESSAGE\"] = 22;\n values[valuesById[24] = \"REMOTE_VIDEO_UPDATE\"] = 24;\n values[valuesById[25] = \"PRIMARY_MEETING_JOIN\"] = 25;\n values[valuesById[26] = \"PRIMARY_MEETING_JOIN_ACK\"] = 26;\n values[valuesById[27] = \"PRIMARY_MEETING_LEAVE\"] = 27;\n values[valuesById[34] = \"NOTIFICATION\"] = 34;\n return values;\n })();\n\n return SdkSignalFrame;\n})();\n\n$root.SdkErrorFrame = (function() {\n\n /**\n * Properties of a SdkErrorFrame.\n * @name ISdkErrorFrame\n * @interface ISdkErrorFrame\n * @property {number|null} [status] SdkErrorFrame status\n * @property {string|null} [description] SdkErrorFrame description\n */\n\n /**\n * Constructs a new SdkErrorFrame.\n * @name SdkErrorFrame\n * @classdesc Represents a SdkErrorFrame.\n * @implements ISdkErrorFrame\n * @constructor\n * @param {ISdkErrorFrame=} [properties] Properties to set\n */\n function SdkErrorFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkErrorFrame status.\n * @member {number} status\n * @memberof SdkErrorFrame\n * @instance\n */\n SdkErrorFrame.prototype.status = 0;\n\n /**\n * SdkErrorFrame description.\n * @member {string} description\n * @memberof SdkErrorFrame\n * @instance\n */\n SdkErrorFrame.prototype.description = \"\";\n\n /**\n * Creates a new SdkErrorFrame instance using the specified properties.\n * @function create\n * @memberof SdkErrorFrame\n * @static\n * @param {ISdkErrorFrame=} [properties] Properties to set\n * @returns {SdkErrorFrame} SdkErrorFrame instance\n */\n SdkErrorFrame.create = function create(properties) {\n return new SdkErrorFrame(properties);\n };\n\n /**\n * Encodes the specified SdkErrorFrame message. Does not implicitly {@link SdkErrorFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkErrorFrame\n * @static\n * @param {ISdkErrorFrame} message SdkErrorFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkErrorFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.status != null && Object.hasOwnProperty.call(message, \"status\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.status);\n if (message.description != null && Object.hasOwnProperty.call(message, \"description\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.description);\n return writer;\n };\n\n /**\n * Encodes the specified SdkErrorFrame message, length delimited. Does not implicitly {@link SdkErrorFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkErrorFrame\n * @static\n * @param {ISdkErrorFrame} message SdkErrorFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkErrorFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkErrorFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkErrorFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkErrorFrame} SdkErrorFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkErrorFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkErrorFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.status = reader.uint32();\n break;\n }\n case 2: {\n message.description = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkErrorFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkErrorFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkErrorFrame} SdkErrorFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkErrorFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkErrorFrame message.\n * @function verify\n * @memberof SdkErrorFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkErrorFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.status != null && message.hasOwnProperty(\"status\"))\n if (!$util.isInteger(message.status))\n return \"status: integer expected\";\n if (message.description != null && message.hasOwnProperty(\"description\"))\n if (!$util.isString(message.description))\n return \"description: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkErrorFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkErrorFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkErrorFrame} SdkErrorFrame\n */\n SdkErrorFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkErrorFrame)\n return object;\n var message = new $root.SdkErrorFrame();\n if (object.status != null)\n message.status = object.status >>> 0;\n if (object.description != null)\n message.description = String(object.description);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkErrorFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkErrorFrame\n * @static\n * @param {SdkErrorFrame} message SdkErrorFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkErrorFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.status = 0;\n object.description = \"\";\n }\n if (message.status != null && message.hasOwnProperty(\"status\"))\n object.status = message.status;\n if (message.description != null && message.hasOwnProperty(\"description\"))\n object.description = message.description;\n return object;\n };\n\n /**\n * Converts this SdkErrorFrame to JSON.\n * @function toJSON\n * @memberof SdkErrorFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkErrorFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkErrorFrame\n * @function getTypeUrl\n * @memberof SdkErrorFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkErrorFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkErrorFrame\";\n };\n\n return SdkErrorFrame;\n})();\n\n/**\n * SdkJoinFlags enum.\n * @name SdkJoinFlags\n * @enum {number}\n * @property {number} HAS_STREAM_UPDATE=2 HAS_STREAM_UPDATE value\n * @property {number} COMPLETE_VIDEO_SOURCES_LIST=16 COMPLETE_VIDEO_SOURCES_LIST value\n * @property {number} EXCLUDE_SELF_CONTENT_IN_INDEX=32 EXCLUDE_SELF_CONTENT_IN_INDEX value\n */\n$root.SdkJoinFlags = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[2] = \"HAS_STREAM_UPDATE\"] = 2;\n values[valuesById[16] = \"COMPLETE_VIDEO_SOURCES_LIST\"] = 16;\n values[valuesById[32] = \"EXCLUDE_SELF_CONTENT_IN_INDEX\"] = 32;\n return values;\n})();\n\n$root.SdkClientDetails = (function() {\n\n /**\n * Properties of a SdkClientDetails.\n * @name ISdkClientDetails\n * @interface ISdkClientDetails\n * @property {string|null} [appName] SdkClientDetails appName\n * @property {string|null} [appVersion] SdkClientDetails appVersion\n * @property {string|null} [deviceModel] SdkClientDetails deviceModel\n * @property {string|null} [deviceMake] SdkClientDetails deviceMake\n * @property {string|null} [platformName] SdkClientDetails platformName\n * @property {string|null} [platformVersion] SdkClientDetails platformVersion\n * @property {string|null} [clientSource] SdkClientDetails clientSource\n * @property {string|null} [chimeSdkVersion] SdkClientDetails chimeSdkVersion\n * @property {string|null} [clientUtcOffset] SdkClientDetails clientUtcOffset\n */\n\n /**\n * Constructs a new SdkClientDetails.\n * @name SdkClientDetails\n * @classdesc Represents a SdkClientDetails.\n * @implements ISdkClientDetails\n * @constructor\n * @param {ISdkClientDetails=} [properties] Properties to set\n */\n function SdkClientDetails(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkClientDetails appName.\n * @member {string} appName\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.appName = \"\";\n\n /**\n * SdkClientDetails appVersion.\n * @member {string} appVersion\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.appVersion = \"\";\n\n /**\n * SdkClientDetails deviceModel.\n * @member {string} deviceModel\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.deviceModel = \"\";\n\n /**\n * SdkClientDetails deviceMake.\n * @member {string} deviceMake\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.deviceMake = \"\";\n\n /**\n * SdkClientDetails platformName.\n * @member {string} platformName\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.platformName = \"\";\n\n /**\n * SdkClientDetails platformVersion.\n * @member {string} platformVersion\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.platformVersion = \"\";\n\n /**\n * SdkClientDetails clientSource.\n * @member {string} clientSource\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.clientSource = \"\";\n\n /**\n * SdkClientDetails chimeSdkVersion.\n * @member {string} chimeSdkVersion\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.chimeSdkVersion = \"\";\n\n /**\n * SdkClientDetails clientUtcOffset.\n * @member {string} clientUtcOffset\n * @memberof SdkClientDetails\n * @instance\n */\n SdkClientDetails.prototype.clientUtcOffset = \"\";\n\n /**\n * Creates a new SdkClientDetails instance using the specified properties.\n * @function create\n * @memberof SdkClientDetails\n * @static\n * @param {ISdkClientDetails=} [properties] Properties to set\n * @returns {SdkClientDetails} SdkClientDetails instance\n */\n SdkClientDetails.create = function create(properties) {\n return new SdkClientDetails(properties);\n };\n\n /**\n * Encodes the specified SdkClientDetails message. Does not implicitly {@link SdkClientDetails.verify|verify} messages.\n * @function encode\n * @memberof SdkClientDetails\n * @static\n * @param {ISdkClientDetails} message SdkClientDetails message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkClientDetails.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.appName != null && Object.hasOwnProperty.call(message, \"appName\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.appName);\n if (message.appVersion != null && Object.hasOwnProperty.call(message, \"appVersion\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.appVersion);\n if (message.deviceModel != null && Object.hasOwnProperty.call(message, \"deviceModel\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.deviceModel);\n if (message.deviceMake != null && Object.hasOwnProperty.call(message, \"deviceMake\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.deviceMake);\n if (message.platformName != null && Object.hasOwnProperty.call(message, \"platformName\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.platformName);\n if (message.platformVersion != null && Object.hasOwnProperty.call(message, \"platformVersion\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.platformVersion);\n if (message.clientSource != null && Object.hasOwnProperty.call(message, \"clientSource\"))\n writer.uint32(/* id 7, wireType 2 =*/58).string(message.clientSource);\n if (message.chimeSdkVersion != null && Object.hasOwnProperty.call(message, \"chimeSdkVersion\"))\n writer.uint32(/* id 8, wireType 2 =*/66).string(message.chimeSdkVersion);\n if (message.clientUtcOffset != null && Object.hasOwnProperty.call(message, \"clientUtcOffset\"))\n writer.uint32(/* id 9, wireType 2 =*/74).string(message.clientUtcOffset);\n return writer;\n };\n\n /**\n * Encodes the specified SdkClientDetails message, length delimited. Does not implicitly {@link SdkClientDetails.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkClientDetails\n * @static\n * @param {ISdkClientDetails} message SdkClientDetails message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkClientDetails.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkClientDetails message from the specified reader or buffer.\n * @function decode\n * @memberof SdkClientDetails\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkClientDetails} SdkClientDetails\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkClientDetails.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkClientDetails();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.appName = reader.string();\n break;\n }\n case 2: {\n message.appVersion = reader.string();\n break;\n }\n case 3: {\n message.deviceModel = reader.string();\n break;\n }\n case 4: {\n message.deviceMake = reader.string();\n break;\n }\n case 5: {\n message.platformName = reader.string();\n break;\n }\n case 6: {\n message.platformVersion = reader.string();\n break;\n }\n case 7: {\n message.clientSource = reader.string();\n break;\n }\n case 8: {\n message.chimeSdkVersion = reader.string();\n break;\n }\n case 9: {\n message.clientUtcOffset = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkClientDetails message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkClientDetails\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkClientDetails} SdkClientDetails\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkClientDetails.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkClientDetails message.\n * @function verify\n * @memberof SdkClientDetails\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkClientDetails.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.appName != null && message.hasOwnProperty(\"appName\"))\n if (!$util.isString(message.appName))\n return \"appName: string expected\";\n if (message.appVersion != null && message.hasOwnProperty(\"appVersion\"))\n if (!$util.isString(message.appVersion))\n return \"appVersion: string expected\";\n if (message.deviceModel != null && message.hasOwnProperty(\"deviceModel\"))\n if (!$util.isString(message.deviceModel))\n return \"deviceModel: string expected\";\n if (message.deviceMake != null && message.hasOwnProperty(\"deviceMake\"))\n if (!$util.isString(message.deviceMake))\n return \"deviceMake: string expected\";\n if (message.platformName != null && message.hasOwnProperty(\"platformName\"))\n if (!$util.isString(message.platformName))\n return \"platformName: string expected\";\n if (message.platformVersion != null && message.hasOwnProperty(\"platformVersion\"))\n if (!$util.isString(message.platformVersion))\n return \"platformVersion: string expected\";\n if (message.clientSource != null && message.hasOwnProperty(\"clientSource\"))\n if (!$util.isString(message.clientSource))\n return \"clientSource: string expected\";\n if (message.chimeSdkVersion != null && message.hasOwnProperty(\"chimeSdkVersion\"))\n if (!$util.isString(message.chimeSdkVersion))\n return \"chimeSdkVersion: string expected\";\n if (message.clientUtcOffset != null && message.hasOwnProperty(\"clientUtcOffset\"))\n if (!$util.isString(message.clientUtcOffset))\n return \"clientUtcOffset: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkClientDetails message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkClientDetails\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkClientDetails} SdkClientDetails\n */\n SdkClientDetails.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkClientDetails)\n return object;\n var message = new $root.SdkClientDetails();\n if (object.appName != null)\n message.appName = String(object.appName);\n if (object.appVersion != null)\n message.appVersion = String(object.appVersion);\n if (object.deviceModel != null)\n message.deviceModel = String(object.deviceModel);\n if (object.deviceMake != null)\n message.deviceMake = String(object.deviceMake);\n if (object.platformName != null)\n message.platformName = String(object.platformName);\n if (object.platformVersion != null)\n message.platformVersion = String(object.platformVersion);\n if (object.clientSource != null)\n message.clientSource = String(object.clientSource);\n if (object.chimeSdkVersion != null)\n message.chimeSdkVersion = String(object.chimeSdkVersion);\n if (object.clientUtcOffset != null)\n message.clientUtcOffset = String(object.clientUtcOffset);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkClientDetails message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkClientDetails\n * @static\n * @param {SdkClientDetails} message SdkClientDetails\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkClientDetails.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.appName = \"\";\n object.appVersion = \"\";\n object.deviceModel = \"\";\n object.deviceMake = \"\";\n object.platformName = \"\";\n object.platformVersion = \"\";\n object.clientSource = \"\";\n object.chimeSdkVersion = \"\";\n object.clientUtcOffset = \"\";\n }\n if (message.appName != null && message.hasOwnProperty(\"appName\"))\n object.appName = message.appName;\n if (message.appVersion != null && message.hasOwnProperty(\"appVersion\"))\n object.appVersion = message.appVersion;\n if (message.deviceModel != null && message.hasOwnProperty(\"deviceModel\"))\n object.deviceModel = message.deviceModel;\n if (message.deviceMake != null && message.hasOwnProperty(\"deviceMake\"))\n object.deviceMake = message.deviceMake;\n if (message.platformName != null && message.hasOwnProperty(\"platformName\"))\n object.platformName = message.platformName;\n if (message.platformVersion != null && message.hasOwnProperty(\"platformVersion\"))\n object.platformVersion = message.platformVersion;\n if (message.clientSource != null && message.hasOwnProperty(\"clientSource\"))\n object.clientSource = message.clientSource;\n if (message.chimeSdkVersion != null && message.hasOwnProperty(\"chimeSdkVersion\"))\n object.chimeSdkVersion = message.chimeSdkVersion;\n if (message.clientUtcOffset != null && message.hasOwnProperty(\"clientUtcOffset\"))\n object.clientUtcOffset = message.clientUtcOffset;\n return object;\n };\n\n /**\n * Converts this SdkClientDetails to JSON.\n * @function toJSON\n * @memberof SdkClientDetails\n * @instance\n * @returns {Object.} JSON object\n */\n SdkClientDetails.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkClientDetails\n * @function getTypeUrl\n * @memberof SdkClientDetails\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkClientDetails.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkClientDetails\";\n };\n\n return SdkClientDetails;\n})();\n\n/**\n * SdkServerSideNetworkAdaption enum.\n * @name SdkServerSideNetworkAdaption\n * @enum {number}\n * @property {number} DEFAULT=1 DEFAULT value\n * @property {number} NONE=2 NONE value\n * @property {number} BANDWIDTH_PROBING=3 BANDWIDTH_PROBING value\n * @property {number} BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION=4 BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION value\n */\n$root.SdkServerSideNetworkAdaption = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"DEFAULT\"] = 1;\n values[valuesById[2] = \"NONE\"] = 2;\n values[valuesById[3] = \"BANDWIDTH_PROBING\"] = 3;\n values[valuesById[4] = \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\"] = 4;\n return values;\n})();\n\n$root.SdkJoinFrame = (function() {\n\n /**\n * Properties of a SdkJoinFrame.\n * @name ISdkJoinFrame\n * @interface ISdkJoinFrame\n * @property {number|null} [protocolVersion] SdkJoinFrame protocolVersion\n * @property {number|null} [maxNumOfVideos] SdkJoinFrame maxNumOfVideos\n * @property {number|null} [flags] SdkJoinFrame flags\n * @property {ISdkClientDetails|null} [clientDetails] SdkJoinFrame clientDetails\n * @property {number|Long|null} [audioSessionId] SdkJoinFrame audioSessionId\n * @property {boolean|null} [wantsCompressedSdp] SdkJoinFrame wantsCompressedSdp\n * @property {SdkServerSideNetworkAdaption|null} [serverSideNetworkAdaption] SdkJoinFrame serverSideNetworkAdaption\n * @property {Array.|null} [supportedServerSideNetworkAdaptions] SdkJoinFrame supportedServerSideNetworkAdaptions\n * @property {boolean|null} [wantsAllTemporalLayersInIndex] SdkJoinFrame wantsAllTemporalLayersInIndex\n * @property {boolean|null} [disablePeriodicKeyframeRequestOnContentSender] SdkJoinFrame disablePeriodicKeyframeRequestOnContentSender\n */\n\n /**\n * Constructs a new SdkJoinFrame.\n * @name SdkJoinFrame\n * @classdesc Represents a SdkJoinFrame.\n * @implements ISdkJoinFrame\n * @constructor\n * @param {ISdkJoinFrame=} [properties] Properties to set\n */\n function SdkJoinFrame(properties) {\n this.supportedServerSideNetworkAdaptions = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkJoinFrame protocolVersion.\n * @member {number} protocolVersion\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.protocolVersion = 2;\n\n /**\n * SdkJoinFrame maxNumOfVideos.\n * @member {number} maxNumOfVideos\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.maxNumOfVideos = 0;\n\n /**\n * SdkJoinFrame flags.\n * @member {number} flags\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.flags = 0;\n\n /**\n * SdkJoinFrame clientDetails.\n * @member {ISdkClientDetails|null|undefined} clientDetails\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.clientDetails = null;\n\n /**\n * SdkJoinFrame audioSessionId.\n * @member {number|Long} audioSessionId\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.audioSessionId = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * SdkJoinFrame wantsCompressedSdp.\n * @member {boolean} wantsCompressedSdp\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.wantsCompressedSdp = false;\n\n /**\n * SdkJoinFrame serverSideNetworkAdaption.\n * @member {SdkServerSideNetworkAdaption} serverSideNetworkAdaption\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.serverSideNetworkAdaption = 1;\n\n /**\n * SdkJoinFrame supportedServerSideNetworkAdaptions.\n * @member {Array.} supportedServerSideNetworkAdaptions\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.supportedServerSideNetworkAdaptions = $util.emptyArray;\n\n /**\n * SdkJoinFrame wantsAllTemporalLayersInIndex.\n * @member {boolean} wantsAllTemporalLayersInIndex\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.wantsAllTemporalLayersInIndex = false;\n\n /**\n * SdkJoinFrame disablePeriodicKeyframeRequestOnContentSender.\n * @member {boolean} disablePeriodicKeyframeRequestOnContentSender\n * @memberof SdkJoinFrame\n * @instance\n */\n SdkJoinFrame.prototype.disablePeriodicKeyframeRequestOnContentSender = false;\n\n /**\n * Creates a new SdkJoinFrame instance using the specified properties.\n * @function create\n * @memberof SdkJoinFrame\n * @static\n * @param {ISdkJoinFrame=} [properties] Properties to set\n * @returns {SdkJoinFrame} SdkJoinFrame instance\n */\n SdkJoinFrame.create = function create(properties) {\n return new SdkJoinFrame(properties);\n };\n\n /**\n * Encodes the specified SdkJoinFrame message. Does not implicitly {@link SdkJoinFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkJoinFrame\n * @static\n * @param {ISdkJoinFrame} message SdkJoinFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkJoinFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.protocolVersion != null && Object.hasOwnProperty.call(message, \"protocolVersion\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.protocolVersion);\n if (message.maxNumOfVideos != null && Object.hasOwnProperty.call(message, \"maxNumOfVideos\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.maxNumOfVideos);\n if (message.flags != null && Object.hasOwnProperty.call(message, \"flags\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.flags);\n if (message.clientDetails != null && Object.hasOwnProperty.call(message, \"clientDetails\"))\n $root.SdkClientDetails.encode(message.clientDetails, writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n if (message.audioSessionId != null && Object.hasOwnProperty.call(message, \"audioSessionId\"))\n writer.uint32(/* id 6, wireType 0 =*/48).uint64(message.audioSessionId);\n if (message.wantsCompressedSdp != null && Object.hasOwnProperty.call(message, \"wantsCompressedSdp\"))\n writer.uint32(/* id 7, wireType 0 =*/56).bool(message.wantsCompressedSdp);\n if (message.serverSideNetworkAdaption != null && Object.hasOwnProperty.call(message, \"serverSideNetworkAdaption\"))\n writer.uint32(/* id 10, wireType 0 =*/80).int32(message.serverSideNetworkAdaption);\n if (message.supportedServerSideNetworkAdaptions != null && message.supportedServerSideNetworkAdaptions.length)\n for (var i = 0; i < message.supportedServerSideNetworkAdaptions.length; ++i)\n writer.uint32(/* id 11, wireType 0 =*/88).int32(message.supportedServerSideNetworkAdaptions[i]);\n if (message.wantsAllTemporalLayersInIndex != null && Object.hasOwnProperty.call(message, \"wantsAllTemporalLayersInIndex\"))\n writer.uint32(/* id 12, wireType 0 =*/96).bool(message.wantsAllTemporalLayersInIndex);\n if (message.disablePeriodicKeyframeRequestOnContentSender != null && Object.hasOwnProperty.call(message, \"disablePeriodicKeyframeRequestOnContentSender\"))\n writer.uint32(/* id 13, wireType 0 =*/104).bool(message.disablePeriodicKeyframeRequestOnContentSender);\n return writer;\n };\n\n /**\n * Encodes the specified SdkJoinFrame message, length delimited. Does not implicitly {@link SdkJoinFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkJoinFrame\n * @static\n * @param {ISdkJoinFrame} message SdkJoinFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkJoinFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkJoinFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkJoinFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkJoinFrame} SdkJoinFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkJoinFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkJoinFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.protocolVersion = reader.uint32();\n break;\n }\n case 2: {\n message.maxNumOfVideos = reader.uint32();\n break;\n }\n case 3: {\n message.flags = reader.uint32();\n break;\n }\n case 4: {\n message.clientDetails = $root.SdkClientDetails.decode(reader, reader.uint32());\n break;\n }\n case 6: {\n message.audioSessionId = reader.uint64();\n break;\n }\n case 7: {\n message.wantsCompressedSdp = reader.bool();\n break;\n }\n case 10: {\n message.serverSideNetworkAdaption = reader.int32();\n break;\n }\n case 11: {\n if (!(message.supportedServerSideNetworkAdaptions && message.supportedServerSideNetworkAdaptions.length))\n message.supportedServerSideNetworkAdaptions = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.supportedServerSideNetworkAdaptions.push(reader.int32());\n } else\n message.supportedServerSideNetworkAdaptions.push(reader.int32());\n break;\n }\n case 12: {\n message.wantsAllTemporalLayersInIndex = reader.bool();\n break;\n }\n case 13: {\n message.disablePeriodicKeyframeRequestOnContentSender = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkJoinFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkJoinFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkJoinFrame} SdkJoinFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkJoinFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkJoinFrame message.\n * @function verify\n * @memberof SdkJoinFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkJoinFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.protocolVersion != null && message.hasOwnProperty(\"protocolVersion\"))\n if (!$util.isInteger(message.protocolVersion))\n return \"protocolVersion: integer expected\";\n if (message.maxNumOfVideos != null && message.hasOwnProperty(\"maxNumOfVideos\"))\n if (!$util.isInteger(message.maxNumOfVideos))\n return \"maxNumOfVideos: integer expected\";\n if (message.flags != null && message.hasOwnProperty(\"flags\"))\n if (!$util.isInteger(message.flags))\n return \"flags: integer expected\";\n if (message.clientDetails != null && message.hasOwnProperty(\"clientDetails\")) {\n var error = $root.SdkClientDetails.verify(message.clientDetails);\n if (error)\n return \"clientDetails.\" + error;\n }\n if (message.audioSessionId != null && message.hasOwnProperty(\"audioSessionId\"))\n if (!$util.isInteger(message.audioSessionId) && !(message.audioSessionId && $util.isInteger(message.audioSessionId.low) && $util.isInteger(message.audioSessionId.high)))\n return \"audioSessionId: integer|Long expected\";\n if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n if (typeof message.wantsCompressedSdp !== \"boolean\")\n return \"wantsCompressedSdp: boolean expected\";\n if (message.serverSideNetworkAdaption != null && message.hasOwnProperty(\"serverSideNetworkAdaption\"))\n switch (message.serverSideNetworkAdaption) {\n default:\n return \"serverSideNetworkAdaption: enum value expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n break;\n }\n if (message.supportedServerSideNetworkAdaptions != null && message.hasOwnProperty(\"supportedServerSideNetworkAdaptions\")) {\n if (!Array.isArray(message.supportedServerSideNetworkAdaptions))\n return \"supportedServerSideNetworkAdaptions: array expected\";\n for (var i = 0; i < message.supportedServerSideNetworkAdaptions.length; ++i)\n switch (message.supportedServerSideNetworkAdaptions[i]) {\n default:\n return \"supportedServerSideNetworkAdaptions: enum value[] expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n break;\n }\n }\n if (message.wantsAllTemporalLayersInIndex != null && message.hasOwnProperty(\"wantsAllTemporalLayersInIndex\"))\n if (typeof message.wantsAllTemporalLayersInIndex !== \"boolean\")\n return \"wantsAllTemporalLayersInIndex: boolean expected\";\n if (message.disablePeriodicKeyframeRequestOnContentSender != null && message.hasOwnProperty(\"disablePeriodicKeyframeRequestOnContentSender\"))\n if (typeof message.disablePeriodicKeyframeRequestOnContentSender !== \"boolean\")\n return \"disablePeriodicKeyframeRequestOnContentSender: boolean expected\";\n return null;\n };\n\n /**\n * Creates a SdkJoinFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkJoinFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkJoinFrame} SdkJoinFrame\n */\n SdkJoinFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkJoinFrame)\n return object;\n var message = new $root.SdkJoinFrame();\n if (object.protocolVersion != null)\n message.protocolVersion = object.protocolVersion >>> 0;\n if (object.maxNumOfVideos != null)\n message.maxNumOfVideos = object.maxNumOfVideos >>> 0;\n if (object.flags != null)\n message.flags = object.flags >>> 0;\n if (object.clientDetails != null) {\n if (typeof object.clientDetails !== \"object\")\n throw TypeError(\".SdkJoinFrame.clientDetails: object expected\");\n message.clientDetails = $root.SdkClientDetails.fromObject(object.clientDetails);\n }\n if (object.audioSessionId != null)\n if ($util.Long)\n (message.audioSessionId = $util.Long.fromValue(object.audioSessionId)).unsigned = true;\n else if (typeof object.audioSessionId === \"string\")\n message.audioSessionId = parseInt(object.audioSessionId, 10);\n else if (typeof object.audioSessionId === \"number\")\n message.audioSessionId = object.audioSessionId;\n else if (typeof object.audioSessionId === \"object\")\n message.audioSessionId = new $util.LongBits(object.audioSessionId.low >>> 0, object.audioSessionId.high >>> 0).toNumber(true);\n if (object.wantsCompressedSdp != null)\n message.wantsCompressedSdp = Boolean(object.wantsCompressedSdp);\n switch (object.serverSideNetworkAdaption) {\n default:\n if (typeof object.serverSideNetworkAdaption === \"number\") {\n message.serverSideNetworkAdaption = object.serverSideNetworkAdaption;\n break;\n }\n break;\n case \"DEFAULT\":\n case 1:\n message.serverSideNetworkAdaption = 1;\n break;\n case \"NONE\":\n case 2:\n message.serverSideNetworkAdaption = 2;\n break;\n case \"BANDWIDTH_PROBING\":\n case 3:\n message.serverSideNetworkAdaption = 3;\n break;\n case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n case 4:\n message.serverSideNetworkAdaption = 4;\n break;\n }\n if (object.supportedServerSideNetworkAdaptions) {\n if (!Array.isArray(object.supportedServerSideNetworkAdaptions))\n throw TypeError(\".SdkJoinFrame.supportedServerSideNetworkAdaptions: array expected\");\n message.supportedServerSideNetworkAdaptions = [];\n for (var i = 0; i < object.supportedServerSideNetworkAdaptions.length; ++i)\n switch (object.supportedServerSideNetworkAdaptions[i]) {\n default:\n if (typeof object.supportedServerSideNetworkAdaptions[i] === \"number\") {\n message.supportedServerSideNetworkAdaptions[i] = object.supportedServerSideNetworkAdaptions[i];\n break;\n }\n case \"DEFAULT\":\n case 1:\n message.supportedServerSideNetworkAdaptions[i] = 1;\n break;\n case \"NONE\":\n case 2:\n message.supportedServerSideNetworkAdaptions[i] = 2;\n break;\n case \"BANDWIDTH_PROBING\":\n case 3:\n message.supportedServerSideNetworkAdaptions[i] = 3;\n break;\n case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n case 4:\n message.supportedServerSideNetworkAdaptions[i] = 4;\n break;\n }\n }\n if (object.wantsAllTemporalLayersInIndex != null)\n message.wantsAllTemporalLayersInIndex = Boolean(object.wantsAllTemporalLayersInIndex);\n if (object.disablePeriodicKeyframeRequestOnContentSender != null)\n message.disablePeriodicKeyframeRequestOnContentSender = Boolean(object.disablePeriodicKeyframeRequestOnContentSender);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkJoinFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkJoinFrame\n * @static\n * @param {SdkJoinFrame} message SdkJoinFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkJoinFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.supportedServerSideNetworkAdaptions = [];\n if (options.defaults) {\n object.protocolVersion = 2;\n object.maxNumOfVideos = 0;\n object.flags = 0;\n object.clientDetails = null;\n if ($util.Long) {\n var long = new $util.Long(0, 0, true);\n object.audioSessionId = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.audioSessionId = options.longs === String ? \"0\" : 0;\n object.wantsCompressedSdp = false;\n object.serverSideNetworkAdaption = options.enums === String ? \"DEFAULT\" : 1;\n object.wantsAllTemporalLayersInIndex = false;\n object.disablePeriodicKeyframeRequestOnContentSender = false;\n }\n if (message.protocolVersion != null && message.hasOwnProperty(\"protocolVersion\"))\n object.protocolVersion = message.protocolVersion;\n if (message.maxNumOfVideos != null && message.hasOwnProperty(\"maxNumOfVideos\"))\n object.maxNumOfVideos = message.maxNumOfVideos;\n if (message.flags != null && message.hasOwnProperty(\"flags\"))\n object.flags = message.flags;\n if (message.clientDetails != null && message.hasOwnProperty(\"clientDetails\"))\n object.clientDetails = $root.SdkClientDetails.toObject(message.clientDetails, options);\n if (message.audioSessionId != null && message.hasOwnProperty(\"audioSessionId\"))\n if (typeof message.audioSessionId === \"number\")\n object.audioSessionId = options.longs === String ? String(message.audioSessionId) : message.audioSessionId;\n else\n object.audioSessionId = options.longs === String ? $util.Long.prototype.toString.call(message.audioSessionId) : options.longs === Number ? new $util.LongBits(message.audioSessionId.low >>> 0, message.audioSessionId.high >>> 0).toNumber(true) : message.audioSessionId;\n if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n object.wantsCompressedSdp = message.wantsCompressedSdp;\n if (message.serverSideNetworkAdaption != null && message.hasOwnProperty(\"serverSideNetworkAdaption\"))\n object.serverSideNetworkAdaption = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.serverSideNetworkAdaption] === undefined ? message.serverSideNetworkAdaption : $root.SdkServerSideNetworkAdaption[message.serverSideNetworkAdaption] : message.serverSideNetworkAdaption;\n if (message.supportedServerSideNetworkAdaptions && message.supportedServerSideNetworkAdaptions.length) {\n object.supportedServerSideNetworkAdaptions = [];\n for (var j = 0; j < message.supportedServerSideNetworkAdaptions.length; ++j)\n object.supportedServerSideNetworkAdaptions[j] = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.supportedServerSideNetworkAdaptions[j]] === undefined ? message.supportedServerSideNetworkAdaptions[j] : $root.SdkServerSideNetworkAdaption[message.supportedServerSideNetworkAdaptions[j]] : message.supportedServerSideNetworkAdaptions[j];\n }\n if (message.wantsAllTemporalLayersInIndex != null && message.hasOwnProperty(\"wantsAllTemporalLayersInIndex\"))\n object.wantsAllTemporalLayersInIndex = message.wantsAllTemporalLayersInIndex;\n if (message.disablePeriodicKeyframeRequestOnContentSender != null && message.hasOwnProperty(\"disablePeriodicKeyframeRequestOnContentSender\"))\n object.disablePeriodicKeyframeRequestOnContentSender = message.disablePeriodicKeyframeRequestOnContentSender;\n return object;\n };\n\n /**\n * Converts this SdkJoinFrame to JSON.\n * @function toJSON\n * @memberof SdkJoinFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkJoinFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkJoinFrame\n * @function getTypeUrl\n * @memberof SdkJoinFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkJoinFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkJoinFrame\";\n };\n\n return SdkJoinFrame;\n})();\n\n$root.SdkJoinAckFrame = (function() {\n\n /**\n * Properties of a SdkJoinAckFrame.\n * @name ISdkJoinAckFrame\n * @interface ISdkJoinAckFrame\n * @property {ISdkTurnCredentials|null} [turnCredentials] SdkJoinAckFrame turnCredentials\n * @property {number|null} [videoSubscriptionLimit] SdkJoinAckFrame videoSubscriptionLimit\n * @property {boolean|null} [wantsCompressedSdp] SdkJoinAckFrame wantsCompressedSdp\n * @property {SdkServerSideNetworkAdaption|null} [defaultServerSideNetworkAdaption] SdkJoinAckFrame defaultServerSideNetworkAdaption\n */\n\n /**\n * Constructs a new SdkJoinAckFrame.\n * @name SdkJoinAckFrame\n * @classdesc Represents a SdkJoinAckFrame.\n * @implements ISdkJoinAckFrame\n * @constructor\n * @param {ISdkJoinAckFrame=} [properties] Properties to set\n */\n function SdkJoinAckFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkJoinAckFrame turnCredentials.\n * @member {ISdkTurnCredentials|null|undefined} turnCredentials\n * @memberof SdkJoinAckFrame\n * @instance\n */\n SdkJoinAckFrame.prototype.turnCredentials = null;\n\n /**\n * SdkJoinAckFrame videoSubscriptionLimit.\n * @member {number} videoSubscriptionLimit\n * @memberof SdkJoinAckFrame\n * @instance\n */\n SdkJoinAckFrame.prototype.videoSubscriptionLimit = 0;\n\n /**\n * SdkJoinAckFrame wantsCompressedSdp.\n * @member {boolean} wantsCompressedSdp\n * @memberof SdkJoinAckFrame\n * @instance\n */\n SdkJoinAckFrame.prototype.wantsCompressedSdp = false;\n\n /**\n * SdkJoinAckFrame defaultServerSideNetworkAdaption.\n * @member {SdkServerSideNetworkAdaption} defaultServerSideNetworkAdaption\n * @memberof SdkJoinAckFrame\n * @instance\n */\n SdkJoinAckFrame.prototype.defaultServerSideNetworkAdaption = 1;\n\n /**\n * Creates a new SdkJoinAckFrame instance using the specified properties.\n * @function create\n * @memberof SdkJoinAckFrame\n * @static\n * @param {ISdkJoinAckFrame=} [properties] Properties to set\n * @returns {SdkJoinAckFrame} SdkJoinAckFrame instance\n */\n SdkJoinAckFrame.create = function create(properties) {\n return new SdkJoinAckFrame(properties);\n };\n\n /**\n * Encodes the specified SdkJoinAckFrame message. Does not implicitly {@link SdkJoinAckFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkJoinAckFrame\n * @static\n * @param {ISdkJoinAckFrame} message SdkJoinAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkJoinAckFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.turnCredentials != null && Object.hasOwnProperty.call(message, \"turnCredentials\"))\n $root.SdkTurnCredentials.encode(message.turnCredentials, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.videoSubscriptionLimit != null && Object.hasOwnProperty.call(message, \"videoSubscriptionLimit\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.videoSubscriptionLimit);\n if (message.wantsCompressedSdp != null && Object.hasOwnProperty.call(message, \"wantsCompressedSdp\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.wantsCompressedSdp);\n if (message.defaultServerSideNetworkAdaption != null && Object.hasOwnProperty.call(message, \"defaultServerSideNetworkAdaption\"))\n writer.uint32(/* id 4, wireType 0 =*/32).int32(message.defaultServerSideNetworkAdaption);\n return writer;\n };\n\n /**\n * Encodes the specified SdkJoinAckFrame message, length delimited. Does not implicitly {@link SdkJoinAckFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkJoinAckFrame\n * @static\n * @param {ISdkJoinAckFrame} message SdkJoinAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkJoinAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkJoinAckFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkJoinAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkJoinAckFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkJoinAckFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.turnCredentials = $root.SdkTurnCredentials.decode(reader, reader.uint32());\n break;\n }\n case 2: {\n message.videoSubscriptionLimit = reader.uint32();\n break;\n }\n case 3: {\n message.wantsCompressedSdp = reader.bool();\n break;\n }\n case 4: {\n message.defaultServerSideNetworkAdaption = reader.int32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkJoinAckFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkJoinAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkJoinAckFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkJoinAckFrame message.\n * @function verify\n * @memberof SdkJoinAckFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkJoinAckFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.turnCredentials != null && message.hasOwnProperty(\"turnCredentials\")) {\n var error = $root.SdkTurnCredentials.verify(message.turnCredentials);\n if (error)\n return \"turnCredentials.\" + error;\n }\n if (message.videoSubscriptionLimit != null && message.hasOwnProperty(\"videoSubscriptionLimit\"))\n if (!$util.isInteger(message.videoSubscriptionLimit))\n return \"videoSubscriptionLimit: integer expected\";\n if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n if (typeof message.wantsCompressedSdp !== \"boolean\")\n return \"wantsCompressedSdp: boolean expected\";\n if (message.defaultServerSideNetworkAdaption != null && message.hasOwnProperty(\"defaultServerSideNetworkAdaption\"))\n switch (message.defaultServerSideNetworkAdaption) {\n default:\n return \"defaultServerSideNetworkAdaption: enum value expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n break;\n }\n return null;\n };\n\n /**\n * Creates a SdkJoinAckFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkJoinAckFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkJoinAckFrame} SdkJoinAckFrame\n */\n SdkJoinAckFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkJoinAckFrame)\n return object;\n var message = new $root.SdkJoinAckFrame();\n if (object.turnCredentials != null) {\n if (typeof object.turnCredentials !== \"object\")\n throw TypeError(\".SdkJoinAckFrame.turnCredentials: object expected\");\n message.turnCredentials = $root.SdkTurnCredentials.fromObject(object.turnCredentials);\n }\n if (object.videoSubscriptionLimit != null)\n message.videoSubscriptionLimit = object.videoSubscriptionLimit >>> 0;\n if (object.wantsCompressedSdp != null)\n message.wantsCompressedSdp = Boolean(object.wantsCompressedSdp);\n switch (object.defaultServerSideNetworkAdaption) {\n default:\n if (typeof object.defaultServerSideNetworkAdaption === \"number\") {\n message.defaultServerSideNetworkAdaption = object.defaultServerSideNetworkAdaption;\n break;\n }\n break;\n case \"DEFAULT\":\n case 1:\n message.defaultServerSideNetworkAdaption = 1;\n break;\n case \"NONE\":\n case 2:\n message.defaultServerSideNetworkAdaption = 2;\n break;\n case \"BANDWIDTH_PROBING\":\n case 3:\n message.defaultServerSideNetworkAdaption = 3;\n break;\n case \"BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION\":\n case 4:\n message.defaultServerSideNetworkAdaption = 4;\n break;\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkJoinAckFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkJoinAckFrame\n * @static\n * @param {SdkJoinAckFrame} message SdkJoinAckFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkJoinAckFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.turnCredentials = null;\n object.videoSubscriptionLimit = 0;\n object.wantsCompressedSdp = false;\n object.defaultServerSideNetworkAdaption = options.enums === String ? \"DEFAULT\" : 1;\n }\n if (message.turnCredentials != null && message.hasOwnProperty(\"turnCredentials\"))\n object.turnCredentials = $root.SdkTurnCredentials.toObject(message.turnCredentials, options);\n if (message.videoSubscriptionLimit != null && message.hasOwnProperty(\"videoSubscriptionLimit\"))\n object.videoSubscriptionLimit = message.videoSubscriptionLimit;\n if (message.wantsCompressedSdp != null && message.hasOwnProperty(\"wantsCompressedSdp\"))\n object.wantsCompressedSdp = message.wantsCompressedSdp;\n if (message.defaultServerSideNetworkAdaption != null && message.hasOwnProperty(\"defaultServerSideNetworkAdaption\"))\n object.defaultServerSideNetworkAdaption = options.enums === String ? $root.SdkServerSideNetworkAdaption[message.defaultServerSideNetworkAdaption] === undefined ? message.defaultServerSideNetworkAdaption : $root.SdkServerSideNetworkAdaption[message.defaultServerSideNetworkAdaption] : message.defaultServerSideNetworkAdaption;\n return object;\n };\n\n /**\n * Converts this SdkJoinAckFrame to JSON.\n * @function toJSON\n * @memberof SdkJoinAckFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkJoinAckFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkJoinAckFrame\n * @function getTypeUrl\n * @memberof SdkJoinAckFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkJoinAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkJoinAckFrame\";\n };\n\n return SdkJoinAckFrame;\n})();\n\n$root.SdkLeaveFrame = (function() {\n\n /**\n * Properties of a SdkLeaveFrame.\n * @name ISdkLeaveFrame\n * @interface ISdkLeaveFrame\n */\n\n /**\n * Constructs a new SdkLeaveFrame.\n * @name SdkLeaveFrame\n * @classdesc Represents a SdkLeaveFrame.\n * @implements ISdkLeaveFrame\n * @constructor\n * @param {ISdkLeaveFrame=} [properties] Properties to set\n */\n function SdkLeaveFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Creates a new SdkLeaveFrame instance using the specified properties.\n * @function create\n * @memberof SdkLeaveFrame\n * @static\n * @param {ISdkLeaveFrame=} [properties] Properties to set\n * @returns {SdkLeaveFrame} SdkLeaveFrame instance\n */\n SdkLeaveFrame.create = function create(properties) {\n return new SdkLeaveFrame(properties);\n };\n\n /**\n * Encodes the specified SdkLeaveFrame message. Does not implicitly {@link SdkLeaveFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkLeaveFrame\n * @static\n * @param {ISdkLeaveFrame} message SdkLeaveFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkLeaveFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n return writer;\n };\n\n /**\n * Encodes the specified SdkLeaveFrame message, length delimited. Does not implicitly {@link SdkLeaveFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkLeaveFrame\n * @static\n * @param {ISdkLeaveFrame} message SdkLeaveFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkLeaveFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkLeaveFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkLeaveFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkLeaveFrame} SdkLeaveFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkLeaveFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkLeaveFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkLeaveFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkLeaveFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkLeaveFrame} SdkLeaveFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkLeaveFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkLeaveFrame message.\n * @function verify\n * @memberof SdkLeaveFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkLeaveFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n return null;\n };\n\n /**\n * Creates a SdkLeaveFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkLeaveFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkLeaveFrame} SdkLeaveFrame\n */\n SdkLeaveFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkLeaveFrame)\n return object;\n return new $root.SdkLeaveFrame();\n };\n\n /**\n * Creates a plain object from a SdkLeaveFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkLeaveFrame\n * @static\n * @param {SdkLeaveFrame} message SdkLeaveFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkLeaveFrame.toObject = function toObject() {\n return {};\n };\n\n /**\n * Converts this SdkLeaveFrame to JSON.\n * @function toJSON\n * @memberof SdkLeaveFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkLeaveFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkLeaveFrame\n * @function getTypeUrl\n * @memberof SdkLeaveFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkLeaveFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkLeaveFrame\";\n };\n\n return SdkLeaveFrame;\n})();\n\n$root.SdkLeaveAckFrame = (function() {\n\n /**\n * Properties of a SdkLeaveAckFrame.\n * @name ISdkLeaveAckFrame\n * @interface ISdkLeaveAckFrame\n */\n\n /**\n * Constructs a new SdkLeaveAckFrame.\n * @name SdkLeaveAckFrame\n * @classdesc Represents a SdkLeaveAckFrame.\n * @implements ISdkLeaveAckFrame\n * @constructor\n * @param {ISdkLeaveAckFrame=} [properties] Properties to set\n */\n function SdkLeaveAckFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Creates a new SdkLeaveAckFrame instance using the specified properties.\n * @function create\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {ISdkLeaveAckFrame=} [properties] Properties to set\n * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame instance\n */\n SdkLeaveAckFrame.create = function create(properties) {\n return new SdkLeaveAckFrame(properties);\n };\n\n /**\n * Encodes the specified SdkLeaveAckFrame message. Does not implicitly {@link SdkLeaveAckFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {ISdkLeaveAckFrame} message SdkLeaveAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkLeaveAckFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n return writer;\n };\n\n /**\n * Encodes the specified SdkLeaveAckFrame message, length delimited. Does not implicitly {@link SdkLeaveAckFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {ISdkLeaveAckFrame} message SdkLeaveAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkLeaveAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkLeaveAckFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkLeaveAckFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkLeaveAckFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkLeaveAckFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkLeaveAckFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkLeaveAckFrame message.\n * @function verify\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkLeaveAckFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n return null;\n };\n\n /**\n * Creates a SdkLeaveAckFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkLeaveAckFrame} SdkLeaveAckFrame\n */\n SdkLeaveAckFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkLeaveAckFrame)\n return object;\n return new $root.SdkLeaveAckFrame();\n };\n\n /**\n * Creates a plain object from a SdkLeaveAckFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {SdkLeaveAckFrame} message SdkLeaveAckFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkLeaveAckFrame.toObject = function toObject() {\n return {};\n };\n\n /**\n * Converts this SdkLeaveAckFrame to JSON.\n * @function toJSON\n * @memberof SdkLeaveAckFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkLeaveAckFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkLeaveAckFrame\n * @function getTypeUrl\n * @memberof SdkLeaveAckFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkLeaveAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkLeaveAckFrame\";\n };\n\n return SdkLeaveAckFrame;\n})();\n\n/**\n * SdkStreamServiceType enum.\n * @name SdkStreamServiceType\n * @enum {number}\n * @property {number} RX=1 RX value\n * @property {number} TX=2 TX value\n * @property {number} DUPLEX=3 DUPLEX value\n */\n$root.SdkStreamServiceType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"RX\"] = 1;\n values[valuesById[2] = \"TX\"] = 2;\n values[valuesById[3] = \"DUPLEX\"] = 3;\n return values;\n})();\n\n/**\n * SdkStreamMediaType enum.\n * @name SdkStreamMediaType\n * @enum {number}\n * @property {number} AUDIO=1 AUDIO value\n * @property {number} VIDEO=2 VIDEO value\n */\n$root.SdkStreamMediaType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"AUDIO\"] = 1;\n values[valuesById[2] = \"VIDEO\"] = 2;\n return values;\n})();\n\n$root.SdkSubscribeFrame = (function() {\n\n /**\n * Properties of a SdkSubscribeFrame.\n * @name ISdkSubscribeFrame\n * @interface ISdkSubscribeFrame\n * @property {SdkStreamServiceType|null} [duplex] SdkSubscribeFrame duplex\n * @property {Array.|null} [sendStreams] SdkSubscribeFrame sendStreams\n * @property {Array.|null} [receiveStreamIds] SdkSubscribeFrame receiveStreamIds\n * @property {string|null} [sdpOffer] SdkSubscribeFrame sdpOffer\n * @property {string|null} [audioHost] SdkSubscribeFrame audioHost\n * @property {boolean|null} [audioCheckin] SdkSubscribeFrame audioCheckin\n * @property {boolean|null} [audioMuted] SdkSubscribeFrame audioMuted\n * @property {Uint8Array|null} [compressedSdpOffer] SdkSubscribeFrame compressedSdpOffer\n * @property {Array.|null} [videoSubscriptionConfiguration] SdkSubscribeFrame videoSubscriptionConfiguration\n */\n\n /**\n * Constructs a new SdkSubscribeFrame.\n * @name SdkSubscribeFrame\n * @classdesc Represents a SdkSubscribeFrame.\n * @implements ISdkSubscribeFrame\n * @constructor\n * @param {ISdkSubscribeFrame=} [properties] Properties to set\n */\n function SdkSubscribeFrame(properties) {\n this.sendStreams = [];\n this.receiveStreamIds = [];\n this.videoSubscriptionConfiguration = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkSubscribeFrame duplex.\n * @member {SdkStreamServiceType} duplex\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.duplex = 1;\n\n /**\n * SdkSubscribeFrame sendStreams.\n * @member {Array.} sendStreams\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.sendStreams = $util.emptyArray;\n\n /**\n * SdkSubscribeFrame receiveStreamIds.\n * @member {Array.} receiveStreamIds\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.receiveStreamIds = $util.emptyArray;\n\n /**\n * SdkSubscribeFrame sdpOffer.\n * @member {string} sdpOffer\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.sdpOffer = \"\";\n\n /**\n * SdkSubscribeFrame audioHost.\n * @member {string} audioHost\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.audioHost = \"\";\n\n /**\n * SdkSubscribeFrame audioCheckin.\n * @member {boolean} audioCheckin\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.audioCheckin = false;\n\n /**\n * SdkSubscribeFrame audioMuted.\n * @member {boolean} audioMuted\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.audioMuted = false;\n\n /**\n * SdkSubscribeFrame compressedSdpOffer.\n * @member {Uint8Array} compressedSdpOffer\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.compressedSdpOffer = $util.newBuffer([]);\n\n /**\n * SdkSubscribeFrame videoSubscriptionConfiguration.\n * @member {Array.} videoSubscriptionConfiguration\n * @memberof SdkSubscribeFrame\n * @instance\n */\n SdkSubscribeFrame.prototype.videoSubscriptionConfiguration = $util.emptyArray;\n\n /**\n * Creates a new SdkSubscribeFrame instance using the specified properties.\n * @function create\n * @memberof SdkSubscribeFrame\n * @static\n * @param {ISdkSubscribeFrame=} [properties] Properties to set\n * @returns {SdkSubscribeFrame} SdkSubscribeFrame instance\n */\n SdkSubscribeFrame.create = function create(properties) {\n return new SdkSubscribeFrame(properties);\n };\n\n /**\n * Encodes the specified SdkSubscribeFrame message. Does not implicitly {@link SdkSubscribeFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkSubscribeFrame\n * @static\n * @param {ISdkSubscribeFrame} message SdkSubscribeFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSubscribeFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.duplex != null && Object.hasOwnProperty.call(message, \"duplex\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.duplex);\n if (message.sendStreams != null && message.sendStreams.length)\n for (var i = 0; i < message.sendStreams.length; ++i)\n $root.SdkStreamDescriptor.encode(message.sendStreams[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n if (message.receiveStreamIds != null && message.receiveStreamIds.length)\n for (var i = 0; i < message.receiveStreamIds.length; ++i)\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.receiveStreamIds[i]);\n if (message.sdpOffer != null && Object.hasOwnProperty.call(message, \"sdpOffer\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.sdpOffer);\n if (message.audioHost != null && Object.hasOwnProperty.call(message, \"audioHost\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.audioHost);\n if (message.audioCheckin != null && Object.hasOwnProperty.call(message, \"audioCheckin\"))\n writer.uint32(/* id 6, wireType 0 =*/48).bool(message.audioCheckin);\n if (message.audioMuted != null && Object.hasOwnProperty.call(message, \"audioMuted\"))\n writer.uint32(/* id 7, wireType 0 =*/56).bool(message.audioMuted);\n if (message.compressedSdpOffer != null && Object.hasOwnProperty.call(message, \"compressedSdpOffer\"))\n writer.uint32(/* id 8, wireType 2 =*/66).bytes(message.compressedSdpOffer);\n if (message.videoSubscriptionConfiguration != null && message.videoSubscriptionConfiguration.length)\n for (var i = 0; i < message.videoSubscriptionConfiguration.length; ++i)\n $root.SdkVideoSubscriptionConfiguration.encode(message.videoSubscriptionConfiguration[i], writer.uint32(/* id 9, wireType 2 =*/74).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkSubscribeFrame message, length delimited. Does not implicitly {@link SdkSubscribeFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkSubscribeFrame\n * @static\n * @param {ISdkSubscribeFrame} message SdkSubscribeFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSubscribeFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkSubscribeFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkSubscribeFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSubscribeFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSubscribeFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.duplex = reader.int32();\n break;\n }\n case 2: {\n if (!(message.sendStreams && message.sendStreams.length))\n message.sendStreams = [];\n message.sendStreams.push($root.SdkStreamDescriptor.decode(reader, reader.uint32()));\n break;\n }\n case 3: {\n if (!(message.receiveStreamIds && message.receiveStreamIds.length))\n message.receiveStreamIds = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.receiveStreamIds.push(reader.uint32());\n } else\n message.receiveStreamIds.push(reader.uint32());\n break;\n }\n case 4: {\n message.sdpOffer = reader.string();\n break;\n }\n case 5: {\n message.audioHost = reader.string();\n break;\n }\n case 6: {\n message.audioCheckin = reader.bool();\n break;\n }\n case 7: {\n message.audioMuted = reader.bool();\n break;\n }\n case 8: {\n message.compressedSdpOffer = reader.bytes();\n break;\n }\n case 9: {\n if (!(message.videoSubscriptionConfiguration && message.videoSubscriptionConfiguration.length))\n message.videoSubscriptionConfiguration = [];\n message.videoSubscriptionConfiguration.push($root.SdkVideoSubscriptionConfiguration.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkSubscribeFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkSubscribeFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSubscribeFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkSubscribeFrame message.\n * @function verify\n * @memberof SdkSubscribeFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkSubscribeFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n switch (message.duplex) {\n default:\n return \"duplex: enum value expected\";\n case 1:\n case 2:\n case 3:\n break;\n }\n if (message.sendStreams != null && message.hasOwnProperty(\"sendStreams\")) {\n if (!Array.isArray(message.sendStreams))\n return \"sendStreams: array expected\";\n for (var i = 0; i < message.sendStreams.length; ++i) {\n var error = $root.SdkStreamDescriptor.verify(message.sendStreams[i]);\n if (error)\n return \"sendStreams.\" + error;\n }\n }\n if (message.receiveStreamIds != null && message.hasOwnProperty(\"receiveStreamIds\")) {\n if (!Array.isArray(message.receiveStreamIds))\n return \"receiveStreamIds: array expected\";\n for (var i = 0; i < message.receiveStreamIds.length; ++i)\n if (!$util.isInteger(message.receiveStreamIds[i]))\n return \"receiveStreamIds: integer[] expected\";\n }\n if (message.sdpOffer != null && message.hasOwnProperty(\"sdpOffer\"))\n if (!$util.isString(message.sdpOffer))\n return \"sdpOffer: string expected\";\n if (message.audioHost != null && message.hasOwnProperty(\"audioHost\"))\n if (!$util.isString(message.audioHost))\n return \"audioHost: string expected\";\n if (message.audioCheckin != null && message.hasOwnProperty(\"audioCheckin\"))\n if (typeof message.audioCheckin !== \"boolean\")\n return \"audioCheckin: boolean expected\";\n if (message.audioMuted != null && message.hasOwnProperty(\"audioMuted\"))\n if (typeof message.audioMuted !== \"boolean\")\n return \"audioMuted: boolean expected\";\n if (message.compressedSdpOffer != null && message.hasOwnProperty(\"compressedSdpOffer\"))\n if (!(message.compressedSdpOffer && typeof message.compressedSdpOffer.length === \"number\" || $util.isString(message.compressedSdpOffer)))\n return \"compressedSdpOffer: buffer expected\";\n if (message.videoSubscriptionConfiguration != null && message.hasOwnProperty(\"videoSubscriptionConfiguration\")) {\n if (!Array.isArray(message.videoSubscriptionConfiguration))\n return \"videoSubscriptionConfiguration: array expected\";\n for (var i = 0; i < message.videoSubscriptionConfiguration.length; ++i) {\n var error = $root.SdkVideoSubscriptionConfiguration.verify(message.videoSubscriptionConfiguration[i]);\n if (error)\n return \"videoSubscriptionConfiguration.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkSubscribeFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkSubscribeFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkSubscribeFrame} SdkSubscribeFrame\n */\n SdkSubscribeFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkSubscribeFrame)\n return object;\n var message = new $root.SdkSubscribeFrame();\n switch (object.duplex) {\n default:\n if (typeof object.duplex === \"number\") {\n message.duplex = object.duplex;\n break;\n }\n break;\n case \"RX\":\n case 1:\n message.duplex = 1;\n break;\n case \"TX\":\n case 2:\n message.duplex = 2;\n break;\n case \"DUPLEX\":\n case 3:\n message.duplex = 3;\n break;\n }\n if (object.sendStreams) {\n if (!Array.isArray(object.sendStreams))\n throw TypeError(\".SdkSubscribeFrame.sendStreams: array expected\");\n message.sendStreams = [];\n for (var i = 0; i < object.sendStreams.length; ++i) {\n if (typeof object.sendStreams[i] !== \"object\")\n throw TypeError(\".SdkSubscribeFrame.sendStreams: object expected\");\n message.sendStreams[i] = $root.SdkStreamDescriptor.fromObject(object.sendStreams[i]);\n }\n }\n if (object.receiveStreamIds) {\n if (!Array.isArray(object.receiveStreamIds))\n throw TypeError(\".SdkSubscribeFrame.receiveStreamIds: array expected\");\n message.receiveStreamIds = [];\n for (var i = 0; i < object.receiveStreamIds.length; ++i)\n message.receiveStreamIds[i] = object.receiveStreamIds[i] >>> 0;\n }\n if (object.sdpOffer != null)\n message.sdpOffer = String(object.sdpOffer);\n if (object.audioHost != null)\n message.audioHost = String(object.audioHost);\n if (object.audioCheckin != null)\n message.audioCheckin = Boolean(object.audioCheckin);\n if (object.audioMuted != null)\n message.audioMuted = Boolean(object.audioMuted);\n if (object.compressedSdpOffer != null)\n if (typeof object.compressedSdpOffer === \"string\")\n $util.base64.decode(object.compressedSdpOffer, message.compressedSdpOffer = $util.newBuffer($util.base64.length(object.compressedSdpOffer)), 0);\n else if (object.compressedSdpOffer.length >= 0)\n message.compressedSdpOffer = object.compressedSdpOffer;\n if (object.videoSubscriptionConfiguration) {\n if (!Array.isArray(object.videoSubscriptionConfiguration))\n throw TypeError(\".SdkSubscribeFrame.videoSubscriptionConfiguration: array expected\");\n message.videoSubscriptionConfiguration = [];\n for (var i = 0; i < object.videoSubscriptionConfiguration.length; ++i) {\n if (typeof object.videoSubscriptionConfiguration[i] !== \"object\")\n throw TypeError(\".SdkSubscribeFrame.videoSubscriptionConfiguration: object expected\");\n message.videoSubscriptionConfiguration[i] = $root.SdkVideoSubscriptionConfiguration.fromObject(object.videoSubscriptionConfiguration[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkSubscribeFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkSubscribeFrame\n * @static\n * @param {SdkSubscribeFrame} message SdkSubscribeFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkSubscribeFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.sendStreams = [];\n object.receiveStreamIds = [];\n object.videoSubscriptionConfiguration = [];\n }\n if (options.defaults) {\n object.duplex = options.enums === String ? \"RX\" : 1;\n object.sdpOffer = \"\";\n object.audioHost = \"\";\n object.audioCheckin = false;\n object.audioMuted = false;\n if (options.bytes === String)\n object.compressedSdpOffer = \"\";\n else {\n object.compressedSdpOffer = [];\n if (options.bytes !== Array)\n object.compressedSdpOffer = $util.newBuffer(object.compressedSdpOffer);\n }\n }\n if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n object.duplex = options.enums === String ? $root.SdkStreamServiceType[message.duplex] === undefined ? message.duplex : $root.SdkStreamServiceType[message.duplex] : message.duplex;\n if (message.sendStreams && message.sendStreams.length) {\n object.sendStreams = [];\n for (var j = 0; j < message.sendStreams.length; ++j)\n object.sendStreams[j] = $root.SdkStreamDescriptor.toObject(message.sendStreams[j], options);\n }\n if (message.receiveStreamIds && message.receiveStreamIds.length) {\n object.receiveStreamIds = [];\n for (var j = 0; j < message.receiveStreamIds.length; ++j)\n object.receiveStreamIds[j] = message.receiveStreamIds[j];\n }\n if (message.sdpOffer != null && message.hasOwnProperty(\"sdpOffer\"))\n object.sdpOffer = message.sdpOffer;\n if (message.audioHost != null && message.hasOwnProperty(\"audioHost\"))\n object.audioHost = message.audioHost;\n if (message.audioCheckin != null && message.hasOwnProperty(\"audioCheckin\"))\n object.audioCheckin = message.audioCheckin;\n if (message.audioMuted != null && message.hasOwnProperty(\"audioMuted\"))\n object.audioMuted = message.audioMuted;\n if (message.compressedSdpOffer != null && message.hasOwnProperty(\"compressedSdpOffer\"))\n object.compressedSdpOffer = options.bytes === String ? $util.base64.encode(message.compressedSdpOffer, 0, message.compressedSdpOffer.length) : options.bytes === Array ? Array.prototype.slice.call(message.compressedSdpOffer) : message.compressedSdpOffer;\n if (message.videoSubscriptionConfiguration && message.videoSubscriptionConfiguration.length) {\n object.videoSubscriptionConfiguration = [];\n for (var j = 0; j < message.videoSubscriptionConfiguration.length; ++j)\n object.videoSubscriptionConfiguration[j] = $root.SdkVideoSubscriptionConfiguration.toObject(message.videoSubscriptionConfiguration[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkSubscribeFrame to JSON.\n * @function toJSON\n * @memberof SdkSubscribeFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkSubscribeFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkSubscribeFrame\n * @function getTypeUrl\n * @memberof SdkSubscribeFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkSubscribeFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkSubscribeFrame\";\n };\n\n return SdkSubscribeFrame;\n})();\n\n$root.SdkSubscribeAckFrame = (function() {\n\n /**\n * Properties of a SdkSubscribeAckFrame.\n * @name ISdkSubscribeAckFrame\n * @interface ISdkSubscribeAckFrame\n * @property {SdkStreamServiceType|null} [duplex] SdkSubscribeAckFrame duplex\n * @property {Array.|null} [allocations] SdkSubscribeAckFrame allocations\n * @property {string|null} [sdpAnswer] SdkSubscribeAckFrame sdpAnswer\n * @property {Array.|null} [tracks] SdkSubscribeAckFrame tracks\n * @property {Uint8Array|null} [compressedSdpAnswer] SdkSubscribeAckFrame compressedSdpAnswer\n */\n\n /**\n * Constructs a new SdkSubscribeAckFrame.\n * @name SdkSubscribeAckFrame\n * @classdesc Represents a SdkSubscribeAckFrame.\n * @implements ISdkSubscribeAckFrame\n * @constructor\n * @param {ISdkSubscribeAckFrame=} [properties] Properties to set\n */\n function SdkSubscribeAckFrame(properties) {\n this.allocations = [];\n this.tracks = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkSubscribeAckFrame duplex.\n * @member {SdkStreamServiceType} duplex\n * @memberof SdkSubscribeAckFrame\n * @instance\n */\n SdkSubscribeAckFrame.prototype.duplex = 1;\n\n /**\n * SdkSubscribeAckFrame allocations.\n * @member {Array.} allocations\n * @memberof SdkSubscribeAckFrame\n * @instance\n */\n SdkSubscribeAckFrame.prototype.allocations = $util.emptyArray;\n\n /**\n * SdkSubscribeAckFrame sdpAnswer.\n * @member {string} sdpAnswer\n * @memberof SdkSubscribeAckFrame\n * @instance\n */\n SdkSubscribeAckFrame.prototype.sdpAnswer = \"\";\n\n /**\n * SdkSubscribeAckFrame tracks.\n * @member {Array.} tracks\n * @memberof SdkSubscribeAckFrame\n * @instance\n */\n SdkSubscribeAckFrame.prototype.tracks = $util.emptyArray;\n\n /**\n * SdkSubscribeAckFrame compressedSdpAnswer.\n * @member {Uint8Array} compressedSdpAnswer\n * @memberof SdkSubscribeAckFrame\n * @instance\n */\n SdkSubscribeAckFrame.prototype.compressedSdpAnswer = $util.newBuffer([]);\n\n /**\n * Creates a new SdkSubscribeAckFrame instance using the specified properties.\n * @function create\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {ISdkSubscribeAckFrame=} [properties] Properties to set\n * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame instance\n */\n SdkSubscribeAckFrame.create = function create(properties) {\n return new SdkSubscribeAckFrame(properties);\n };\n\n /**\n * Encodes the specified SdkSubscribeAckFrame message. Does not implicitly {@link SdkSubscribeAckFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {ISdkSubscribeAckFrame} message SdkSubscribeAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSubscribeAckFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.duplex != null && Object.hasOwnProperty.call(message, \"duplex\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.duplex);\n if (message.allocations != null && message.allocations.length)\n for (var i = 0; i < message.allocations.length; ++i)\n $root.SdkStreamAllocation.encode(message.allocations[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n if (message.sdpAnswer != null && Object.hasOwnProperty.call(message, \"sdpAnswer\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.sdpAnswer);\n if (message.tracks != null && message.tracks.length)\n for (var i = 0; i < message.tracks.length; ++i)\n $root.SdkTrackMapping.encode(message.tracks[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();\n if (message.compressedSdpAnswer != null && Object.hasOwnProperty.call(message, \"compressedSdpAnswer\"))\n writer.uint32(/* id 5, wireType 2 =*/42).bytes(message.compressedSdpAnswer);\n return writer;\n };\n\n /**\n * Encodes the specified SdkSubscribeAckFrame message, length delimited. Does not implicitly {@link SdkSubscribeAckFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {ISdkSubscribeAckFrame} message SdkSubscribeAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkSubscribeAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkSubscribeAckFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSubscribeAckFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkSubscribeAckFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.duplex = reader.int32();\n break;\n }\n case 2: {\n if (!(message.allocations && message.allocations.length))\n message.allocations = [];\n message.allocations.push($root.SdkStreamAllocation.decode(reader, reader.uint32()));\n break;\n }\n case 3: {\n message.sdpAnswer = reader.string();\n break;\n }\n case 4: {\n if (!(message.tracks && message.tracks.length))\n message.tracks = [];\n message.tracks.push($root.SdkTrackMapping.decode(reader, reader.uint32()));\n break;\n }\n case 5: {\n message.compressedSdpAnswer = reader.bytes();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkSubscribeAckFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkSubscribeAckFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkSubscribeAckFrame message.\n * @function verify\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkSubscribeAckFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n switch (message.duplex) {\n default:\n return \"duplex: enum value expected\";\n case 1:\n case 2:\n case 3:\n break;\n }\n if (message.allocations != null && message.hasOwnProperty(\"allocations\")) {\n if (!Array.isArray(message.allocations))\n return \"allocations: array expected\";\n for (var i = 0; i < message.allocations.length; ++i) {\n var error = $root.SdkStreamAllocation.verify(message.allocations[i]);\n if (error)\n return \"allocations.\" + error;\n }\n }\n if (message.sdpAnswer != null && message.hasOwnProperty(\"sdpAnswer\"))\n if (!$util.isString(message.sdpAnswer))\n return \"sdpAnswer: string expected\";\n if (message.tracks != null && message.hasOwnProperty(\"tracks\")) {\n if (!Array.isArray(message.tracks))\n return \"tracks: array expected\";\n for (var i = 0; i < message.tracks.length; ++i) {\n var error = $root.SdkTrackMapping.verify(message.tracks[i]);\n if (error)\n return \"tracks.\" + error;\n }\n }\n if (message.compressedSdpAnswer != null && message.hasOwnProperty(\"compressedSdpAnswer\"))\n if (!(message.compressedSdpAnswer && typeof message.compressedSdpAnswer.length === \"number\" || $util.isString(message.compressedSdpAnswer)))\n return \"compressedSdpAnswer: buffer expected\";\n return null;\n };\n\n /**\n * Creates a SdkSubscribeAckFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkSubscribeAckFrame} SdkSubscribeAckFrame\n */\n SdkSubscribeAckFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkSubscribeAckFrame)\n return object;\n var message = new $root.SdkSubscribeAckFrame();\n switch (object.duplex) {\n default:\n if (typeof object.duplex === \"number\") {\n message.duplex = object.duplex;\n break;\n }\n break;\n case \"RX\":\n case 1:\n message.duplex = 1;\n break;\n case \"TX\":\n case 2:\n message.duplex = 2;\n break;\n case \"DUPLEX\":\n case 3:\n message.duplex = 3;\n break;\n }\n if (object.allocations) {\n if (!Array.isArray(object.allocations))\n throw TypeError(\".SdkSubscribeAckFrame.allocations: array expected\");\n message.allocations = [];\n for (var i = 0; i < object.allocations.length; ++i) {\n if (typeof object.allocations[i] !== \"object\")\n throw TypeError(\".SdkSubscribeAckFrame.allocations: object expected\");\n message.allocations[i] = $root.SdkStreamAllocation.fromObject(object.allocations[i]);\n }\n }\n if (object.sdpAnswer != null)\n message.sdpAnswer = String(object.sdpAnswer);\n if (object.tracks) {\n if (!Array.isArray(object.tracks))\n throw TypeError(\".SdkSubscribeAckFrame.tracks: array expected\");\n message.tracks = [];\n for (var i = 0; i < object.tracks.length; ++i) {\n if (typeof object.tracks[i] !== \"object\")\n throw TypeError(\".SdkSubscribeAckFrame.tracks: object expected\");\n message.tracks[i] = $root.SdkTrackMapping.fromObject(object.tracks[i]);\n }\n }\n if (object.compressedSdpAnswer != null)\n if (typeof object.compressedSdpAnswer === \"string\")\n $util.base64.decode(object.compressedSdpAnswer, message.compressedSdpAnswer = $util.newBuffer($util.base64.length(object.compressedSdpAnswer)), 0);\n else if (object.compressedSdpAnswer.length >= 0)\n message.compressedSdpAnswer = object.compressedSdpAnswer;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkSubscribeAckFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {SdkSubscribeAckFrame} message SdkSubscribeAckFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkSubscribeAckFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.allocations = [];\n object.tracks = [];\n }\n if (options.defaults) {\n object.duplex = options.enums === String ? \"RX\" : 1;\n object.sdpAnswer = \"\";\n if (options.bytes === String)\n object.compressedSdpAnswer = \"\";\n else {\n object.compressedSdpAnswer = [];\n if (options.bytes !== Array)\n object.compressedSdpAnswer = $util.newBuffer(object.compressedSdpAnswer);\n }\n }\n if (message.duplex != null && message.hasOwnProperty(\"duplex\"))\n object.duplex = options.enums === String ? $root.SdkStreamServiceType[message.duplex] === undefined ? message.duplex : $root.SdkStreamServiceType[message.duplex] : message.duplex;\n if (message.allocations && message.allocations.length) {\n object.allocations = [];\n for (var j = 0; j < message.allocations.length; ++j)\n object.allocations[j] = $root.SdkStreamAllocation.toObject(message.allocations[j], options);\n }\n if (message.sdpAnswer != null && message.hasOwnProperty(\"sdpAnswer\"))\n object.sdpAnswer = message.sdpAnswer;\n if (message.tracks && message.tracks.length) {\n object.tracks = [];\n for (var j = 0; j < message.tracks.length; ++j)\n object.tracks[j] = $root.SdkTrackMapping.toObject(message.tracks[j], options);\n }\n if (message.compressedSdpAnswer != null && message.hasOwnProperty(\"compressedSdpAnswer\"))\n object.compressedSdpAnswer = options.bytes === String ? $util.base64.encode(message.compressedSdpAnswer, 0, message.compressedSdpAnswer.length) : options.bytes === Array ? Array.prototype.slice.call(message.compressedSdpAnswer) : message.compressedSdpAnswer;\n return object;\n };\n\n /**\n * Converts this SdkSubscribeAckFrame to JSON.\n * @function toJSON\n * @memberof SdkSubscribeAckFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkSubscribeAckFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkSubscribeAckFrame\n * @function getTypeUrl\n * @memberof SdkSubscribeAckFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkSubscribeAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkSubscribeAckFrame\";\n };\n\n return SdkSubscribeAckFrame;\n})();\n\n$root.SdkIndexFrame = (function() {\n\n /**\n * Properties of a SdkIndexFrame.\n * @name ISdkIndexFrame\n * @interface ISdkIndexFrame\n * @property {boolean|null} [atCapacity] SdkIndexFrame atCapacity\n * @property {Array.|null} [sources] SdkIndexFrame sources\n * @property {Array.|null} [pausedAtSourceIds] SdkIndexFrame pausedAtSourceIds\n * @property {number|null} [numParticipants] SdkIndexFrame numParticipants\n * @property {Array.|null} [supportedReceiveCodecIntersection] SdkIndexFrame supportedReceiveCodecIntersection\n */\n\n /**\n * Constructs a new SdkIndexFrame.\n * @name SdkIndexFrame\n * @classdesc Represents a SdkIndexFrame.\n * @implements ISdkIndexFrame\n * @constructor\n * @param {ISdkIndexFrame=} [properties] Properties to set\n */\n function SdkIndexFrame(properties) {\n this.sources = [];\n this.pausedAtSourceIds = [];\n this.supportedReceiveCodecIntersection = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkIndexFrame atCapacity.\n * @member {boolean} atCapacity\n * @memberof SdkIndexFrame\n * @instance\n */\n SdkIndexFrame.prototype.atCapacity = false;\n\n /**\n * SdkIndexFrame sources.\n * @member {Array.} sources\n * @memberof SdkIndexFrame\n * @instance\n */\n SdkIndexFrame.prototype.sources = $util.emptyArray;\n\n /**\n * SdkIndexFrame pausedAtSourceIds.\n * @member {Array.} pausedAtSourceIds\n * @memberof SdkIndexFrame\n * @instance\n */\n SdkIndexFrame.prototype.pausedAtSourceIds = $util.emptyArray;\n\n /**\n * SdkIndexFrame numParticipants.\n * @member {number} numParticipants\n * @memberof SdkIndexFrame\n * @instance\n */\n SdkIndexFrame.prototype.numParticipants = 0;\n\n /**\n * SdkIndexFrame supportedReceiveCodecIntersection.\n * @member {Array.} supportedReceiveCodecIntersection\n * @memberof SdkIndexFrame\n * @instance\n */\n SdkIndexFrame.prototype.supportedReceiveCodecIntersection = $util.emptyArray;\n\n /**\n * Creates a new SdkIndexFrame instance using the specified properties.\n * @function create\n * @memberof SdkIndexFrame\n * @static\n * @param {ISdkIndexFrame=} [properties] Properties to set\n * @returns {SdkIndexFrame} SdkIndexFrame instance\n */\n SdkIndexFrame.create = function create(properties) {\n return new SdkIndexFrame(properties);\n };\n\n /**\n * Encodes the specified SdkIndexFrame message. Does not implicitly {@link SdkIndexFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkIndexFrame\n * @static\n * @param {ISdkIndexFrame} message SdkIndexFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkIndexFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.atCapacity != null && Object.hasOwnProperty.call(message, \"atCapacity\"))\n writer.uint32(/* id 1, wireType 0 =*/8).bool(message.atCapacity);\n if (message.sources != null && message.sources.length)\n for (var i = 0; i < message.sources.length; ++i)\n $root.SdkStreamDescriptor.encode(message.sources[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n if (message.pausedAtSourceIds != null && message.pausedAtSourceIds.length)\n for (var i = 0; i < message.pausedAtSourceIds.length; ++i)\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.pausedAtSourceIds[i]);\n if (message.numParticipants != null && Object.hasOwnProperty.call(message, \"numParticipants\"))\n writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.numParticipants);\n if (message.supportedReceiveCodecIntersection != null && message.supportedReceiveCodecIntersection.length)\n for (var i = 0; i < message.supportedReceiveCodecIntersection.length; ++i)\n writer.uint32(/* id 5, wireType 0 =*/40).int32(message.supportedReceiveCodecIntersection[i]);\n return writer;\n };\n\n /**\n * Encodes the specified SdkIndexFrame message, length delimited. Does not implicitly {@link SdkIndexFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkIndexFrame\n * @static\n * @param {ISdkIndexFrame} message SdkIndexFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkIndexFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkIndexFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkIndexFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkIndexFrame} SdkIndexFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkIndexFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkIndexFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.atCapacity = reader.bool();\n break;\n }\n case 2: {\n if (!(message.sources && message.sources.length))\n message.sources = [];\n message.sources.push($root.SdkStreamDescriptor.decode(reader, reader.uint32()));\n break;\n }\n case 3: {\n if (!(message.pausedAtSourceIds && message.pausedAtSourceIds.length))\n message.pausedAtSourceIds = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.pausedAtSourceIds.push(reader.uint32());\n } else\n message.pausedAtSourceIds.push(reader.uint32());\n break;\n }\n case 4: {\n message.numParticipants = reader.uint32();\n break;\n }\n case 5: {\n if (!(message.supportedReceiveCodecIntersection && message.supportedReceiveCodecIntersection.length))\n message.supportedReceiveCodecIntersection = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.supportedReceiveCodecIntersection.push(reader.int32());\n } else\n message.supportedReceiveCodecIntersection.push(reader.int32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkIndexFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkIndexFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkIndexFrame} SdkIndexFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkIndexFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkIndexFrame message.\n * @function verify\n * @memberof SdkIndexFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkIndexFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.atCapacity != null && message.hasOwnProperty(\"atCapacity\"))\n if (typeof message.atCapacity !== \"boolean\")\n return \"atCapacity: boolean expected\";\n if (message.sources != null && message.hasOwnProperty(\"sources\")) {\n if (!Array.isArray(message.sources))\n return \"sources: array expected\";\n for (var i = 0; i < message.sources.length; ++i) {\n var error = $root.SdkStreamDescriptor.verify(message.sources[i]);\n if (error)\n return \"sources.\" + error;\n }\n }\n if (message.pausedAtSourceIds != null && message.hasOwnProperty(\"pausedAtSourceIds\")) {\n if (!Array.isArray(message.pausedAtSourceIds))\n return \"pausedAtSourceIds: array expected\";\n for (var i = 0; i < message.pausedAtSourceIds.length; ++i)\n if (!$util.isInteger(message.pausedAtSourceIds[i]))\n return \"pausedAtSourceIds: integer[] expected\";\n }\n if (message.numParticipants != null && message.hasOwnProperty(\"numParticipants\"))\n if (!$util.isInteger(message.numParticipants))\n return \"numParticipants: integer expected\";\n if (message.supportedReceiveCodecIntersection != null && message.hasOwnProperty(\"supportedReceiveCodecIntersection\")) {\n if (!Array.isArray(message.supportedReceiveCodecIntersection))\n return \"supportedReceiveCodecIntersection: array expected\";\n for (var i = 0; i < message.supportedReceiveCodecIntersection.length; ++i)\n switch (message.supportedReceiveCodecIntersection[i]) {\n default:\n return \"supportedReceiveCodecIntersection: enum value[] expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 8:\n case 11:\n break;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkIndexFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkIndexFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkIndexFrame} SdkIndexFrame\n */\n SdkIndexFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkIndexFrame)\n return object;\n var message = new $root.SdkIndexFrame();\n if (object.atCapacity != null)\n message.atCapacity = Boolean(object.atCapacity);\n if (object.sources) {\n if (!Array.isArray(object.sources))\n throw TypeError(\".SdkIndexFrame.sources: array expected\");\n message.sources = [];\n for (var i = 0; i < object.sources.length; ++i) {\n if (typeof object.sources[i] !== \"object\")\n throw TypeError(\".SdkIndexFrame.sources: object expected\");\n message.sources[i] = $root.SdkStreamDescriptor.fromObject(object.sources[i]);\n }\n }\n if (object.pausedAtSourceIds) {\n if (!Array.isArray(object.pausedAtSourceIds))\n throw TypeError(\".SdkIndexFrame.pausedAtSourceIds: array expected\");\n message.pausedAtSourceIds = [];\n for (var i = 0; i < object.pausedAtSourceIds.length; ++i)\n message.pausedAtSourceIds[i] = object.pausedAtSourceIds[i] >>> 0;\n }\n if (object.numParticipants != null)\n message.numParticipants = object.numParticipants >>> 0;\n if (object.supportedReceiveCodecIntersection) {\n if (!Array.isArray(object.supportedReceiveCodecIntersection))\n throw TypeError(\".SdkIndexFrame.supportedReceiveCodecIntersection: array expected\");\n message.supportedReceiveCodecIntersection = [];\n for (var i = 0; i < object.supportedReceiveCodecIntersection.length; ++i)\n switch (object.supportedReceiveCodecIntersection[i]) {\n default:\n if (typeof object.supportedReceiveCodecIntersection[i] === \"number\") {\n message.supportedReceiveCodecIntersection[i] = object.supportedReceiveCodecIntersection[i];\n break;\n }\n case \"VP8\":\n case 1:\n message.supportedReceiveCodecIntersection[i] = 1;\n break;\n case \"H264_BASELINE_PROFILE\":\n case 2:\n message.supportedReceiveCodecIntersection[i] = 2;\n break;\n case \"H264_CONSTRAINED_BASELINE_PROFILE\":\n case 3:\n message.supportedReceiveCodecIntersection[i] = 3;\n break;\n case \"H264_MAIN_PROFILE\":\n case 4:\n message.supportedReceiveCodecIntersection[i] = 4;\n break;\n case \"H264_HIGH_PROFILE\":\n case 5:\n message.supportedReceiveCodecIntersection[i] = 5;\n break;\n case \"H264_CONSTRAINED_HIGH_PROFILE\":\n case 6:\n message.supportedReceiveCodecIntersection[i] = 6;\n break;\n case \"VP9_PROFILE_0\":\n case 8:\n message.supportedReceiveCodecIntersection[i] = 8;\n break;\n case \"AV1_MAIN_PROFILE\":\n case 11:\n message.supportedReceiveCodecIntersection[i] = 11;\n break;\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkIndexFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkIndexFrame\n * @static\n * @param {SdkIndexFrame} message SdkIndexFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkIndexFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.sources = [];\n object.pausedAtSourceIds = [];\n object.supportedReceiveCodecIntersection = [];\n }\n if (options.defaults) {\n object.atCapacity = false;\n object.numParticipants = 0;\n }\n if (message.atCapacity != null && message.hasOwnProperty(\"atCapacity\"))\n object.atCapacity = message.atCapacity;\n if (message.sources && message.sources.length) {\n object.sources = [];\n for (var j = 0; j < message.sources.length; ++j)\n object.sources[j] = $root.SdkStreamDescriptor.toObject(message.sources[j], options);\n }\n if (message.pausedAtSourceIds && message.pausedAtSourceIds.length) {\n object.pausedAtSourceIds = [];\n for (var j = 0; j < message.pausedAtSourceIds.length; ++j)\n object.pausedAtSourceIds[j] = message.pausedAtSourceIds[j];\n }\n if (message.numParticipants != null && message.hasOwnProperty(\"numParticipants\"))\n object.numParticipants = message.numParticipants;\n if (message.supportedReceiveCodecIntersection && message.supportedReceiveCodecIntersection.length) {\n object.supportedReceiveCodecIntersection = [];\n for (var j = 0; j < message.supportedReceiveCodecIntersection.length; ++j)\n object.supportedReceiveCodecIntersection[j] = options.enums === String ? $root.SdkVideoCodecCapability[message.supportedReceiveCodecIntersection[j]] === undefined ? message.supportedReceiveCodecIntersection[j] : $root.SdkVideoCodecCapability[message.supportedReceiveCodecIntersection[j]] : message.supportedReceiveCodecIntersection[j];\n }\n return object;\n };\n\n /**\n * Converts this SdkIndexFrame to JSON.\n * @function toJSON\n * @memberof SdkIndexFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkIndexFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkIndexFrame\n * @function getTypeUrl\n * @memberof SdkIndexFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkIndexFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkIndexFrame\";\n };\n\n return SdkIndexFrame;\n})();\n\n$root.SdkPauseResumeFrame = (function() {\n\n /**\n * Properties of a SdkPauseResumeFrame.\n * @name ISdkPauseResumeFrame\n * @interface ISdkPauseResumeFrame\n * @property {Array.|null} [streamIds] SdkPauseResumeFrame streamIds\n * @property {Array.|null} [groupIds] SdkPauseResumeFrame groupIds\n */\n\n /**\n * Constructs a new SdkPauseResumeFrame.\n * @name SdkPauseResumeFrame\n * @classdesc Represents a SdkPauseResumeFrame.\n * @implements ISdkPauseResumeFrame\n * @constructor\n * @param {ISdkPauseResumeFrame=} [properties] Properties to set\n */\n function SdkPauseResumeFrame(properties) {\n this.streamIds = [];\n this.groupIds = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkPauseResumeFrame streamIds.\n * @member {Array.} streamIds\n * @memberof SdkPauseResumeFrame\n * @instance\n */\n SdkPauseResumeFrame.prototype.streamIds = $util.emptyArray;\n\n /**\n * SdkPauseResumeFrame groupIds.\n * @member {Array.} groupIds\n * @memberof SdkPauseResumeFrame\n * @instance\n */\n SdkPauseResumeFrame.prototype.groupIds = $util.emptyArray;\n\n /**\n * Creates a new SdkPauseResumeFrame instance using the specified properties.\n * @function create\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {ISdkPauseResumeFrame=} [properties] Properties to set\n * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame instance\n */\n SdkPauseResumeFrame.create = function create(properties) {\n return new SdkPauseResumeFrame(properties);\n };\n\n /**\n * Encodes the specified SdkPauseResumeFrame message. Does not implicitly {@link SdkPauseResumeFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {ISdkPauseResumeFrame} message SdkPauseResumeFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPauseResumeFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.streamIds != null && message.streamIds.length)\n for (var i = 0; i < message.streamIds.length; ++i)\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamIds[i]);\n if (message.groupIds != null && message.groupIds.length)\n for (var i = 0; i < message.groupIds.length; ++i)\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.groupIds[i]);\n return writer;\n };\n\n /**\n * Encodes the specified SdkPauseResumeFrame message, length delimited. Does not implicitly {@link SdkPauseResumeFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {ISdkPauseResumeFrame} message SdkPauseResumeFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPauseResumeFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkPauseResumeFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPauseResumeFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPauseResumeFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.streamIds && message.streamIds.length))\n message.streamIds = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.streamIds.push(reader.uint32());\n } else\n message.streamIds.push(reader.uint32());\n break;\n }\n case 2: {\n if (!(message.groupIds && message.groupIds.length))\n message.groupIds = [];\n if ((tag & 7) === 2) {\n var end2 = reader.uint32() + reader.pos;\n while (reader.pos < end2)\n message.groupIds.push(reader.uint32());\n } else\n message.groupIds.push(reader.uint32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkPauseResumeFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPauseResumeFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkPauseResumeFrame message.\n * @function verify\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkPauseResumeFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.streamIds != null && message.hasOwnProperty(\"streamIds\")) {\n if (!Array.isArray(message.streamIds))\n return \"streamIds: array expected\";\n for (var i = 0; i < message.streamIds.length; ++i)\n if (!$util.isInteger(message.streamIds[i]))\n return \"streamIds: integer[] expected\";\n }\n if (message.groupIds != null && message.hasOwnProperty(\"groupIds\")) {\n if (!Array.isArray(message.groupIds))\n return \"groupIds: array expected\";\n for (var i = 0; i < message.groupIds.length; ++i)\n if (!$util.isInteger(message.groupIds[i]))\n return \"groupIds: integer[] expected\";\n }\n return null;\n };\n\n /**\n * Creates a SdkPauseResumeFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkPauseResumeFrame} SdkPauseResumeFrame\n */\n SdkPauseResumeFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkPauseResumeFrame)\n return object;\n var message = new $root.SdkPauseResumeFrame();\n if (object.streamIds) {\n if (!Array.isArray(object.streamIds))\n throw TypeError(\".SdkPauseResumeFrame.streamIds: array expected\");\n message.streamIds = [];\n for (var i = 0; i < object.streamIds.length; ++i)\n message.streamIds[i] = object.streamIds[i] >>> 0;\n }\n if (object.groupIds) {\n if (!Array.isArray(object.groupIds))\n throw TypeError(\".SdkPauseResumeFrame.groupIds: array expected\");\n message.groupIds = [];\n for (var i = 0; i < object.groupIds.length; ++i)\n message.groupIds[i] = object.groupIds[i] >>> 0;\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkPauseResumeFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {SdkPauseResumeFrame} message SdkPauseResumeFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkPauseResumeFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.streamIds = [];\n object.groupIds = [];\n }\n if (message.streamIds && message.streamIds.length) {\n object.streamIds = [];\n for (var j = 0; j < message.streamIds.length; ++j)\n object.streamIds[j] = message.streamIds[j];\n }\n if (message.groupIds && message.groupIds.length) {\n object.groupIds = [];\n for (var j = 0; j < message.groupIds.length; ++j)\n object.groupIds[j] = message.groupIds[j];\n }\n return object;\n };\n\n /**\n * Converts this SdkPauseResumeFrame to JSON.\n * @function toJSON\n * @memberof SdkPauseResumeFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkPauseResumeFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkPauseResumeFrame\n * @function getTypeUrl\n * @memberof SdkPauseResumeFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkPauseResumeFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkPauseResumeFrame\";\n };\n\n return SdkPauseResumeFrame;\n})();\n\n$root.SdkBitrateFrame = (function() {\n\n /**\n * Properties of a SdkBitrateFrame.\n * @name ISdkBitrateFrame\n * @interface ISdkBitrateFrame\n * @property {Array.|null} [bitrates] SdkBitrateFrame bitrates\n * @property {number|null} [serverAvailableOutgoingBitrate] SdkBitrateFrame serverAvailableOutgoingBitrate\n */\n\n /**\n * Constructs a new SdkBitrateFrame.\n * @name SdkBitrateFrame\n * @classdesc Represents a SdkBitrateFrame.\n * @implements ISdkBitrateFrame\n * @constructor\n * @param {ISdkBitrateFrame=} [properties] Properties to set\n */\n function SdkBitrateFrame(properties) {\n this.bitrates = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkBitrateFrame bitrates.\n * @member {Array.} bitrates\n * @memberof SdkBitrateFrame\n * @instance\n */\n SdkBitrateFrame.prototype.bitrates = $util.emptyArray;\n\n /**\n * SdkBitrateFrame serverAvailableOutgoingBitrate.\n * @member {number} serverAvailableOutgoingBitrate\n * @memberof SdkBitrateFrame\n * @instance\n */\n SdkBitrateFrame.prototype.serverAvailableOutgoingBitrate = 0;\n\n /**\n * Creates a new SdkBitrateFrame instance using the specified properties.\n * @function create\n * @memberof SdkBitrateFrame\n * @static\n * @param {ISdkBitrateFrame=} [properties] Properties to set\n * @returns {SdkBitrateFrame} SdkBitrateFrame instance\n */\n SdkBitrateFrame.create = function create(properties) {\n return new SdkBitrateFrame(properties);\n };\n\n /**\n * Encodes the specified SdkBitrateFrame message. Does not implicitly {@link SdkBitrateFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkBitrateFrame\n * @static\n * @param {ISdkBitrateFrame} message SdkBitrateFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkBitrateFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.bitrates != null && message.bitrates.length)\n for (var i = 0; i < message.bitrates.length; ++i)\n $root.SdkBitrate.encode(message.bitrates[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.serverAvailableOutgoingBitrate != null && Object.hasOwnProperty.call(message, \"serverAvailableOutgoingBitrate\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.serverAvailableOutgoingBitrate);\n return writer;\n };\n\n /**\n * Encodes the specified SdkBitrateFrame message, length delimited. Does not implicitly {@link SdkBitrateFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkBitrateFrame\n * @static\n * @param {ISdkBitrateFrame} message SdkBitrateFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkBitrateFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkBitrateFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkBitrateFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkBitrateFrame} SdkBitrateFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkBitrateFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkBitrateFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.bitrates && message.bitrates.length))\n message.bitrates = [];\n message.bitrates.push($root.SdkBitrate.decode(reader, reader.uint32()));\n break;\n }\n case 2: {\n message.serverAvailableOutgoingBitrate = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkBitrateFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkBitrateFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkBitrateFrame} SdkBitrateFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkBitrateFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkBitrateFrame message.\n * @function verify\n * @memberof SdkBitrateFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkBitrateFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.bitrates != null && message.hasOwnProperty(\"bitrates\")) {\n if (!Array.isArray(message.bitrates))\n return \"bitrates: array expected\";\n for (var i = 0; i < message.bitrates.length; ++i) {\n var error = $root.SdkBitrate.verify(message.bitrates[i]);\n if (error)\n return \"bitrates.\" + error;\n }\n }\n if (message.serverAvailableOutgoingBitrate != null && message.hasOwnProperty(\"serverAvailableOutgoingBitrate\"))\n if (!$util.isInteger(message.serverAvailableOutgoingBitrate))\n return \"serverAvailableOutgoingBitrate: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkBitrateFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkBitrateFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkBitrateFrame} SdkBitrateFrame\n */\n SdkBitrateFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkBitrateFrame)\n return object;\n var message = new $root.SdkBitrateFrame();\n if (object.bitrates) {\n if (!Array.isArray(object.bitrates))\n throw TypeError(\".SdkBitrateFrame.bitrates: array expected\");\n message.bitrates = [];\n for (var i = 0; i < object.bitrates.length; ++i) {\n if (typeof object.bitrates[i] !== \"object\")\n throw TypeError(\".SdkBitrateFrame.bitrates: object expected\");\n message.bitrates[i] = $root.SdkBitrate.fromObject(object.bitrates[i]);\n }\n }\n if (object.serverAvailableOutgoingBitrate != null)\n message.serverAvailableOutgoingBitrate = object.serverAvailableOutgoingBitrate >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkBitrateFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkBitrateFrame\n * @static\n * @param {SdkBitrateFrame} message SdkBitrateFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkBitrateFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.bitrates = [];\n if (options.defaults)\n object.serverAvailableOutgoingBitrate = 0;\n if (message.bitrates && message.bitrates.length) {\n object.bitrates = [];\n for (var j = 0; j < message.bitrates.length; ++j)\n object.bitrates[j] = $root.SdkBitrate.toObject(message.bitrates[j], options);\n }\n if (message.serverAvailableOutgoingBitrate != null && message.hasOwnProperty(\"serverAvailableOutgoingBitrate\"))\n object.serverAvailableOutgoingBitrate = message.serverAvailableOutgoingBitrate;\n return object;\n };\n\n /**\n * Converts this SdkBitrateFrame to JSON.\n * @function toJSON\n * @memberof SdkBitrateFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkBitrateFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkBitrateFrame\n * @function getTypeUrl\n * @memberof SdkBitrateFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkBitrateFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkBitrateFrame\";\n };\n\n return SdkBitrateFrame;\n})();\n\n$root.SdkStreamDescriptor = (function() {\n\n /**\n * Properties of a SdkStreamDescriptor.\n * @name ISdkStreamDescriptor\n * @interface ISdkStreamDescriptor\n * @property {number|null} [streamId] SdkStreamDescriptor streamId\n * @property {number|null} [framerate] SdkStreamDescriptor framerate\n * @property {number|null} [maxBitrateKbps] SdkStreamDescriptor maxBitrateKbps\n * @property {string|null} [trackLabel] SdkStreamDescriptor trackLabel\n * @property {number|null} [groupId] SdkStreamDescriptor groupId\n * @property {number|null} [avgBitrateBps] SdkStreamDescriptor avgBitrateBps\n * @property {string|null} [attendeeId] SdkStreamDescriptor attendeeId\n * @property {SdkStreamMediaType|null} [mediaType] SdkStreamDescriptor mediaType\n * @property {string|null} [externalUserId] SdkStreamDescriptor externalUserId\n * @property {number|null} [width] SdkStreamDescriptor width\n * @property {number|null} [height] SdkStreamDescriptor height\n */\n\n /**\n * Constructs a new SdkStreamDescriptor.\n * @name SdkStreamDescriptor\n * @classdesc Represents a SdkStreamDescriptor.\n * @implements ISdkStreamDescriptor\n * @constructor\n * @param {ISdkStreamDescriptor=} [properties] Properties to set\n */\n function SdkStreamDescriptor(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkStreamDescriptor streamId.\n * @member {number} streamId\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.streamId = 0;\n\n /**\n * SdkStreamDescriptor framerate.\n * @member {number} framerate\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.framerate = 0;\n\n /**\n * SdkStreamDescriptor maxBitrateKbps.\n * @member {number} maxBitrateKbps\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.maxBitrateKbps = 0;\n\n /**\n * SdkStreamDescriptor trackLabel.\n * @member {string} trackLabel\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.trackLabel = \"\";\n\n /**\n * SdkStreamDescriptor groupId.\n * @member {number} groupId\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.groupId = 0;\n\n /**\n * SdkStreamDescriptor avgBitrateBps.\n * @member {number} avgBitrateBps\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.avgBitrateBps = 0;\n\n /**\n * SdkStreamDescriptor attendeeId.\n * @member {string} attendeeId\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.attendeeId = \"\";\n\n /**\n * SdkStreamDescriptor mediaType.\n * @member {SdkStreamMediaType} mediaType\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.mediaType = 1;\n\n /**\n * SdkStreamDescriptor externalUserId.\n * @member {string} externalUserId\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.externalUserId = \"\";\n\n /**\n * SdkStreamDescriptor width.\n * @member {number} width\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.width = 0;\n\n /**\n * SdkStreamDescriptor height.\n * @member {number} height\n * @memberof SdkStreamDescriptor\n * @instance\n */\n SdkStreamDescriptor.prototype.height = 0;\n\n /**\n * Creates a new SdkStreamDescriptor instance using the specified properties.\n * @function create\n * @memberof SdkStreamDescriptor\n * @static\n * @param {ISdkStreamDescriptor=} [properties] Properties to set\n * @returns {SdkStreamDescriptor} SdkStreamDescriptor instance\n */\n SdkStreamDescriptor.create = function create(properties) {\n return new SdkStreamDescriptor(properties);\n };\n\n /**\n * Encodes the specified SdkStreamDescriptor message. Does not implicitly {@link SdkStreamDescriptor.verify|verify} messages.\n * @function encode\n * @memberof SdkStreamDescriptor\n * @static\n * @param {ISdkStreamDescriptor} message SdkStreamDescriptor message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamDescriptor.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamId);\n if (message.framerate != null && Object.hasOwnProperty.call(message, \"framerate\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.framerate);\n if (message.maxBitrateKbps != null && Object.hasOwnProperty.call(message, \"maxBitrateKbps\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.maxBitrateKbps);\n if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.trackLabel);\n if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.groupId);\n if (message.avgBitrateBps != null && Object.hasOwnProperty.call(message, \"avgBitrateBps\"))\n writer.uint32(/* id 7, wireType 0 =*/56).uint32(message.avgBitrateBps);\n if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n writer.uint32(/* id 8, wireType 2 =*/66).string(message.attendeeId);\n if (message.mediaType != null && Object.hasOwnProperty.call(message, \"mediaType\"))\n writer.uint32(/* id 9, wireType 0 =*/72).int32(message.mediaType);\n if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n writer.uint32(/* id 10, wireType 2 =*/82).string(message.externalUserId);\n if (message.width != null && Object.hasOwnProperty.call(message, \"width\"))\n writer.uint32(/* id 11, wireType 0 =*/88).uint32(message.width);\n if (message.height != null && Object.hasOwnProperty.call(message, \"height\"))\n writer.uint32(/* id 12, wireType 0 =*/96).uint32(message.height);\n return writer;\n };\n\n /**\n * Encodes the specified SdkStreamDescriptor message, length delimited. Does not implicitly {@link SdkStreamDescriptor.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkStreamDescriptor\n * @static\n * @param {ISdkStreamDescriptor} message SdkStreamDescriptor message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamDescriptor.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkStreamDescriptor message from the specified reader or buffer.\n * @function decode\n * @memberof SdkStreamDescriptor\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamDescriptor.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamDescriptor();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.streamId = reader.uint32();\n break;\n }\n case 2: {\n message.framerate = reader.uint32();\n break;\n }\n case 3: {\n message.maxBitrateKbps = reader.uint32();\n break;\n }\n case 4: {\n message.trackLabel = reader.string();\n break;\n }\n case 6: {\n message.groupId = reader.uint32();\n break;\n }\n case 7: {\n message.avgBitrateBps = reader.uint32();\n break;\n }\n case 8: {\n message.attendeeId = reader.string();\n break;\n }\n case 9: {\n message.mediaType = reader.int32();\n break;\n }\n case 10: {\n message.externalUserId = reader.string();\n break;\n }\n case 11: {\n message.width = reader.uint32();\n break;\n }\n case 12: {\n message.height = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkStreamDescriptor message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkStreamDescriptor\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamDescriptor.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkStreamDescriptor message.\n * @function verify\n * @memberof SdkStreamDescriptor\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkStreamDescriptor.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.framerate != null && message.hasOwnProperty(\"framerate\"))\n if (!$util.isInteger(message.framerate))\n return \"framerate: integer expected\";\n if (message.maxBitrateKbps != null && message.hasOwnProperty(\"maxBitrateKbps\"))\n if (!$util.isInteger(message.maxBitrateKbps))\n return \"maxBitrateKbps: integer expected\";\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n if (!$util.isString(message.trackLabel))\n return \"trackLabel: string expected\";\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n if (!$util.isInteger(message.groupId))\n return \"groupId: integer expected\";\n if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n if (!$util.isInteger(message.avgBitrateBps))\n return \"avgBitrateBps: integer expected\";\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n if (!$util.isString(message.attendeeId))\n return \"attendeeId: string expected\";\n if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n switch (message.mediaType) {\n default:\n return \"mediaType: enum value expected\";\n case 1:\n case 2:\n break;\n }\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n if (!$util.isString(message.externalUserId))\n return \"externalUserId: string expected\";\n if (message.width != null && message.hasOwnProperty(\"width\"))\n if (!$util.isInteger(message.width))\n return \"width: integer expected\";\n if (message.height != null && message.hasOwnProperty(\"height\"))\n if (!$util.isInteger(message.height))\n return \"height: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkStreamDescriptor message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkStreamDescriptor\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkStreamDescriptor} SdkStreamDescriptor\n */\n SdkStreamDescriptor.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkStreamDescriptor)\n return object;\n var message = new $root.SdkStreamDescriptor();\n if (object.streamId != null)\n message.streamId = object.streamId >>> 0;\n if (object.framerate != null)\n message.framerate = object.framerate >>> 0;\n if (object.maxBitrateKbps != null)\n message.maxBitrateKbps = object.maxBitrateKbps >>> 0;\n if (object.trackLabel != null)\n message.trackLabel = String(object.trackLabel);\n if (object.groupId != null)\n message.groupId = object.groupId >>> 0;\n if (object.avgBitrateBps != null)\n message.avgBitrateBps = object.avgBitrateBps >>> 0;\n if (object.attendeeId != null)\n message.attendeeId = String(object.attendeeId);\n switch (object.mediaType) {\n default:\n if (typeof object.mediaType === \"number\") {\n message.mediaType = object.mediaType;\n break;\n }\n break;\n case \"AUDIO\":\n case 1:\n message.mediaType = 1;\n break;\n case \"VIDEO\":\n case 2:\n message.mediaType = 2;\n break;\n }\n if (object.externalUserId != null)\n message.externalUserId = String(object.externalUserId);\n if (object.width != null)\n message.width = object.width >>> 0;\n if (object.height != null)\n message.height = object.height >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkStreamDescriptor message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkStreamDescriptor\n * @static\n * @param {SdkStreamDescriptor} message SdkStreamDescriptor\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkStreamDescriptor.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.streamId = 0;\n object.framerate = 0;\n object.maxBitrateKbps = 0;\n object.trackLabel = \"\";\n object.groupId = 0;\n object.avgBitrateBps = 0;\n object.attendeeId = \"\";\n object.mediaType = options.enums === String ? \"AUDIO\" : 1;\n object.externalUserId = \"\";\n object.width = 0;\n object.height = 0;\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.framerate != null && message.hasOwnProperty(\"framerate\"))\n object.framerate = message.framerate;\n if (message.maxBitrateKbps != null && message.hasOwnProperty(\"maxBitrateKbps\"))\n object.maxBitrateKbps = message.maxBitrateKbps;\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n object.trackLabel = message.trackLabel;\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n object.groupId = message.groupId;\n if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n object.avgBitrateBps = message.avgBitrateBps;\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n object.attendeeId = message.attendeeId;\n if (message.mediaType != null && message.hasOwnProperty(\"mediaType\"))\n object.mediaType = options.enums === String ? $root.SdkStreamMediaType[message.mediaType] === undefined ? message.mediaType : $root.SdkStreamMediaType[message.mediaType] : message.mediaType;\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n object.externalUserId = message.externalUserId;\n if (message.width != null && message.hasOwnProperty(\"width\"))\n object.width = message.width;\n if (message.height != null && message.hasOwnProperty(\"height\"))\n object.height = message.height;\n return object;\n };\n\n /**\n * Converts this SdkStreamDescriptor to JSON.\n * @function toJSON\n * @memberof SdkStreamDescriptor\n * @instance\n * @returns {Object.} JSON object\n */\n SdkStreamDescriptor.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkStreamDescriptor\n * @function getTypeUrl\n * @memberof SdkStreamDescriptor\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkStreamDescriptor.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkStreamDescriptor\";\n };\n\n return SdkStreamDescriptor;\n})();\n\n$root.SdkStreamAllocation = (function() {\n\n /**\n * Properties of a SdkStreamAllocation.\n * @name ISdkStreamAllocation\n * @interface ISdkStreamAllocation\n * @property {string|null} [trackLabel] SdkStreamAllocation trackLabel\n * @property {number|null} [streamId] SdkStreamAllocation streamId\n * @property {number|null} [groupId] SdkStreamAllocation groupId\n */\n\n /**\n * Constructs a new SdkStreamAllocation.\n * @name SdkStreamAllocation\n * @classdesc Represents a SdkStreamAllocation.\n * @implements ISdkStreamAllocation\n * @constructor\n * @param {ISdkStreamAllocation=} [properties] Properties to set\n */\n function SdkStreamAllocation(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkStreamAllocation trackLabel.\n * @member {string} trackLabel\n * @memberof SdkStreamAllocation\n * @instance\n */\n SdkStreamAllocation.prototype.trackLabel = \"\";\n\n /**\n * SdkStreamAllocation streamId.\n * @member {number} streamId\n * @memberof SdkStreamAllocation\n * @instance\n */\n SdkStreamAllocation.prototype.streamId = 0;\n\n /**\n * SdkStreamAllocation groupId.\n * @member {number} groupId\n * @memberof SdkStreamAllocation\n * @instance\n */\n SdkStreamAllocation.prototype.groupId = 0;\n\n /**\n * Creates a new SdkStreamAllocation instance using the specified properties.\n * @function create\n * @memberof SdkStreamAllocation\n * @static\n * @param {ISdkStreamAllocation=} [properties] Properties to set\n * @returns {SdkStreamAllocation} SdkStreamAllocation instance\n */\n SdkStreamAllocation.create = function create(properties) {\n return new SdkStreamAllocation(properties);\n };\n\n /**\n * Encodes the specified SdkStreamAllocation message. Does not implicitly {@link SdkStreamAllocation.verify|verify} messages.\n * @function encode\n * @memberof SdkStreamAllocation\n * @static\n * @param {ISdkStreamAllocation} message SdkStreamAllocation message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamAllocation.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.trackLabel);\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.streamId);\n if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.groupId);\n return writer;\n };\n\n /**\n * Encodes the specified SdkStreamAllocation message, length delimited. Does not implicitly {@link SdkStreamAllocation.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkStreamAllocation\n * @static\n * @param {ISdkStreamAllocation} message SdkStreamAllocation message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamAllocation.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkStreamAllocation message from the specified reader or buffer.\n * @function decode\n * @memberof SdkStreamAllocation\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkStreamAllocation} SdkStreamAllocation\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamAllocation.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamAllocation();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.trackLabel = reader.string();\n break;\n }\n case 2: {\n message.streamId = reader.uint32();\n break;\n }\n case 3: {\n message.groupId = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkStreamAllocation message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkStreamAllocation\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkStreamAllocation} SdkStreamAllocation\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamAllocation.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkStreamAllocation message.\n * @function verify\n * @memberof SdkStreamAllocation\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkStreamAllocation.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n if (!$util.isString(message.trackLabel))\n return \"trackLabel: string expected\";\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n if (!$util.isInteger(message.groupId))\n return \"groupId: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkStreamAllocation message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkStreamAllocation\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkStreamAllocation} SdkStreamAllocation\n */\n SdkStreamAllocation.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkStreamAllocation)\n return object;\n var message = new $root.SdkStreamAllocation();\n if (object.trackLabel != null)\n message.trackLabel = String(object.trackLabel);\n if (object.streamId != null)\n message.streamId = object.streamId >>> 0;\n if (object.groupId != null)\n message.groupId = object.groupId >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkStreamAllocation message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkStreamAllocation\n * @static\n * @param {SdkStreamAllocation} message SdkStreamAllocation\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkStreamAllocation.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.trackLabel = \"\";\n object.streamId = 0;\n object.groupId = 0;\n }\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n object.trackLabel = message.trackLabel;\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n object.groupId = message.groupId;\n return object;\n };\n\n /**\n * Converts this SdkStreamAllocation to JSON.\n * @function toJSON\n * @memberof SdkStreamAllocation\n * @instance\n * @returns {Object.} JSON object\n */\n SdkStreamAllocation.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkStreamAllocation\n * @function getTypeUrl\n * @memberof SdkStreamAllocation\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkStreamAllocation.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkStreamAllocation\";\n };\n\n return SdkStreamAllocation;\n})();\n\n$root.SdkTrackMapping = (function() {\n\n /**\n * Properties of a SdkTrackMapping.\n * @name ISdkTrackMapping\n * @interface ISdkTrackMapping\n * @property {number|null} [streamId] SdkTrackMapping streamId\n * @property {number|null} [ssrc] SdkTrackMapping ssrc\n * @property {string|null} [trackLabel] SdkTrackMapping trackLabel\n */\n\n /**\n * Constructs a new SdkTrackMapping.\n * @name SdkTrackMapping\n * @classdesc Represents a SdkTrackMapping.\n * @implements ISdkTrackMapping\n * @constructor\n * @param {ISdkTrackMapping=} [properties] Properties to set\n */\n function SdkTrackMapping(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTrackMapping streamId.\n * @member {number} streamId\n * @memberof SdkTrackMapping\n * @instance\n */\n SdkTrackMapping.prototype.streamId = 0;\n\n /**\n * SdkTrackMapping ssrc.\n * @member {number} ssrc\n * @memberof SdkTrackMapping\n * @instance\n */\n SdkTrackMapping.prototype.ssrc = 0;\n\n /**\n * SdkTrackMapping trackLabel.\n * @member {string} trackLabel\n * @memberof SdkTrackMapping\n * @instance\n */\n SdkTrackMapping.prototype.trackLabel = \"\";\n\n /**\n * Creates a new SdkTrackMapping instance using the specified properties.\n * @function create\n * @memberof SdkTrackMapping\n * @static\n * @param {ISdkTrackMapping=} [properties] Properties to set\n * @returns {SdkTrackMapping} SdkTrackMapping instance\n */\n SdkTrackMapping.create = function create(properties) {\n return new SdkTrackMapping(properties);\n };\n\n /**\n * Encodes the specified SdkTrackMapping message. Does not implicitly {@link SdkTrackMapping.verify|verify} messages.\n * @function encode\n * @memberof SdkTrackMapping\n * @static\n * @param {ISdkTrackMapping} message SdkTrackMapping message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTrackMapping.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.streamId);\n if (message.ssrc != null && Object.hasOwnProperty.call(message, \"ssrc\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.ssrc);\n if (message.trackLabel != null && Object.hasOwnProperty.call(message, \"trackLabel\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.trackLabel);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTrackMapping message, length delimited. Does not implicitly {@link SdkTrackMapping.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTrackMapping\n * @static\n * @param {ISdkTrackMapping} message SdkTrackMapping message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTrackMapping.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTrackMapping message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTrackMapping\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTrackMapping} SdkTrackMapping\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTrackMapping.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTrackMapping();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.streamId = reader.uint32();\n break;\n }\n case 2: {\n message.ssrc = reader.uint32();\n break;\n }\n case 3: {\n message.trackLabel = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTrackMapping message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTrackMapping\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTrackMapping} SdkTrackMapping\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTrackMapping.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTrackMapping message.\n * @function verify\n * @memberof SdkTrackMapping\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTrackMapping.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.ssrc != null && message.hasOwnProperty(\"ssrc\"))\n if (!$util.isInteger(message.ssrc))\n return \"ssrc: integer expected\";\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n if (!$util.isString(message.trackLabel))\n return \"trackLabel: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkTrackMapping message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTrackMapping\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTrackMapping} SdkTrackMapping\n */\n SdkTrackMapping.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTrackMapping)\n return object;\n var message = new $root.SdkTrackMapping();\n if (object.streamId != null)\n message.streamId = object.streamId >>> 0;\n if (object.ssrc != null)\n message.ssrc = object.ssrc >>> 0;\n if (object.trackLabel != null)\n message.trackLabel = String(object.trackLabel);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTrackMapping message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTrackMapping\n * @static\n * @param {SdkTrackMapping} message SdkTrackMapping\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTrackMapping.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.streamId = 0;\n object.ssrc = 0;\n object.trackLabel = \"\";\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.ssrc != null && message.hasOwnProperty(\"ssrc\"))\n object.ssrc = message.ssrc;\n if (message.trackLabel != null && message.hasOwnProperty(\"trackLabel\"))\n object.trackLabel = message.trackLabel;\n return object;\n };\n\n /**\n * Converts this SdkTrackMapping to JSON.\n * @function toJSON\n * @memberof SdkTrackMapping\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTrackMapping.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTrackMapping\n * @function getTypeUrl\n * @memberof SdkTrackMapping\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTrackMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTrackMapping\";\n };\n\n return SdkTrackMapping;\n})();\n\n$root.SdkBitrate = (function() {\n\n /**\n * Properties of a SdkBitrate.\n * @name ISdkBitrate\n * @interface ISdkBitrate\n * @property {number|null} [sourceStreamId] SdkBitrate sourceStreamId\n * @property {number|null} [avgBitrateBps] SdkBitrate avgBitrateBps\n */\n\n /**\n * Constructs a new SdkBitrate.\n * @name SdkBitrate\n * @classdesc Represents a SdkBitrate.\n * @implements ISdkBitrate\n * @constructor\n * @param {ISdkBitrate=} [properties] Properties to set\n */\n function SdkBitrate(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkBitrate sourceStreamId.\n * @member {number} sourceStreamId\n * @memberof SdkBitrate\n * @instance\n */\n SdkBitrate.prototype.sourceStreamId = 0;\n\n /**\n * SdkBitrate avgBitrateBps.\n * @member {number} avgBitrateBps\n * @memberof SdkBitrate\n * @instance\n */\n SdkBitrate.prototype.avgBitrateBps = 0;\n\n /**\n * Creates a new SdkBitrate instance using the specified properties.\n * @function create\n * @memberof SdkBitrate\n * @static\n * @param {ISdkBitrate=} [properties] Properties to set\n * @returns {SdkBitrate} SdkBitrate instance\n */\n SdkBitrate.create = function create(properties) {\n return new SdkBitrate(properties);\n };\n\n /**\n * Encodes the specified SdkBitrate message. Does not implicitly {@link SdkBitrate.verify|verify} messages.\n * @function encode\n * @memberof SdkBitrate\n * @static\n * @param {ISdkBitrate} message SdkBitrate message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkBitrate.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.sourceStreamId != null && Object.hasOwnProperty.call(message, \"sourceStreamId\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.sourceStreamId);\n if (message.avgBitrateBps != null && Object.hasOwnProperty.call(message, \"avgBitrateBps\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.avgBitrateBps);\n return writer;\n };\n\n /**\n * Encodes the specified SdkBitrate message, length delimited. Does not implicitly {@link SdkBitrate.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkBitrate\n * @static\n * @param {ISdkBitrate} message SdkBitrate message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkBitrate.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkBitrate message from the specified reader or buffer.\n * @function decode\n * @memberof SdkBitrate\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkBitrate} SdkBitrate\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkBitrate.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkBitrate();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.sourceStreamId = reader.uint32();\n break;\n }\n case 2: {\n message.avgBitrateBps = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkBitrate message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkBitrate\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkBitrate} SdkBitrate\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkBitrate.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkBitrate message.\n * @function verify\n * @memberof SdkBitrate\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkBitrate.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.sourceStreamId != null && message.hasOwnProperty(\"sourceStreamId\"))\n if (!$util.isInteger(message.sourceStreamId))\n return \"sourceStreamId: integer expected\";\n if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n if (!$util.isInteger(message.avgBitrateBps))\n return \"avgBitrateBps: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkBitrate message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkBitrate\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkBitrate} SdkBitrate\n */\n SdkBitrate.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkBitrate)\n return object;\n var message = new $root.SdkBitrate();\n if (object.sourceStreamId != null)\n message.sourceStreamId = object.sourceStreamId >>> 0;\n if (object.avgBitrateBps != null)\n message.avgBitrateBps = object.avgBitrateBps >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkBitrate message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkBitrate\n * @static\n * @param {SdkBitrate} message SdkBitrate\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkBitrate.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.sourceStreamId = 0;\n object.avgBitrateBps = 0;\n }\n if (message.sourceStreamId != null && message.hasOwnProperty(\"sourceStreamId\"))\n object.sourceStreamId = message.sourceStreamId;\n if (message.avgBitrateBps != null && message.hasOwnProperty(\"avgBitrateBps\"))\n object.avgBitrateBps = message.avgBitrateBps;\n return object;\n };\n\n /**\n * Converts this SdkBitrate to JSON.\n * @function toJSON\n * @memberof SdkBitrate\n * @instance\n * @returns {Object.} JSON object\n */\n SdkBitrate.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkBitrate\n * @function getTypeUrl\n * @memberof SdkBitrate\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkBitrate.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkBitrate\";\n };\n\n return SdkBitrate;\n})();\n\n$root.SdkAudioControlFrame = (function() {\n\n /**\n * Properties of a SdkAudioControlFrame.\n * @name ISdkAudioControlFrame\n * @interface ISdkAudioControlFrame\n * @property {boolean|null} [muted] SdkAudioControlFrame muted\n */\n\n /**\n * Constructs a new SdkAudioControlFrame.\n * @name SdkAudioControlFrame\n * @classdesc Represents a SdkAudioControlFrame.\n * @implements ISdkAudioControlFrame\n * @constructor\n * @param {ISdkAudioControlFrame=} [properties] Properties to set\n */\n function SdkAudioControlFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioControlFrame muted.\n * @member {boolean} muted\n * @memberof SdkAudioControlFrame\n * @instance\n */\n SdkAudioControlFrame.prototype.muted = false;\n\n /**\n * Creates a new SdkAudioControlFrame instance using the specified properties.\n * @function create\n * @memberof SdkAudioControlFrame\n * @static\n * @param {ISdkAudioControlFrame=} [properties] Properties to set\n * @returns {SdkAudioControlFrame} SdkAudioControlFrame instance\n */\n SdkAudioControlFrame.create = function create(properties) {\n return new SdkAudioControlFrame(properties);\n };\n\n /**\n * Encodes the specified SdkAudioControlFrame message. Does not implicitly {@link SdkAudioControlFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioControlFrame\n * @static\n * @param {ISdkAudioControlFrame} message SdkAudioControlFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioControlFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n writer.uint32(/* id 1, wireType 0 =*/8).bool(message.muted);\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioControlFrame message, length delimited. Does not implicitly {@link SdkAudioControlFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioControlFrame\n * @static\n * @param {ISdkAudioControlFrame} message SdkAudioControlFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioControlFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioControlFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioControlFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioControlFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioControlFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.muted = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioControlFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioControlFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioControlFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioControlFrame message.\n * @function verify\n * @memberof SdkAudioControlFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioControlFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n if (typeof message.muted !== \"boolean\")\n return \"muted: boolean expected\";\n return null;\n };\n\n /**\n * Creates a SdkAudioControlFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioControlFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioControlFrame} SdkAudioControlFrame\n */\n SdkAudioControlFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioControlFrame)\n return object;\n var message = new $root.SdkAudioControlFrame();\n if (object.muted != null)\n message.muted = Boolean(object.muted);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioControlFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioControlFrame\n * @static\n * @param {SdkAudioControlFrame} message SdkAudioControlFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioControlFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults)\n object.muted = false;\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n object.muted = message.muted;\n return object;\n };\n\n /**\n * Converts this SdkAudioControlFrame to JSON.\n * @function toJSON\n * @memberof SdkAudioControlFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioControlFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioControlFrame\n * @function getTypeUrl\n * @memberof SdkAudioControlFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioControlFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioControlFrame\";\n };\n\n return SdkAudioControlFrame;\n})();\n\n$root.SdkAudioMetadataFrame = (function() {\n\n /**\n * Properties of a SdkAudioMetadataFrame.\n * @name ISdkAudioMetadataFrame\n * @interface ISdkAudioMetadataFrame\n * @property {Array.|null} [attendeeStates] SdkAudioMetadataFrame attendeeStates\n */\n\n /**\n * Constructs a new SdkAudioMetadataFrame.\n * @name SdkAudioMetadataFrame\n * @classdesc Represents a SdkAudioMetadataFrame.\n * @implements ISdkAudioMetadataFrame\n * @constructor\n * @param {ISdkAudioMetadataFrame=} [properties] Properties to set\n */\n function SdkAudioMetadataFrame(properties) {\n this.attendeeStates = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioMetadataFrame attendeeStates.\n * @member {Array.} attendeeStates\n * @memberof SdkAudioMetadataFrame\n * @instance\n */\n SdkAudioMetadataFrame.prototype.attendeeStates = $util.emptyArray;\n\n /**\n * Creates a new SdkAudioMetadataFrame instance using the specified properties.\n * @function create\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {ISdkAudioMetadataFrame=} [properties] Properties to set\n * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame instance\n */\n SdkAudioMetadataFrame.create = function create(properties) {\n return new SdkAudioMetadataFrame(properties);\n };\n\n /**\n * Encodes the specified SdkAudioMetadataFrame message. Does not implicitly {@link SdkAudioMetadataFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {ISdkAudioMetadataFrame} message SdkAudioMetadataFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioMetadataFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.attendeeStates != null && message.attendeeStates.length)\n for (var i = 0; i < message.attendeeStates.length; ++i)\n $root.SdkAudioAttendeeState.encode(message.attendeeStates[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioMetadataFrame message, length delimited. Does not implicitly {@link SdkAudioMetadataFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {ISdkAudioMetadataFrame} message SdkAudioMetadataFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioMetadataFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioMetadataFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioMetadataFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioMetadataFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.attendeeStates && message.attendeeStates.length))\n message.attendeeStates = [];\n message.attendeeStates.push($root.SdkAudioAttendeeState.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioMetadataFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioMetadataFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioMetadataFrame message.\n * @function verify\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioMetadataFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.attendeeStates != null && message.hasOwnProperty(\"attendeeStates\")) {\n if (!Array.isArray(message.attendeeStates))\n return \"attendeeStates: array expected\";\n for (var i = 0; i < message.attendeeStates.length; ++i) {\n var error = $root.SdkAudioAttendeeState.verify(message.attendeeStates[i]);\n if (error)\n return \"attendeeStates.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkAudioMetadataFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioMetadataFrame} SdkAudioMetadataFrame\n */\n SdkAudioMetadataFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioMetadataFrame)\n return object;\n var message = new $root.SdkAudioMetadataFrame();\n if (object.attendeeStates) {\n if (!Array.isArray(object.attendeeStates))\n throw TypeError(\".SdkAudioMetadataFrame.attendeeStates: array expected\");\n message.attendeeStates = [];\n for (var i = 0; i < object.attendeeStates.length; ++i) {\n if (typeof object.attendeeStates[i] !== \"object\")\n throw TypeError(\".SdkAudioMetadataFrame.attendeeStates: object expected\");\n message.attendeeStates[i] = $root.SdkAudioAttendeeState.fromObject(object.attendeeStates[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioMetadataFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {SdkAudioMetadataFrame} message SdkAudioMetadataFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioMetadataFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.attendeeStates = [];\n if (message.attendeeStates && message.attendeeStates.length) {\n object.attendeeStates = [];\n for (var j = 0; j < message.attendeeStates.length; ++j)\n object.attendeeStates[j] = $root.SdkAudioAttendeeState.toObject(message.attendeeStates[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkAudioMetadataFrame to JSON.\n * @function toJSON\n * @memberof SdkAudioMetadataFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioMetadataFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioMetadataFrame\n * @function getTypeUrl\n * @memberof SdkAudioMetadataFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioMetadataFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioMetadataFrame\";\n };\n\n return SdkAudioMetadataFrame;\n})();\n\n$root.SdkAudioAttendeeState = (function() {\n\n /**\n * Properties of a SdkAudioAttendeeState.\n * @name ISdkAudioAttendeeState\n * @interface ISdkAudioAttendeeState\n * @property {number|null} [audioStreamId] SdkAudioAttendeeState audioStreamId\n * @property {number|null} [volume] SdkAudioAttendeeState volume\n * @property {boolean|null} [muted] SdkAudioAttendeeState muted\n * @property {number|null} [signalStrength] SdkAudioAttendeeState signalStrength\n */\n\n /**\n * Constructs a new SdkAudioAttendeeState.\n * @name SdkAudioAttendeeState\n * @classdesc Represents a SdkAudioAttendeeState.\n * @implements ISdkAudioAttendeeState\n * @constructor\n * @param {ISdkAudioAttendeeState=} [properties] Properties to set\n */\n function SdkAudioAttendeeState(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioAttendeeState audioStreamId.\n * @member {number} audioStreamId\n * @memberof SdkAudioAttendeeState\n * @instance\n */\n SdkAudioAttendeeState.prototype.audioStreamId = 0;\n\n /**\n * SdkAudioAttendeeState volume.\n * @member {number} volume\n * @memberof SdkAudioAttendeeState\n * @instance\n */\n SdkAudioAttendeeState.prototype.volume = 0;\n\n /**\n * SdkAudioAttendeeState muted.\n * @member {boolean} muted\n * @memberof SdkAudioAttendeeState\n * @instance\n */\n SdkAudioAttendeeState.prototype.muted = false;\n\n /**\n * SdkAudioAttendeeState signalStrength.\n * @member {number} signalStrength\n * @memberof SdkAudioAttendeeState\n * @instance\n */\n SdkAudioAttendeeState.prototype.signalStrength = 0;\n\n /**\n * Creates a new SdkAudioAttendeeState instance using the specified properties.\n * @function create\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {ISdkAudioAttendeeState=} [properties] Properties to set\n * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState instance\n */\n SdkAudioAttendeeState.create = function create(properties) {\n return new SdkAudioAttendeeState(properties);\n };\n\n /**\n * Encodes the specified SdkAudioAttendeeState message. Does not implicitly {@link SdkAudioAttendeeState.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {ISdkAudioAttendeeState} message SdkAudioAttendeeState message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioAttendeeState.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.audioStreamId != null && Object.hasOwnProperty.call(message, \"audioStreamId\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStreamId);\n if (message.volume != null && Object.hasOwnProperty.call(message, \"volume\"))\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.volume);\n if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.muted);\n if (message.signalStrength != null && Object.hasOwnProperty.call(message, \"signalStrength\"))\n writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.signalStrength);\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioAttendeeState message, length delimited. Does not implicitly {@link SdkAudioAttendeeState.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {ISdkAudioAttendeeState} message SdkAudioAttendeeState message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioAttendeeState.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioAttendeeState message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioAttendeeState.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioAttendeeState();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.audioStreamId = reader.uint32();\n break;\n }\n case 2: {\n message.volume = reader.uint32();\n break;\n }\n case 3: {\n message.muted = reader.bool();\n break;\n }\n case 4: {\n message.signalStrength = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioAttendeeState message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioAttendeeState.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioAttendeeState message.\n * @function verify\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioAttendeeState.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n if (!$util.isInteger(message.audioStreamId))\n return \"audioStreamId: integer expected\";\n if (message.volume != null && message.hasOwnProperty(\"volume\"))\n if (!$util.isInteger(message.volume))\n return \"volume: integer expected\";\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n if (typeof message.muted !== \"boolean\")\n return \"muted: boolean expected\";\n if (message.signalStrength != null && message.hasOwnProperty(\"signalStrength\"))\n if (!$util.isInteger(message.signalStrength))\n return \"signalStrength: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkAudioAttendeeState message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioAttendeeState} SdkAudioAttendeeState\n */\n SdkAudioAttendeeState.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioAttendeeState)\n return object;\n var message = new $root.SdkAudioAttendeeState();\n if (object.audioStreamId != null)\n message.audioStreamId = object.audioStreamId >>> 0;\n if (object.volume != null)\n message.volume = object.volume >>> 0;\n if (object.muted != null)\n message.muted = Boolean(object.muted);\n if (object.signalStrength != null)\n message.signalStrength = object.signalStrength >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioAttendeeState message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {SdkAudioAttendeeState} message SdkAudioAttendeeState\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioAttendeeState.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.audioStreamId = 0;\n object.volume = 0;\n object.muted = false;\n object.signalStrength = 0;\n }\n if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n object.audioStreamId = message.audioStreamId;\n if (message.volume != null && message.hasOwnProperty(\"volume\"))\n object.volume = message.volume;\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n object.muted = message.muted;\n if (message.signalStrength != null && message.hasOwnProperty(\"signalStrength\"))\n object.signalStrength = message.signalStrength;\n return object;\n };\n\n /**\n * Converts this SdkAudioAttendeeState to JSON.\n * @function toJSON\n * @memberof SdkAudioAttendeeState\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioAttendeeState.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioAttendeeState\n * @function getTypeUrl\n * @memberof SdkAudioAttendeeState\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioAttendeeState.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioAttendeeState\";\n };\n\n return SdkAudioAttendeeState;\n})();\n\n$root.SdkAudioStreamIdInfoFrame = (function() {\n\n /**\n * Properties of a SdkAudioStreamIdInfoFrame.\n * @name ISdkAudioStreamIdInfoFrame\n * @interface ISdkAudioStreamIdInfoFrame\n * @property {Array.|null} [streams] SdkAudioStreamIdInfoFrame streams\n */\n\n /**\n * Constructs a new SdkAudioStreamIdInfoFrame.\n * @name SdkAudioStreamIdInfoFrame\n * @classdesc Represents a SdkAudioStreamIdInfoFrame.\n * @implements ISdkAudioStreamIdInfoFrame\n * @constructor\n * @param {ISdkAudioStreamIdInfoFrame=} [properties] Properties to set\n */\n function SdkAudioStreamIdInfoFrame(properties) {\n this.streams = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioStreamIdInfoFrame streams.\n * @member {Array.} streams\n * @memberof SdkAudioStreamIdInfoFrame\n * @instance\n */\n SdkAudioStreamIdInfoFrame.prototype.streams = $util.emptyArray;\n\n /**\n * Creates a new SdkAudioStreamIdInfoFrame instance using the specified properties.\n * @function create\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {ISdkAudioStreamIdInfoFrame=} [properties] Properties to set\n * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame instance\n */\n SdkAudioStreamIdInfoFrame.create = function create(properties) {\n return new SdkAudioStreamIdInfoFrame(properties);\n };\n\n /**\n * Encodes the specified SdkAudioStreamIdInfoFrame message. Does not implicitly {@link SdkAudioStreamIdInfoFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {ISdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStreamIdInfoFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.streams != null && message.streams.length)\n for (var i = 0; i < message.streams.length; ++i)\n $root.SdkAudioStreamIdInfo.encode(message.streams[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioStreamIdInfoFrame message, length delimited. Does not implicitly {@link SdkAudioStreamIdInfoFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {ISdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStreamIdInfoFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioStreamIdInfoFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStreamIdInfoFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStreamIdInfoFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.streams && message.streams.length))\n message.streams = [];\n message.streams.push($root.SdkAudioStreamIdInfo.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioStreamIdInfoFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStreamIdInfoFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioStreamIdInfoFrame message.\n * @function verify\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioStreamIdInfoFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.streams != null && message.hasOwnProperty(\"streams\")) {\n if (!Array.isArray(message.streams))\n return \"streams: array expected\";\n for (var i = 0; i < message.streams.length; ++i) {\n var error = $root.SdkAudioStreamIdInfo.verify(message.streams[i]);\n if (error)\n return \"streams.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkAudioStreamIdInfoFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioStreamIdInfoFrame} SdkAudioStreamIdInfoFrame\n */\n SdkAudioStreamIdInfoFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioStreamIdInfoFrame)\n return object;\n var message = new $root.SdkAudioStreamIdInfoFrame();\n if (object.streams) {\n if (!Array.isArray(object.streams))\n throw TypeError(\".SdkAudioStreamIdInfoFrame.streams: array expected\");\n message.streams = [];\n for (var i = 0; i < object.streams.length; ++i) {\n if (typeof object.streams[i] !== \"object\")\n throw TypeError(\".SdkAudioStreamIdInfoFrame.streams: object expected\");\n message.streams[i] = $root.SdkAudioStreamIdInfo.fromObject(object.streams[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioStreamIdInfoFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {SdkAudioStreamIdInfoFrame} message SdkAudioStreamIdInfoFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioStreamIdInfoFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.streams = [];\n if (message.streams && message.streams.length) {\n object.streams = [];\n for (var j = 0; j < message.streams.length; ++j)\n object.streams[j] = $root.SdkAudioStreamIdInfo.toObject(message.streams[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkAudioStreamIdInfoFrame to JSON.\n * @function toJSON\n * @memberof SdkAudioStreamIdInfoFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioStreamIdInfoFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioStreamIdInfoFrame\n * @function getTypeUrl\n * @memberof SdkAudioStreamIdInfoFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioStreamIdInfoFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioStreamIdInfoFrame\";\n };\n\n return SdkAudioStreamIdInfoFrame;\n})();\n\n$root.SdkAudioStreamIdInfo = (function() {\n\n /**\n * Properties of a SdkAudioStreamIdInfo.\n * @name ISdkAudioStreamIdInfo\n * @interface ISdkAudioStreamIdInfo\n * @property {number|null} [audioStreamId] SdkAudioStreamIdInfo audioStreamId\n * @property {string|null} [attendeeId] SdkAudioStreamIdInfo attendeeId\n * @property {boolean|null} [muted] SdkAudioStreamIdInfo muted\n * @property {string|null} [externalUserId] SdkAudioStreamIdInfo externalUserId\n * @property {boolean|null} [dropped] SdkAudioStreamIdInfo dropped\n */\n\n /**\n * Constructs a new SdkAudioStreamIdInfo.\n * @name SdkAudioStreamIdInfo\n * @classdesc Represents a SdkAudioStreamIdInfo.\n * @implements ISdkAudioStreamIdInfo\n * @constructor\n * @param {ISdkAudioStreamIdInfo=} [properties] Properties to set\n */\n function SdkAudioStreamIdInfo(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioStreamIdInfo audioStreamId.\n * @member {number} audioStreamId\n * @memberof SdkAudioStreamIdInfo\n * @instance\n */\n SdkAudioStreamIdInfo.prototype.audioStreamId = 0;\n\n /**\n * SdkAudioStreamIdInfo attendeeId.\n * @member {string} attendeeId\n * @memberof SdkAudioStreamIdInfo\n * @instance\n */\n SdkAudioStreamIdInfo.prototype.attendeeId = \"\";\n\n /**\n * SdkAudioStreamIdInfo muted.\n * @member {boolean} muted\n * @memberof SdkAudioStreamIdInfo\n * @instance\n */\n SdkAudioStreamIdInfo.prototype.muted = false;\n\n /**\n * SdkAudioStreamIdInfo externalUserId.\n * @member {string} externalUserId\n * @memberof SdkAudioStreamIdInfo\n * @instance\n */\n SdkAudioStreamIdInfo.prototype.externalUserId = \"\";\n\n /**\n * SdkAudioStreamIdInfo dropped.\n * @member {boolean} dropped\n * @memberof SdkAudioStreamIdInfo\n * @instance\n */\n SdkAudioStreamIdInfo.prototype.dropped = false;\n\n /**\n * Creates a new SdkAudioStreamIdInfo instance using the specified properties.\n * @function create\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {ISdkAudioStreamIdInfo=} [properties] Properties to set\n * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo instance\n */\n SdkAudioStreamIdInfo.create = function create(properties) {\n return new SdkAudioStreamIdInfo(properties);\n };\n\n /**\n * Encodes the specified SdkAudioStreamIdInfo message. Does not implicitly {@link SdkAudioStreamIdInfo.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {ISdkAudioStreamIdInfo} message SdkAudioStreamIdInfo message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStreamIdInfo.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.audioStreamId != null && Object.hasOwnProperty.call(message, \"audioStreamId\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStreamId);\n if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.attendeeId);\n if (message.muted != null && Object.hasOwnProperty.call(message, \"muted\"))\n writer.uint32(/* id 3, wireType 0 =*/24).bool(message.muted);\n if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.externalUserId);\n if (message.dropped != null && Object.hasOwnProperty.call(message, \"dropped\"))\n writer.uint32(/* id 5, wireType 0 =*/40).bool(message.dropped);\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioStreamIdInfo message, length delimited. Does not implicitly {@link SdkAudioStreamIdInfo.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {ISdkAudioStreamIdInfo} message SdkAudioStreamIdInfo message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStreamIdInfo.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioStreamIdInfo message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStreamIdInfo.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStreamIdInfo();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.audioStreamId = reader.uint32();\n break;\n }\n case 2: {\n message.attendeeId = reader.string();\n break;\n }\n case 3: {\n message.muted = reader.bool();\n break;\n }\n case 4: {\n message.externalUserId = reader.string();\n break;\n }\n case 5: {\n message.dropped = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioStreamIdInfo message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStreamIdInfo.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioStreamIdInfo message.\n * @function verify\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioStreamIdInfo.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n if (!$util.isInteger(message.audioStreamId))\n return \"audioStreamId: integer expected\";\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n if (!$util.isString(message.attendeeId))\n return \"attendeeId: string expected\";\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n if (typeof message.muted !== \"boolean\")\n return \"muted: boolean expected\";\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n if (!$util.isString(message.externalUserId))\n return \"externalUserId: string expected\";\n if (message.dropped != null && message.hasOwnProperty(\"dropped\"))\n if (typeof message.dropped !== \"boolean\")\n return \"dropped: boolean expected\";\n return null;\n };\n\n /**\n * Creates a SdkAudioStreamIdInfo message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioStreamIdInfo} SdkAudioStreamIdInfo\n */\n SdkAudioStreamIdInfo.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioStreamIdInfo)\n return object;\n var message = new $root.SdkAudioStreamIdInfo();\n if (object.audioStreamId != null)\n message.audioStreamId = object.audioStreamId >>> 0;\n if (object.attendeeId != null)\n message.attendeeId = String(object.attendeeId);\n if (object.muted != null)\n message.muted = Boolean(object.muted);\n if (object.externalUserId != null)\n message.externalUserId = String(object.externalUserId);\n if (object.dropped != null)\n message.dropped = Boolean(object.dropped);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioStreamIdInfo message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {SdkAudioStreamIdInfo} message SdkAudioStreamIdInfo\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioStreamIdInfo.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.audioStreamId = 0;\n object.attendeeId = \"\";\n object.muted = false;\n object.externalUserId = \"\";\n object.dropped = false;\n }\n if (message.audioStreamId != null && message.hasOwnProperty(\"audioStreamId\"))\n object.audioStreamId = message.audioStreamId;\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n object.attendeeId = message.attendeeId;\n if (message.muted != null && message.hasOwnProperty(\"muted\"))\n object.muted = message.muted;\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n object.externalUserId = message.externalUserId;\n if (message.dropped != null && message.hasOwnProperty(\"dropped\"))\n object.dropped = message.dropped;\n return object;\n };\n\n /**\n * Converts this SdkAudioStreamIdInfo to JSON.\n * @function toJSON\n * @memberof SdkAudioStreamIdInfo\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioStreamIdInfo.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioStreamIdInfo\n * @function getTypeUrl\n * @memberof SdkAudioStreamIdInfo\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioStreamIdInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioStreamIdInfo\";\n };\n\n return SdkAudioStreamIdInfo;\n})();\n\n/**\n * SdkPingPongType enum.\n * @name SdkPingPongType\n * @enum {number}\n * @property {number} PING=1 PING value\n * @property {number} PONG=2 PONG value\n */\n$root.SdkPingPongType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"PING\"] = 1;\n values[valuesById[2] = \"PONG\"] = 2;\n return values;\n})();\n\n$root.SdkPingPongFrame = (function() {\n\n /**\n * Properties of a SdkPingPongFrame.\n * @name ISdkPingPongFrame\n * @interface ISdkPingPongFrame\n * @property {SdkPingPongType} type SdkPingPongFrame type\n * @property {number} pingId SdkPingPongFrame pingId\n */\n\n /**\n * Constructs a new SdkPingPongFrame.\n * @name SdkPingPongFrame\n * @classdesc Represents a SdkPingPongFrame.\n * @implements ISdkPingPongFrame\n * @constructor\n * @param {ISdkPingPongFrame=} [properties] Properties to set\n */\n function SdkPingPongFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkPingPongFrame type.\n * @member {SdkPingPongType} type\n * @memberof SdkPingPongFrame\n * @instance\n */\n SdkPingPongFrame.prototype.type = 1;\n\n /**\n * SdkPingPongFrame pingId.\n * @member {number} pingId\n * @memberof SdkPingPongFrame\n * @instance\n */\n SdkPingPongFrame.prototype.pingId = 0;\n\n /**\n * Creates a new SdkPingPongFrame instance using the specified properties.\n * @function create\n * @memberof SdkPingPongFrame\n * @static\n * @param {ISdkPingPongFrame=} [properties] Properties to set\n * @returns {SdkPingPongFrame} SdkPingPongFrame instance\n */\n SdkPingPongFrame.create = function create(properties) {\n return new SdkPingPongFrame(properties);\n };\n\n /**\n * Encodes the specified SdkPingPongFrame message. Does not implicitly {@link SdkPingPongFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkPingPongFrame\n * @static\n * @param {ISdkPingPongFrame} message SdkPingPongFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPingPongFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.pingId);\n return writer;\n };\n\n /**\n * Encodes the specified SdkPingPongFrame message, length delimited. Does not implicitly {@link SdkPingPongFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkPingPongFrame\n * @static\n * @param {ISdkPingPongFrame} message SdkPingPongFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPingPongFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkPingPongFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkPingPongFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkPingPongFrame} SdkPingPongFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPingPongFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPingPongFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.pingId = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n if (!message.hasOwnProperty(\"type\"))\n throw $util.ProtocolError(\"missing required 'type'\", { instance: message });\n if (!message.hasOwnProperty(\"pingId\"))\n throw $util.ProtocolError(\"missing required 'pingId'\", { instance: message });\n return message;\n };\n\n /**\n * Decodes a SdkPingPongFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkPingPongFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkPingPongFrame} SdkPingPongFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPingPongFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkPingPongFrame message.\n * @function verify\n * @memberof SdkPingPongFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkPingPongFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n break;\n }\n if (!$util.isInteger(message.pingId))\n return \"pingId: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkPingPongFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkPingPongFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkPingPongFrame} SdkPingPongFrame\n */\n SdkPingPongFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkPingPongFrame)\n return object;\n var message = new $root.SdkPingPongFrame();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"PING\":\n case 1:\n message.type = 1;\n break;\n case \"PONG\":\n case 2:\n message.type = 2;\n break;\n }\n if (object.pingId != null)\n message.pingId = object.pingId >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkPingPongFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkPingPongFrame\n * @static\n * @param {SdkPingPongFrame} message SdkPingPongFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkPingPongFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.type = options.enums === String ? \"PING\" : 1;\n object.pingId = 0;\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkPingPongType[message.type] === undefined ? message.type : $root.SdkPingPongType[message.type] : message.type;\n if (message.pingId != null && message.hasOwnProperty(\"pingId\"))\n object.pingId = message.pingId;\n return object;\n };\n\n /**\n * Converts this SdkPingPongFrame to JSON.\n * @function toJSON\n * @memberof SdkPingPongFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkPingPongFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkPingPongFrame\n * @function getTypeUrl\n * @memberof SdkPingPongFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkPingPongFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkPingPongFrame\";\n };\n\n return SdkPingPongFrame;\n})();\n\n$root.SdkAudioStatusFrame = (function() {\n\n /**\n * Properties of a SdkAudioStatusFrame.\n * @name ISdkAudioStatusFrame\n * @interface ISdkAudioStatusFrame\n * @property {number|null} [audioStatus] SdkAudioStatusFrame audioStatus\n */\n\n /**\n * Constructs a new SdkAudioStatusFrame.\n * @name SdkAudioStatusFrame\n * @classdesc Represents a SdkAudioStatusFrame.\n * @implements ISdkAudioStatusFrame\n * @constructor\n * @param {ISdkAudioStatusFrame=} [properties] Properties to set\n */\n function SdkAudioStatusFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkAudioStatusFrame audioStatus.\n * @member {number} audioStatus\n * @memberof SdkAudioStatusFrame\n * @instance\n */\n SdkAudioStatusFrame.prototype.audioStatus = 0;\n\n /**\n * Creates a new SdkAudioStatusFrame instance using the specified properties.\n * @function create\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {ISdkAudioStatusFrame=} [properties] Properties to set\n * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame instance\n */\n SdkAudioStatusFrame.create = function create(properties) {\n return new SdkAudioStatusFrame(properties);\n };\n\n /**\n * Encodes the specified SdkAudioStatusFrame message. Does not implicitly {@link SdkAudioStatusFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {ISdkAudioStatusFrame} message SdkAudioStatusFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStatusFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.audioStatus != null && Object.hasOwnProperty.call(message, \"audioStatus\"))\n writer.uint32(/* id 1, wireType 0 =*/8).uint32(message.audioStatus);\n return writer;\n };\n\n /**\n * Encodes the specified SdkAudioStatusFrame message, length delimited. Does not implicitly {@link SdkAudioStatusFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {ISdkAudioStatusFrame} message SdkAudioStatusFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkAudioStatusFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkAudioStatusFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStatusFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkAudioStatusFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.audioStatus = reader.uint32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkAudioStatusFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkAudioStatusFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkAudioStatusFrame message.\n * @function verify\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkAudioStatusFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n if (!$util.isInteger(message.audioStatus))\n return \"audioStatus: integer expected\";\n return null;\n };\n\n /**\n * Creates a SdkAudioStatusFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkAudioStatusFrame} SdkAudioStatusFrame\n */\n SdkAudioStatusFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkAudioStatusFrame)\n return object;\n var message = new $root.SdkAudioStatusFrame();\n if (object.audioStatus != null)\n message.audioStatus = object.audioStatus >>> 0;\n return message;\n };\n\n /**\n * Creates a plain object from a SdkAudioStatusFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {SdkAudioStatusFrame} message SdkAudioStatusFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkAudioStatusFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults)\n object.audioStatus = 0;\n if (message.audioStatus != null && message.hasOwnProperty(\"audioStatus\"))\n object.audioStatus = message.audioStatus;\n return object;\n };\n\n /**\n * Converts this SdkAudioStatusFrame to JSON.\n * @function toJSON\n * @memberof SdkAudioStatusFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkAudioStatusFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkAudioStatusFrame\n * @function getTypeUrl\n * @memberof SdkAudioStatusFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkAudioStatusFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkAudioStatusFrame\";\n };\n\n return SdkAudioStatusFrame;\n})();\n\n$root.SdkMetric = (function() {\n\n /**\n * Properties of a SdkMetric.\n * @name ISdkMetric\n * @interface ISdkMetric\n * @property {SdkMetric.Type|null} [type] SdkMetric type\n * @property {number|null} [value] SdkMetric value\n */\n\n /**\n * Constructs a new SdkMetric.\n * @name SdkMetric\n * @classdesc Represents a SdkMetric.\n * @implements ISdkMetric\n * @constructor\n * @param {ISdkMetric=} [properties] Properties to set\n */\n function SdkMetric(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkMetric type.\n * @member {SdkMetric.Type} type\n * @memberof SdkMetric\n * @instance\n */\n SdkMetric.prototype.type = 1;\n\n /**\n * SdkMetric value.\n * @member {number} value\n * @memberof SdkMetric\n * @instance\n */\n SdkMetric.prototype.value = 0;\n\n /**\n * Creates a new SdkMetric instance using the specified properties.\n * @function create\n * @memberof SdkMetric\n * @static\n * @param {ISdkMetric=} [properties] Properties to set\n * @returns {SdkMetric} SdkMetric instance\n */\n SdkMetric.create = function create(properties) {\n return new SdkMetric(properties);\n };\n\n /**\n * Encodes the specified SdkMetric message. Does not implicitly {@link SdkMetric.verify|verify} messages.\n * @function encode\n * @memberof SdkMetric\n * @static\n * @param {ISdkMetric} message SdkMetric message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkMetric.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.value != null && Object.hasOwnProperty.call(message, \"value\"))\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.value);\n return writer;\n };\n\n /**\n * Encodes the specified SdkMetric message, length delimited. Does not implicitly {@link SdkMetric.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkMetric\n * @static\n * @param {ISdkMetric} message SdkMetric message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkMetric.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkMetric message from the specified reader or buffer.\n * @function decode\n * @memberof SdkMetric\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkMetric} SdkMetric\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkMetric.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkMetric();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.value = reader.double();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkMetric message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkMetric\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkMetric} SdkMetric\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkMetric.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkMetric message.\n * @function verify\n * @memberof SdkMetric\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkMetric.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n case 16:\n case 17:\n case 18:\n case 19:\n case 20:\n case 21:\n case 22:\n case 23:\n case 24:\n case 25:\n case 26:\n case 27:\n case 28:\n case 29:\n case 30:\n case 31:\n case 32:\n case 33:\n case 34:\n case 35:\n case 36:\n case 37:\n case 38:\n case 39:\n case 40:\n case 41:\n case 42:\n case 43:\n case 44:\n case 45:\n case 46:\n case 47:\n case 48:\n case 49:\n case 64:\n case 66:\n case 69:\n case 72:\n case 86:\n case 87:\n case 88:\n case 89:\n case 90:\n case 91:\n case 92:\n case 93:\n case 94:\n case 95:\n case 96:\n case 97:\n case 98:\n case 99:\n case 100:\n case 101:\n case 102:\n break;\n }\n if (message.value != null && message.hasOwnProperty(\"value\"))\n if (typeof message.value !== \"number\")\n return \"value: number expected\";\n return null;\n };\n\n /**\n * Creates a SdkMetric message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkMetric\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkMetric} SdkMetric\n */\n SdkMetric.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkMetric)\n return object;\n var message = new $root.SdkMetric();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"VIDEO_ACTUAL_ENCODER_BITRATE\":\n case 1:\n message.type = 1;\n break;\n case \"VIDEO_AVAILABLE_SEND_BANDWIDTH\":\n case 2:\n message.type = 2;\n break;\n case \"VIDEO_RETRANSMIT_BITRATE\":\n case 3:\n message.type = 3;\n break;\n case \"VIDEO_AVAILABLE_RECEIVE_BANDWIDTH\":\n case 4:\n message.type = 4;\n break;\n case \"VIDEO_TARGET_ENCODER_BITRATE\":\n case 5:\n message.type = 5;\n break;\n case \"VIDEO_BUCKET_DELAY_MS\":\n case 6:\n message.type = 6;\n break;\n case \"STUN_RTT_MS\":\n case 7:\n message.type = 7;\n break;\n case \"SOCKET_DISCARDED_PPS\":\n case 8:\n message.type = 8;\n break;\n case \"RTC_MIC_JITTER_MS\":\n case 9:\n message.type = 9;\n break;\n case \"RTC_MIC_PPS\":\n case 10:\n message.type = 10;\n break;\n case \"RTC_MIC_FRACTION_PACKET_LOST_PERCENT\":\n case 11:\n message.type = 11;\n break;\n case \"RTC_MIC_BITRATE\":\n case 12:\n message.type = 12;\n break;\n case \"RTC_MIC_RTT_MS\":\n case 13:\n message.type = 13;\n break;\n case \"RTC_SPK_PPS\":\n case 14:\n message.type = 14;\n break;\n case \"RTC_SPK_FRACTION_PACKET_LOST_PERCENT\":\n case 15:\n message.type = 15;\n break;\n case \"RTC_SPK_JITTER_MS\":\n case 16:\n message.type = 16;\n break;\n case \"RTC_SPK_FRACTION_DECODER_LOSS_PERCENT\":\n case 17:\n message.type = 17;\n break;\n case \"RTC_SPK_BITRATE\":\n case 18:\n message.type = 18;\n break;\n case \"RTC_SPK_CURRENT_DELAY_MS\":\n case 19:\n message.type = 19;\n break;\n case \"RTC_SPK_JITTER_BUFFER_MS\":\n case 20:\n message.type = 20;\n break;\n case \"VIDEO_SENT_RTT_MS\":\n case 21:\n message.type = 21;\n break;\n case \"VIDEO_ENCODE_USAGE_PERCENT\":\n case 22:\n message.type = 22;\n break;\n case \"VIDEO_NACKS_RECEIVED\":\n case 23:\n message.type = 23;\n break;\n case \"VIDEO_PLIS_RECEIVED\":\n case 24:\n message.type = 24;\n break;\n case \"VIDEO_ENCODE_MS\":\n case 25:\n message.type = 25;\n break;\n case \"VIDEO_INPUT_FPS\":\n case 26:\n message.type = 26;\n break;\n case \"VIDEO_ENCODE_FPS\":\n case 27:\n message.type = 27;\n break;\n case \"VIDEO_SENT_FPS\":\n case 28:\n message.type = 28;\n break;\n case \"VIDEO_FIRS_RECEIVED\":\n case 29:\n message.type = 29;\n break;\n case \"VIDEO_SENT_PPS\":\n case 30:\n message.type = 30;\n break;\n case \"VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT\":\n case 31:\n message.type = 31;\n break;\n case \"VIDEO_SENT_BITRATE\":\n case 32:\n message.type = 32;\n break;\n case \"VIDEO_DROPPED_FPS\":\n case 33:\n message.type = 33;\n break;\n case \"VIDEO_TARGET_DELAY_MS\":\n case 34:\n message.type = 34;\n break;\n case \"VIDEO_DECODE_MS\":\n case 35:\n message.type = 35;\n break;\n case \"VIDEO_OUTPUT_FPS\":\n case 36:\n message.type = 36;\n break;\n case \"VIDEO_RECEIVED_PPS\":\n case 37:\n message.type = 37;\n break;\n case \"VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT\":\n case 38:\n message.type = 38;\n break;\n case \"VIDEO_RENDER_DELAY_MS\":\n case 39:\n message.type = 39;\n break;\n case \"VIDEO_RECEIVED_FPS\":\n case 40:\n message.type = 40;\n break;\n case \"VIDEO_DECODE_FPS\":\n case 41:\n message.type = 41;\n break;\n case \"VIDEO_NACKS_SENT\":\n case 42:\n message.type = 42;\n break;\n case \"VIDEO_FIRS_SENT\":\n case 43:\n message.type = 43;\n break;\n case \"VIDEO_RECEIVED_BITRATE\":\n case 44:\n message.type = 44;\n break;\n case \"VIDEO_CURRENT_DELAY_MS\":\n case 45:\n message.type = 45;\n break;\n case \"VIDEO_JITTER_BUFFER_MS\":\n case 46:\n message.type = 46;\n break;\n case \"VIDEO_DISCARDED_PPS\":\n case 47:\n message.type = 47;\n break;\n case \"VIDEO_PLIS_SENT\":\n case 48:\n message.type = 48;\n break;\n case \"VIDEO_RECEIVED_JITTER_MS\":\n case 49:\n message.type = 49;\n break;\n case \"VIDEO_ENCODE_HEIGHT\":\n case 64:\n message.type = 64;\n break;\n case \"VIDEO_SENT_QP_SUM\":\n case 66:\n message.type = 66;\n break;\n case \"VIDEO_DECODE_HEIGHT\":\n case 69:\n message.type = 69;\n break;\n case \"VIDEO_RECEIVED_QP_SUM\":\n case 72:\n message.type = 72;\n break;\n case \"VIDEO_ENCODE_WIDTH\":\n case 86:\n message.type = 86;\n break;\n case \"VIDEO_DECODE_WIDTH\":\n case 87:\n message.type = 87;\n break;\n case \"VIDEO_ENCODER_IS_HARDWARE\":\n case 88:\n message.type = 88;\n break;\n case \"VIDEO_DECODER_IS_HARDWARE\":\n case 89:\n message.type = 89;\n break;\n case \"VIDEO_FREEZE_COUNT\":\n case 90:\n message.type = 90;\n break;\n case \"VIDEO_FREEZE_DURATION\":\n case 91:\n message.type = 91;\n break;\n case \"VIDEO_PAUSE_COUNT\":\n case 92:\n message.type = 92;\n break;\n case \"VIDEO_PAUSE_DURATION\":\n case 93:\n message.type = 93;\n break;\n case \"VIDEO_QUALITY_REASON\":\n case 94:\n message.type = 94;\n break;\n case \"VIDEO_PROCESSING_TIME\":\n case 95:\n message.type = 95;\n break;\n case \"RTC_SPK_AUDIO_LEVEL\":\n case 96:\n message.type = 96;\n break;\n case \"RTC_MIC_AUDIO_LEVEL\":\n case 97:\n message.type = 97;\n break;\n case \"RTC_SPK_TOTAL_LOST\":\n case 98:\n message.type = 98;\n break;\n case \"RTC_SPK_TOTAL_EXPECTED\":\n case 99:\n message.type = 99;\n break;\n case \"RTC_SPK_TOTAL_RECOVERED_RED\":\n case 100:\n message.type = 100;\n break;\n case \"RTC_SPK_TOTAL_RECOVERED_FEC\":\n case 101:\n message.type = 101;\n break;\n case \"VIDEO_QUALITY_LIMITATION_DURATION_CPU\":\n case 102:\n message.type = 102;\n break;\n }\n if (object.value != null)\n message.value = Number(object.value);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkMetric message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkMetric\n * @static\n * @param {SdkMetric} message SdkMetric\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkMetric.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.type = options.enums === String ? \"VIDEO_ACTUAL_ENCODER_BITRATE\" : 1;\n object.value = 0;\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkMetric.Type[message.type] === undefined ? message.type : $root.SdkMetric.Type[message.type] : message.type;\n if (message.value != null && message.hasOwnProperty(\"value\"))\n object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value;\n return object;\n };\n\n /**\n * Converts this SdkMetric to JSON.\n * @function toJSON\n * @memberof SdkMetric\n * @instance\n * @returns {Object.} JSON object\n */\n SdkMetric.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkMetric\n * @function getTypeUrl\n * @memberof SdkMetric\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkMetric.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkMetric\";\n };\n\n /**\n * Type enum.\n * @name SdkMetric.Type\n * @enum {number}\n * @property {number} VIDEO_ACTUAL_ENCODER_BITRATE=1 VIDEO_ACTUAL_ENCODER_BITRATE value\n * @property {number} VIDEO_AVAILABLE_SEND_BANDWIDTH=2 VIDEO_AVAILABLE_SEND_BANDWIDTH value\n * @property {number} VIDEO_RETRANSMIT_BITRATE=3 VIDEO_RETRANSMIT_BITRATE value\n * @property {number} VIDEO_AVAILABLE_RECEIVE_BANDWIDTH=4 VIDEO_AVAILABLE_RECEIVE_BANDWIDTH value\n * @property {number} VIDEO_TARGET_ENCODER_BITRATE=5 VIDEO_TARGET_ENCODER_BITRATE value\n * @property {number} VIDEO_BUCKET_DELAY_MS=6 VIDEO_BUCKET_DELAY_MS value\n * @property {number} STUN_RTT_MS=7 STUN_RTT_MS value\n * @property {number} SOCKET_DISCARDED_PPS=8 SOCKET_DISCARDED_PPS value\n * @property {number} RTC_MIC_JITTER_MS=9 RTC_MIC_JITTER_MS value\n * @property {number} RTC_MIC_PPS=10 RTC_MIC_PPS value\n * @property {number} RTC_MIC_FRACTION_PACKET_LOST_PERCENT=11 RTC_MIC_FRACTION_PACKET_LOST_PERCENT value\n * @property {number} RTC_MIC_BITRATE=12 RTC_MIC_BITRATE value\n * @property {number} RTC_MIC_RTT_MS=13 RTC_MIC_RTT_MS value\n * @property {number} RTC_SPK_PPS=14 RTC_SPK_PPS value\n * @property {number} RTC_SPK_FRACTION_PACKET_LOST_PERCENT=15 RTC_SPK_FRACTION_PACKET_LOST_PERCENT value\n * @property {number} RTC_SPK_JITTER_MS=16 RTC_SPK_JITTER_MS value\n * @property {number} RTC_SPK_FRACTION_DECODER_LOSS_PERCENT=17 RTC_SPK_FRACTION_DECODER_LOSS_PERCENT value\n * @property {number} RTC_SPK_BITRATE=18 RTC_SPK_BITRATE value\n * @property {number} RTC_SPK_CURRENT_DELAY_MS=19 RTC_SPK_CURRENT_DELAY_MS value\n * @property {number} RTC_SPK_JITTER_BUFFER_MS=20 RTC_SPK_JITTER_BUFFER_MS value\n * @property {number} VIDEO_SENT_RTT_MS=21 VIDEO_SENT_RTT_MS value\n * @property {number} VIDEO_ENCODE_USAGE_PERCENT=22 VIDEO_ENCODE_USAGE_PERCENT value\n * @property {number} VIDEO_NACKS_RECEIVED=23 VIDEO_NACKS_RECEIVED value\n * @property {number} VIDEO_PLIS_RECEIVED=24 VIDEO_PLIS_RECEIVED value\n * @property {number} VIDEO_ENCODE_MS=25 VIDEO_ENCODE_MS value\n * @property {number} VIDEO_INPUT_FPS=26 VIDEO_INPUT_FPS value\n * @property {number} VIDEO_ENCODE_FPS=27 VIDEO_ENCODE_FPS value\n * @property {number} VIDEO_SENT_FPS=28 VIDEO_SENT_FPS value\n * @property {number} VIDEO_FIRS_RECEIVED=29 VIDEO_FIRS_RECEIVED value\n * @property {number} VIDEO_SENT_PPS=30 VIDEO_SENT_PPS value\n * @property {number} VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT=31 VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT value\n * @property {number} VIDEO_SENT_BITRATE=32 VIDEO_SENT_BITRATE value\n * @property {number} VIDEO_DROPPED_FPS=33 VIDEO_DROPPED_FPS value\n * @property {number} VIDEO_TARGET_DELAY_MS=34 VIDEO_TARGET_DELAY_MS value\n * @property {number} VIDEO_DECODE_MS=35 VIDEO_DECODE_MS value\n * @property {number} VIDEO_OUTPUT_FPS=36 VIDEO_OUTPUT_FPS value\n * @property {number} VIDEO_RECEIVED_PPS=37 VIDEO_RECEIVED_PPS value\n * @property {number} VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT=38 VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT value\n * @property {number} VIDEO_RENDER_DELAY_MS=39 VIDEO_RENDER_DELAY_MS value\n * @property {number} VIDEO_RECEIVED_FPS=40 VIDEO_RECEIVED_FPS value\n * @property {number} VIDEO_DECODE_FPS=41 VIDEO_DECODE_FPS value\n * @property {number} VIDEO_NACKS_SENT=42 VIDEO_NACKS_SENT value\n * @property {number} VIDEO_FIRS_SENT=43 VIDEO_FIRS_SENT value\n * @property {number} VIDEO_RECEIVED_BITRATE=44 VIDEO_RECEIVED_BITRATE value\n * @property {number} VIDEO_CURRENT_DELAY_MS=45 VIDEO_CURRENT_DELAY_MS value\n * @property {number} VIDEO_JITTER_BUFFER_MS=46 VIDEO_JITTER_BUFFER_MS value\n * @property {number} VIDEO_DISCARDED_PPS=47 VIDEO_DISCARDED_PPS value\n * @property {number} VIDEO_PLIS_SENT=48 VIDEO_PLIS_SENT value\n * @property {number} VIDEO_RECEIVED_JITTER_MS=49 VIDEO_RECEIVED_JITTER_MS value\n * @property {number} VIDEO_ENCODE_HEIGHT=64 VIDEO_ENCODE_HEIGHT value\n * @property {number} VIDEO_SENT_QP_SUM=66 VIDEO_SENT_QP_SUM value\n * @property {number} VIDEO_DECODE_HEIGHT=69 VIDEO_DECODE_HEIGHT value\n * @property {number} VIDEO_RECEIVED_QP_SUM=72 VIDEO_RECEIVED_QP_SUM value\n * @property {number} VIDEO_ENCODE_WIDTH=86 VIDEO_ENCODE_WIDTH value\n * @property {number} VIDEO_DECODE_WIDTH=87 VIDEO_DECODE_WIDTH value\n * @property {number} VIDEO_ENCODER_IS_HARDWARE=88 VIDEO_ENCODER_IS_HARDWARE value\n * @property {number} VIDEO_DECODER_IS_HARDWARE=89 VIDEO_DECODER_IS_HARDWARE value\n * @property {number} VIDEO_FREEZE_COUNT=90 VIDEO_FREEZE_COUNT value\n * @property {number} VIDEO_FREEZE_DURATION=91 VIDEO_FREEZE_DURATION value\n * @property {number} VIDEO_PAUSE_COUNT=92 VIDEO_PAUSE_COUNT value\n * @property {number} VIDEO_PAUSE_DURATION=93 VIDEO_PAUSE_DURATION value\n * @property {number} VIDEO_QUALITY_REASON=94 VIDEO_QUALITY_REASON value\n * @property {number} VIDEO_PROCESSING_TIME=95 VIDEO_PROCESSING_TIME value\n * @property {number} RTC_SPK_AUDIO_LEVEL=96 RTC_SPK_AUDIO_LEVEL value\n * @property {number} RTC_MIC_AUDIO_LEVEL=97 RTC_MIC_AUDIO_LEVEL value\n * @property {number} RTC_SPK_TOTAL_LOST=98 RTC_SPK_TOTAL_LOST value\n * @property {number} RTC_SPK_TOTAL_EXPECTED=99 RTC_SPK_TOTAL_EXPECTED value\n * @property {number} RTC_SPK_TOTAL_RECOVERED_RED=100 RTC_SPK_TOTAL_RECOVERED_RED value\n * @property {number} RTC_SPK_TOTAL_RECOVERED_FEC=101 RTC_SPK_TOTAL_RECOVERED_FEC value\n * @property {number} VIDEO_QUALITY_LIMITATION_DURATION_CPU=102 VIDEO_QUALITY_LIMITATION_DURATION_CPU value\n */\n SdkMetric.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"VIDEO_ACTUAL_ENCODER_BITRATE\"] = 1;\n values[valuesById[2] = \"VIDEO_AVAILABLE_SEND_BANDWIDTH\"] = 2;\n values[valuesById[3] = \"VIDEO_RETRANSMIT_BITRATE\"] = 3;\n values[valuesById[4] = \"VIDEO_AVAILABLE_RECEIVE_BANDWIDTH\"] = 4;\n values[valuesById[5] = \"VIDEO_TARGET_ENCODER_BITRATE\"] = 5;\n values[valuesById[6] = \"VIDEO_BUCKET_DELAY_MS\"] = 6;\n values[valuesById[7] = \"STUN_RTT_MS\"] = 7;\n values[valuesById[8] = \"SOCKET_DISCARDED_PPS\"] = 8;\n values[valuesById[9] = \"RTC_MIC_JITTER_MS\"] = 9;\n values[valuesById[10] = \"RTC_MIC_PPS\"] = 10;\n values[valuesById[11] = \"RTC_MIC_FRACTION_PACKET_LOST_PERCENT\"] = 11;\n values[valuesById[12] = \"RTC_MIC_BITRATE\"] = 12;\n values[valuesById[13] = \"RTC_MIC_RTT_MS\"] = 13;\n values[valuesById[14] = \"RTC_SPK_PPS\"] = 14;\n values[valuesById[15] = \"RTC_SPK_FRACTION_PACKET_LOST_PERCENT\"] = 15;\n values[valuesById[16] = \"RTC_SPK_JITTER_MS\"] = 16;\n values[valuesById[17] = \"RTC_SPK_FRACTION_DECODER_LOSS_PERCENT\"] = 17;\n values[valuesById[18] = \"RTC_SPK_BITRATE\"] = 18;\n values[valuesById[19] = \"RTC_SPK_CURRENT_DELAY_MS\"] = 19;\n values[valuesById[20] = \"RTC_SPK_JITTER_BUFFER_MS\"] = 20;\n values[valuesById[21] = \"VIDEO_SENT_RTT_MS\"] = 21;\n values[valuesById[22] = \"VIDEO_ENCODE_USAGE_PERCENT\"] = 22;\n values[valuesById[23] = \"VIDEO_NACKS_RECEIVED\"] = 23;\n values[valuesById[24] = \"VIDEO_PLIS_RECEIVED\"] = 24;\n values[valuesById[25] = \"VIDEO_ENCODE_MS\"] = 25;\n values[valuesById[26] = \"VIDEO_INPUT_FPS\"] = 26;\n values[valuesById[27] = \"VIDEO_ENCODE_FPS\"] = 27;\n values[valuesById[28] = \"VIDEO_SENT_FPS\"] = 28;\n values[valuesById[29] = \"VIDEO_FIRS_RECEIVED\"] = 29;\n values[valuesById[30] = \"VIDEO_SENT_PPS\"] = 30;\n values[valuesById[31] = \"VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT\"] = 31;\n values[valuesById[32] = \"VIDEO_SENT_BITRATE\"] = 32;\n values[valuesById[33] = \"VIDEO_DROPPED_FPS\"] = 33;\n values[valuesById[34] = \"VIDEO_TARGET_DELAY_MS\"] = 34;\n values[valuesById[35] = \"VIDEO_DECODE_MS\"] = 35;\n values[valuesById[36] = \"VIDEO_OUTPUT_FPS\"] = 36;\n values[valuesById[37] = \"VIDEO_RECEIVED_PPS\"] = 37;\n values[valuesById[38] = \"VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT\"] = 38;\n values[valuesById[39] = \"VIDEO_RENDER_DELAY_MS\"] = 39;\n values[valuesById[40] = \"VIDEO_RECEIVED_FPS\"] = 40;\n values[valuesById[41] = \"VIDEO_DECODE_FPS\"] = 41;\n values[valuesById[42] = \"VIDEO_NACKS_SENT\"] = 42;\n values[valuesById[43] = \"VIDEO_FIRS_SENT\"] = 43;\n values[valuesById[44] = \"VIDEO_RECEIVED_BITRATE\"] = 44;\n values[valuesById[45] = \"VIDEO_CURRENT_DELAY_MS\"] = 45;\n values[valuesById[46] = \"VIDEO_JITTER_BUFFER_MS\"] = 46;\n values[valuesById[47] = \"VIDEO_DISCARDED_PPS\"] = 47;\n values[valuesById[48] = \"VIDEO_PLIS_SENT\"] = 48;\n values[valuesById[49] = \"VIDEO_RECEIVED_JITTER_MS\"] = 49;\n values[valuesById[64] = \"VIDEO_ENCODE_HEIGHT\"] = 64;\n values[valuesById[66] = \"VIDEO_SENT_QP_SUM\"] = 66;\n values[valuesById[69] = \"VIDEO_DECODE_HEIGHT\"] = 69;\n values[valuesById[72] = \"VIDEO_RECEIVED_QP_SUM\"] = 72;\n values[valuesById[86] = \"VIDEO_ENCODE_WIDTH\"] = 86;\n values[valuesById[87] = \"VIDEO_DECODE_WIDTH\"] = 87;\n values[valuesById[88] = \"VIDEO_ENCODER_IS_HARDWARE\"] = 88;\n values[valuesById[89] = \"VIDEO_DECODER_IS_HARDWARE\"] = 89;\n values[valuesById[90] = \"VIDEO_FREEZE_COUNT\"] = 90;\n values[valuesById[91] = \"VIDEO_FREEZE_DURATION\"] = 91;\n values[valuesById[92] = \"VIDEO_PAUSE_COUNT\"] = 92;\n values[valuesById[93] = \"VIDEO_PAUSE_DURATION\"] = 93;\n values[valuesById[94] = \"VIDEO_QUALITY_REASON\"] = 94;\n values[valuesById[95] = \"VIDEO_PROCESSING_TIME\"] = 95;\n values[valuesById[96] = \"RTC_SPK_AUDIO_LEVEL\"] = 96;\n values[valuesById[97] = \"RTC_MIC_AUDIO_LEVEL\"] = 97;\n values[valuesById[98] = \"RTC_SPK_TOTAL_LOST\"] = 98;\n values[valuesById[99] = \"RTC_SPK_TOTAL_EXPECTED\"] = 99;\n values[valuesById[100] = \"RTC_SPK_TOTAL_RECOVERED_RED\"] = 100;\n values[valuesById[101] = \"RTC_SPK_TOTAL_RECOVERED_FEC\"] = 101;\n values[valuesById[102] = \"VIDEO_QUALITY_LIMITATION_DURATION_CPU\"] = 102;\n return values;\n })();\n\n return SdkMetric;\n})();\n\n$root.SdkStreamMetricFrame = (function() {\n\n /**\n * Properties of a SdkStreamMetricFrame.\n * @name ISdkStreamMetricFrame\n * @interface ISdkStreamMetricFrame\n * @property {number|null} [streamId] SdkStreamMetricFrame streamId\n * @property {number|null} [groupId] SdkStreamMetricFrame groupId\n * @property {Array.|null} [metrics] SdkStreamMetricFrame metrics\n * @property {Array.|null} [dimensions] SdkStreamMetricFrame dimensions\n */\n\n /**\n * Constructs a new SdkStreamMetricFrame.\n * @name SdkStreamMetricFrame\n * @classdesc Represents a SdkStreamMetricFrame.\n * @implements ISdkStreamMetricFrame\n * @constructor\n * @param {ISdkStreamMetricFrame=} [properties] Properties to set\n */\n function SdkStreamMetricFrame(properties) {\n this.metrics = [];\n this.dimensions = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkStreamMetricFrame streamId.\n * @member {number} streamId\n * @memberof SdkStreamMetricFrame\n * @instance\n */\n SdkStreamMetricFrame.prototype.streamId = 0;\n\n /**\n * SdkStreamMetricFrame groupId.\n * @member {number} groupId\n * @memberof SdkStreamMetricFrame\n * @instance\n */\n SdkStreamMetricFrame.prototype.groupId = 0;\n\n /**\n * SdkStreamMetricFrame metrics.\n * @member {Array.} metrics\n * @memberof SdkStreamMetricFrame\n * @instance\n */\n SdkStreamMetricFrame.prototype.metrics = $util.emptyArray;\n\n /**\n * SdkStreamMetricFrame dimensions.\n * @member {Array.} dimensions\n * @memberof SdkStreamMetricFrame\n * @instance\n */\n SdkStreamMetricFrame.prototype.dimensions = $util.emptyArray;\n\n /**\n * Creates a new SdkStreamMetricFrame instance using the specified properties.\n * @function create\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {ISdkStreamMetricFrame=} [properties] Properties to set\n * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame instance\n */\n SdkStreamMetricFrame.create = function create(properties) {\n return new SdkStreamMetricFrame(properties);\n };\n\n /**\n * Encodes the specified SdkStreamMetricFrame message. Does not implicitly {@link SdkStreamMetricFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {ISdkStreamMetricFrame} message SdkStreamMetricFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamMetricFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.streamId);\n if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.groupId);\n if (message.metrics != null && message.metrics.length)\n for (var i = 0; i < message.metrics.length; ++i)\n $root.SdkMetric.encode(message.metrics[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();\n if (message.dimensions != null && message.dimensions.length)\n for (var i = 0; i < message.dimensions.length; ++i)\n $root.SdkStreamDimension.encode(message.dimensions[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkStreamMetricFrame message, length delimited. Does not implicitly {@link SdkStreamMetricFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {ISdkStreamMetricFrame} message SdkStreamMetricFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamMetricFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkStreamMetricFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamMetricFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamMetricFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 3: {\n message.streamId = reader.uint32();\n break;\n }\n case 4: {\n message.groupId = reader.uint32();\n break;\n }\n case 5: {\n if (!(message.metrics && message.metrics.length))\n message.metrics = [];\n message.metrics.push($root.SdkMetric.decode(reader, reader.uint32()));\n break;\n }\n case 6: {\n if (!(message.dimensions && message.dimensions.length))\n message.dimensions = [];\n message.dimensions.push($root.SdkStreamDimension.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkStreamMetricFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamMetricFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkStreamMetricFrame message.\n * @function verify\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkStreamMetricFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n if (!$util.isInteger(message.groupId))\n return \"groupId: integer expected\";\n if (message.metrics != null && message.hasOwnProperty(\"metrics\")) {\n if (!Array.isArray(message.metrics))\n return \"metrics: array expected\";\n for (var i = 0; i < message.metrics.length; ++i) {\n var error = $root.SdkMetric.verify(message.metrics[i]);\n if (error)\n return \"metrics.\" + error;\n }\n }\n if (message.dimensions != null && message.hasOwnProperty(\"dimensions\")) {\n if (!Array.isArray(message.dimensions))\n return \"dimensions: array expected\";\n for (var i = 0; i < message.dimensions.length; ++i) {\n var error = $root.SdkStreamDimension.verify(message.dimensions[i]);\n if (error)\n return \"dimensions.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkStreamMetricFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkStreamMetricFrame} SdkStreamMetricFrame\n */\n SdkStreamMetricFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkStreamMetricFrame)\n return object;\n var message = new $root.SdkStreamMetricFrame();\n if (object.streamId != null)\n message.streamId = object.streamId >>> 0;\n if (object.groupId != null)\n message.groupId = object.groupId >>> 0;\n if (object.metrics) {\n if (!Array.isArray(object.metrics))\n throw TypeError(\".SdkStreamMetricFrame.metrics: array expected\");\n message.metrics = [];\n for (var i = 0; i < object.metrics.length; ++i) {\n if (typeof object.metrics[i] !== \"object\")\n throw TypeError(\".SdkStreamMetricFrame.metrics: object expected\");\n message.metrics[i] = $root.SdkMetric.fromObject(object.metrics[i]);\n }\n }\n if (object.dimensions) {\n if (!Array.isArray(object.dimensions))\n throw TypeError(\".SdkStreamMetricFrame.dimensions: array expected\");\n message.dimensions = [];\n for (var i = 0; i < object.dimensions.length; ++i) {\n if (typeof object.dimensions[i] !== \"object\")\n throw TypeError(\".SdkStreamMetricFrame.dimensions: object expected\");\n message.dimensions[i] = $root.SdkStreamDimension.fromObject(object.dimensions[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkStreamMetricFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {SdkStreamMetricFrame} message SdkStreamMetricFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkStreamMetricFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.metrics = [];\n object.dimensions = [];\n }\n if (options.defaults) {\n object.streamId = 0;\n object.groupId = 0;\n }\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n object.groupId = message.groupId;\n if (message.metrics && message.metrics.length) {\n object.metrics = [];\n for (var j = 0; j < message.metrics.length; ++j)\n object.metrics[j] = $root.SdkMetric.toObject(message.metrics[j], options);\n }\n if (message.dimensions && message.dimensions.length) {\n object.dimensions = [];\n for (var j = 0; j < message.dimensions.length; ++j)\n object.dimensions[j] = $root.SdkStreamDimension.toObject(message.dimensions[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkStreamMetricFrame to JSON.\n * @function toJSON\n * @memberof SdkStreamMetricFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkStreamMetricFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkStreamMetricFrame\n * @function getTypeUrl\n * @memberof SdkStreamMetricFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkStreamMetricFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkStreamMetricFrame\";\n };\n\n return SdkStreamMetricFrame;\n})();\n\n$root.SdkClientMetricFrame = (function() {\n\n /**\n * Properties of a SdkClientMetricFrame.\n * @name ISdkClientMetricFrame\n * @interface ISdkClientMetricFrame\n * @property {Array.|null} [globalMetrics] SdkClientMetricFrame globalMetrics\n * @property {Array.|null} [streamMetricFrames] SdkClientMetricFrame streamMetricFrames\n */\n\n /**\n * Constructs a new SdkClientMetricFrame.\n * @name SdkClientMetricFrame\n * @classdesc Represents a SdkClientMetricFrame.\n * @implements ISdkClientMetricFrame\n * @constructor\n * @param {ISdkClientMetricFrame=} [properties] Properties to set\n */\n function SdkClientMetricFrame(properties) {\n this.globalMetrics = [];\n this.streamMetricFrames = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkClientMetricFrame globalMetrics.\n * @member {Array.} globalMetrics\n * @memberof SdkClientMetricFrame\n * @instance\n */\n SdkClientMetricFrame.prototype.globalMetrics = $util.emptyArray;\n\n /**\n * SdkClientMetricFrame streamMetricFrames.\n * @member {Array.} streamMetricFrames\n * @memberof SdkClientMetricFrame\n * @instance\n */\n SdkClientMetricFrame.prototype.streamMetricFrames = $util.emptyArray;\n\n /**\n * Creates a new SdkClientMetricFrame instance using the specified properties.\n * @function create\n * @memberof SdkClientMetricFrame\n * @static\n * @param {ISdkClientMetricFrame=} [properties] Properties to set\n * @returns {SdkClientMetricFrame} SdkClientMetricFrame instance\n */\n SdkClientMetricFrame.create = function create(properties) {\n return new SdkClientMetricFrame(properties);\n };\n\n /**\n * Encodes the specified SdkClientMetricFrame message. Does not implicitly {@link SdkClientMetricFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkClientMetricFrame\n * @static\n * @param {ISdkClientMetricFrame} message SdkClientMetricFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkClientMetricFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.globalMetrics != null && message.globalMetrics.length)\n for (var i = 0; i < message.globalMetrics.length; ++i)\n $root.SdkMetric.encode(message.globalMetrics[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.streamMetricFrames != null && message.streamMetricFrames.length)\n for (var i = 0; i < message.streamMetricFrames.length; ++i)\n $root.SdkStreamMetricFrame.encode(message.streamMetricFrames[i], writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkClientMetricFrame message, length delimited. Does not implicitly {@link SdkClientMetricFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkClientMetricFrame\n * @static\n * @param {ISdkClientMetricFrame} message SdkClientMetricFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkClientMetricFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkClientMetricFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkClientMetricFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkClientMetricFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkClientMetricFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.globalMetrics && message.globalMetrics.length))\n message.globalMetrics = [];\n message.globalMetrics.push($root.SdkMetric.decode(reader, reader.uint32()));\n break;\n }\n case 2: {\n if (!(message.streamMetricFrames && message.streamMetricFrames.length))\n message.streamMetricFrames = [];\n message.streamMetricFrames.push($root.SdkStreamMetricFrame.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkClientMetricFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkClientMetricFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkClientMetricFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkClientMetricFrame message.\n * @function verify\n * @memberof SdkClientMetricFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkClientMetricFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.globalMetrics != null && message.hasOwnProperty(\"globalMetrics\")) {\n if (!Array.isArray(message.globalMetrics))\n return \"globalMetrics: array expected\";\n for (var i = 0; i < message.globalMetrics.length; ++i) {\n var error = $root.SdkMetric.verify(message.globalMetrics[i]);\n if (error)\n return \"globalMetrics.\" + error;\n }\n }\n if (message.streamMetricFrames != null && message.hasOwnProperty(\"streamMetricFrames\")) {\n if (!Array.isArray(message.streamMetricFrames))\n return \"streamMetricFrames: array expected\";\n for (var i = 0; i < message.streamMetricFrames.length; ++i) {\n var error = $root.SdkStreamMetricFrame.verify(message.streamMetricFrames[i]);\n if (error)\n return \"streamMetricFrames.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkClientMetricFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkClientMetricFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkClientMetricFrame} SdkClientMetricFrame\n */\n SdkClientMetricFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkClientMetricFrame)\n return object;\n var message = new $root.SdkClientMetricFrame();\n if (object.globalMetrics) {\n if (!Array.isArray(object.globalMetrics))\n throw TypeError(\".SdkClientMetricFrame.globalMetrics: array expected\");\n message.globalMetrics = [];\n for (var i = 0; i < object.globalMetrics.length; ++i) {\n if (typeof object.globalMetrics[i] !== \"object\")\n throw TypeError(\".SdkClientMetricFrame.globalMetrics: object expected\");\n message.globalMetrics[i] = $root.SdkMetric.fromObject(object.globalMetrics[i]);\n }\n }\n if (object.streamMetricFrames) {\n if (!Array.isArray(object.streamMetricFrames))\n throw TypeError(\".SdkClientMetricFrame.streamMetricFrames: array expected\");\n message.streamMetricFrames = [];\n for (var i = 0; i < object.streamMetricFrames.length; ++i) {\n if (typeof object.streamMetricFrames[i] !== \"object\")\n throw TypeError(\".SdkClientMetricFrame.streamMetricFrames: object expected\");\n message.streamMetricFrames[i] = $root.SdkStreamMetricFrame.fromObject(object.streamMetricFrames[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkClientMetricFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkClientMetricFrame\n * @static\n * @param {SdkClientMetricFrame} message SdkClientMetricFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkClientMetricFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.globalMetrics = [];\n object.streamMetricFrames = [];\n }\n if (message.globalMetrics && message.globalMetrics.length) {\n object.globalMetrics = [];\n for (var j = 0; j < message.globalMetrics.length; ++j)\n object.globalMetrics[j] = $root.SdkMetric.toObject(message.globalMetrics[j], options);\n }\n if (message.streamMetricFrames && message.streamMetricFrames.length) {\n object.streamMetricFrames = [];\n for (var j = 0; j < message.streamMetricFrames.length; ++j)\n object.streamMetricFrames[j] = $root.SdkStreamMetricFrame.toObject(message.streamMetricFrames[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkClientMetricFrame to JSON.\n * @function toJSON\n * @memberof SdkClientMetricFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkClientMetricFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkClientMetricFrame\n * @function getTypeUrl\n * @memberof SdkClientMetricFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkClientMetricFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkClientMetricFrame\";\n };\n\n return SdkClientMetricFrame;\n})();\n\n$root.SdkStreamDimension = (function() {\n\n /**\n * Properties of a SdkStreamDimension.\n * @name ISdkStreamDimension\n * @interface ISdkStreamDimension\n * @property {SdkStreamDimension.Type|null} [type] SdkStreamDimension type\n * @property {ISdkDimensionValue|null} [value] SdkStreamDimension value\n */\n\n /**\n * Constructs a new SdkStreamDimension.\n * @name SdkStreamDimension\n * @classdesc Represents a SdkStreamDimension.\n * @implements ISdkStreamDimension\n * @constructor\n * @param {ISdkStreamDimension=} [properties] Properties to set\n */\n function SdkStreamDimension(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkStreamDimension type.\n * @member {SdkStreamDimension.Type} type\n * @memberof SdkStreamDimension\n * @instance\n */\n SdkStreamDimension.prototype.type = 1;\n\n /**\n * SdkStreamDimension value.\n * @member {ISdkDimensionValue|null|undefined} value\n * @memberof SdkStreamDimension\n * @instance\n */\n SdkStreamDimension.prototype.value = null;\n\n /**\n * Creates a new SdkStreamDimension instance using the specified properties.\n * @function create\n * @memberof SdkStreamDimension\n * @static\n * @param {ISdkStreamDimension=} [properties] Properties to set\n * @returns {SdkStreamDimension} SdkStreamDimension instance\n */\n SdkStreamDimension.create = function create(properties) {\n return new SdkStreamDimension(properties);\n };\n\n /**\n * Encodes the specified SdkStreamDimension message. Does not implicitly {@link SdkStreamDimension.verify|verify} messages.\n * @function encode\n * @memberof SdkStreamDimension\n * @static\n * @param {ISdkStreamDimension} message SdkStreamDimension message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamDimension.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.value != null && Object.hasOwnProperty.call(message, \"value\"))\n $root.SdkDimensionValue.encode(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkStreamDimension message, length delimited. Does not implicitly {@link SdkStreamDimension.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkStreamDimension\n * @static\n * @param {ISdkStreamDimension} message SdkStreamDimension message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkStreamDimension.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkStreamDimension message from the specified reader or buffer.\n * @function decode\n * @memberof SdkStreamDimension\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkStreamDimension} SdkStreamDimension\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamDimension.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkStreamDimension();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.value = $root.SdkDimensionValue.decode(reader, reader.uint32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkStreamDimension message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkStreamDimension\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkStreamDimension} SdkStreamDimension\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkStreamDimension.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkStreamDimension message.\n * @function verify\n * @memberof SdkStreamDimension\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkStreamDimension.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n break;\n }\n if (message.value != null && message.hasOwnProperty(\"value\")) {\n var error = $root.SdkDimensionValue.verify(message.value);\n if (error)\n return \"value.\" + error;\n }\n return null;\n };\n\n /**\n * Creates a SdkStreamDimension message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkStreamDimension\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkStreamDimension} SdkStreamDimension\n */\n SdkStreamDimension.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkStreamDimension)\n return object;\n var message = new $root.SdkStreamDimension();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"VIDEO_ENCODER_NAME\":\n case 1:\n message.type = 1;\n break;\n case \"VIDEO_DECODER_NAME\":\n case 2:\n message.type = 2;\n break;\n }\n if (object.value != null) {\n if (typeof object.value !== \"object\")\n throw TypeError(\".SdkStreamDimension.value: object expected\");\n message.value = $root.SdkDimensionValue.fromObject(object.value);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkStreamDimension message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkStreamDimension\n * @static\n * @param {SdkStreamDimension} message SdkStreamDimension\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkStreamDimension.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.type = options.enums === String ? \"VIDEO_ENCODER_NAME\" : 1;\n object.value = null;\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkStreamDimension.Type[message.type] === undefined ? message.type : $root.SdkStreamDimension.Type[message.type] : message.type;\n if (message.value != null && message.hasOwnProperty(\"value\"))\n object.value = $root.SdkDimensionValue.toObject(message.value, options);\n return object;\n };\n\n /**\n * Converts this SdkStreamDimension to JSON.\n * @function toJSON\n * @memberof SdkStreamDimension\n * @instance\n * @returns {Object.} JSON object\n */\n SdkStreamDimension.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkStreamDimension\n * @function getTypeUrl\n * @memberof SdkStreamDimension\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkStreamDimension.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkStreamDimension\";\n };\n\n /**\n * Type enum.\n * @name SdkStreamDimension.Type\n * @enum {number}\n * @property {number} VIDEO_ENCODER_NAME=1 VIDEO_ENCODER_NAME value\n * @property {number} VIDEO_DECODER_NAME=2 VIDEO_DECODER_NAME value\n */\n SdkStreamDimension.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"VIDEO_ENCODER_NAME\"] = 1;\n values[valuesById[2] = \"VIDEO_DECODER_NAME\"] = 2;\n return values;\n })();\n\n return SdkStreamDimension;\n})();\n\n$root.SdkDimensionValue = (function() {\n\n /**\n * Properties of a SdkDimensionValue.\n * @name ISdkDimensionValue\n * @interface ISdkDimensionValue\n * @property {string|null} [stringValue] SdkDimensionValue stringValue\n * @property {boolean|null} [boolValue] SdkDimensionValue boolValue\n * @property {number|Long|null} [uintValue] SdkDimensionValue uintValue\n */\n\n /**\n * Constructs a new SdkDimensionValue.\n * @name SdkDimensionValue\n * @classdesc Represents a SdkDimensionValue.\n * @implements ISdkDimensionValue\n * @constructor\n * @param {ISdkDimensionValue=} [properties] Properties to set\n */\n function SdkDimensionValue(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkDimensionValue stringValue.\n * @member {string} stringValue\n * @memberof SdkDimensionValue\n * @instance\n */\n SdkDimensionValue.prototype.stringValue = \"\";\n\n /**\n * SdkDimensionValue boolValue.\n * @member {boolean} boolValue\n * @memberof SdkDimensionValue\n * @instance\n */\n SdkDimensionValue.prototype.boolValue = false;\n\n /**\n * SdkDimensionValue uintValue.\n * @member {number|Long} uintValue\n * @memberof SdkDimensionValue\n * @instance\n */\n SdkDimensionValue.prototype.uintValue = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * Creates a new SdkDimensionValue instance using the specified properties.\n * @function create\n * @memberof SdkDimensionValue\n * @static\n * @param {ISdkDimensionValue=} [properties] Properties to set\n * @returns {SdkDimensionValue} SdkDimensionValue instance\n */\n SdkDimensionValue.create = function create(properties) {\n return new SdkDimensionValue(properties);\n };\n\n /**\n * Encodes the specified SdkDimensionValue message. Does not implicitly {@link SdkDimensionValue.verify|verify} messages.\n * @function encode\n * @memberof SdkDimensionValue\n * @static\n * @param {ISdkDimensionValue} message SdkDimensionValue message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDimensionValue.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.stringValue != null && Object.hasOwnProperty.call(message, \"stringValue\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.stringValue);\n if (message.boolValue != null && Object.hasOwnProperty.call(message, \"boolValue\"))\n writer.uint32(/* id 2, wireType 0 =*/16).bool(message.boolValue);\n if (message.uintValue != null && Object.hasOwnProperty.call(message, \"uintValue\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint64(message.uintValue);\n return writer;\n };\n\n /**\n * Encodes the specified SdkDimensionValue message, length delimited. Does not implicitly {@link SdkDimensionValue.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkDimensionValue\n * @static\n * @param {ISdkDimensionValue} message SdkDimensionValue message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDimensionValue.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkDimensionValue message from the specified reader or buffer.\n * @function decode\n * @memberof SdkDimensionValue\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkDimensionValue} SdkDimensionValue\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDimensionValue.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDimensionValue();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.stringValue = reader.string();\n break;\n }\n case 2: {\n message.boolValue = reader.bool();\n break;\n }\n case 3: {\n message.uintValue = reader.uint64();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkDimensionValue message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkDimensionValue\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkDimensionValue} SdkDimensionValue\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDimensionValue.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkDimensionValue message.\n * @function verify\n * @memberof SdkDimensionValue\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkDimensionValue.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.stringValue != null && message.hasOwnProperty(\"stringValue\"))\n if (!$util.isString(message.stringValue))\n return \"stringValue: string expected\";\n if (message.boolValue != null && message.hasOwnProperty(\"boolValue\"))\n if (typeof message.boolValue !== \"boolean\")\n return \"boolValue: boolean expected\";\n if (message.uintValue != null && message.hasOwnProperty(\"uintValue\"))\n if (!$util.isInteger(message.uintValue) && !(message.uintValue && $util.isInteger(message.uintValue.low) && $util.isInteger(message.uintValue.high)))\n return \"uintValue: integer|Long expected\";\n return null;\n };\n\n /**\n * Creates a SdkDimensionValue message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkDimensionValue\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkDimensionValue} SdkDimensionValue\n */\n SdkDimensionValue.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkDimensionValue)\n return object;\n var message = new $root.SdkDimensionValue();\n if (object.stringValue != null)\n message.stringValue = String(object.stringValue);\n if (object.boolValue != null)\n message.boolValue = Boolean(object.boolValue);\n if (object.uintValue != null)\n if ($util.Long)\n (message.uintValue = $util.Long.fromValue(object.uintValue)).unsigned = true;\n else if (typeof object.uintValue === \"string\")\n message.uintValue = parseInt(object.uintValue, 10);\n else if (typeof object.uintValue === \"number\")\n message.uintValue = object.uintValue;\n else if (typeof object.uintValue === \"object\")\n message.uintValue = new $util.LongBits(object.uintValue.low >>> 0, object.uintValue.high >>> 0).toNumber(true);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkDimensionValue message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkDimensionValue\n * @static\n * @param {SdkDimensionValue} message SdkDimensionValue\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkDimensionValue.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.stringValue = \"\";\n object.boolValue = false;\n if ($util.Long) {\n var long = new $util.Long(0, 0, true);\n object.uintValue = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.uintValue = options.longs === String ? \"0\" : 0;\n }\n if (message.stringValue != null && message.hasOwnProperty(\"stringValue\"))\n object.stringValue = message.stringValue;\n if (message.boolValue != null && message.hasOwnProperty(\"boolValue\"))\n object.boolValue = message.boolValue;\n if (message.uintValue != null && message.hasOwnProperty(\"uintValue\"))\n if (typeof message.uintValue === \"number\")\n object.uintValue = options.longs === String ? String(message.uintValue) : message.uintValue;\n else\n object.uintValue = options.longs === String ? $util.Long.prototype.toString.call(message.uintValue) : options.longs === Number ? new $util.LongBits(message.uintValue.low >>> 0, message.uintValue.high >>> 0).toNumber(true) : message.uintValue;\n return object;\n };\n\n /**\n * Converts this SdkDimensionValue to JSON.\n * @function toJSON\n * @memberof SdkDimensionValue\n * @instance\n * @returns {Object.} JSON object\n */\n SdkDimensionValue.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkDimensionValue\n * @function getTypeUrl\n * @memberof SdkDimensionValue\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkDimensionValue.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkDimensionValue\";\n };\n\n return SdkDimensionValue;\n})();\n\n$root.SdkDataMessageFrame = (function() {\n\n /**\n * Properties of a SdkDataMessageFrame.\n * @name ISdkDataMessageFrame\n * @interface ISdkDataMessageFrame\n * @property {Array.|null} [messages] SdkDataMessageFrame messages\n */\n\n /**\n * Constructs a new SdkDataMessageFrame.\n * @name SdkDataMessageFrame\n * @classdesc Represents a SdkDataMessageFrame.\n * @implements ISdkDataMessageFrame\n * @constructor\n * @param {ISdkDataMessageFrame=} [properties] Properties to set\n */\n function SdkDataMessageFrame(properties) {\n this.messages = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkDataMessageFrame messages.\n * @member {Array.} messages\n * @memberof SdkDataMessageFrame\n * @instance\n */\n SdkDataMessageFrame.prototype.messages = $util.emptyArray;\n\n /**\n * Creates a new SdkDataMessageFrame instance using the specified properties.\n * @function create\n * @memberof SdkDataMessageFrame\n * @static\n * @param {ISdkDataMessageFrame=} [properties] Properties to set\n * @returns {SdkDataMessageFrame} SdkDataMessageFrame instance\n */\n SdkDataMessageFrame.create = function create(properties) {\n return new SdkDataMessageFrame(properties);\n };\n\n /**\n * Encodes the specified SdkDataMessageFrame message. Does not implicitly {@link SdkDataMessageFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkDataMessageFrame\n * @static\n * @param {ISdkDataMessageFrame} message SdkDataMessageFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDataMessageFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.messages != null && message.messages.length)\n for (var i = 0; i < message.messages.length; ++i)\n $root.SdkDataMessagePayload.encode(message.messages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkDataMessageFrame message, length delimited. Does not implicitly {@link SdkDataMessageFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkDataMessageFrame\n * @static\n * @param {ISdkDataMessageFrame} message SdkDataMessageFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDataMessageFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkDataMessageFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkDataMessageFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDataMessageFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDataMessageFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.messages && message.messages.length))\n message.messages = [];\n message.messages.push($root.SdkDataMessagePayload.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkDataMessageFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkDataMessageFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDataMessageFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkDataMessageFrame message.\n * @function verify\n * @memberof SdkDataMessageFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkDataMessageFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.messages != null && message.hasOwnProperty(\"messages\")) {\n if (!Array.isArray(message.messages))\n return \"messages: array expected\";\n for (var i = 0; i < message.messages.length; ++i) {\n var error = $root.SdkDataMessagePayload.verify(message.messages[i]);\n if (error)\n return \"messages.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkDataMessageFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkDataMessageFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkDataMessageFrame} SdkDataMessageFrame\n */\n SdkDataMessageFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkDataMessageFrame)\n return object;\n var message = new $root.SdkDataMessageFrame();\n if (object.messages) {\n if (!Array.isArray(object.messages))\n throw TypeError(\".SdkDataMessageFrame.messages: array expected\");\n message.messages = [];\n for (var i = 0; i < object.messages.length; ++i) {\n if (typeof object.messages[i] !== \"object\")\n throw TypeError(\".SdkDataMessageFrame.messages: object expected\");\n message.messages[i] = $root.SdkDataMessagePayload.fromObject(object.messages[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkDataMessageFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkDataMessageFrame\n * @static\n * @param {SdkDataMessageFrame} message SdkDataMessageFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkDataMessageFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.messages = [];\n if (message.messages && message.messages.length) {\n object.messages = [];\n for (var j = 0; j < message.messages.length; ++j)\n object.messages[j] = $root.SdkDataMessagePayload.toObject(message.messages[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkDataMessageFrame to JSON.\n * @function toJSON\n * @memberof SdkDataMessageFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkDataMessageFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkDataMessageFrame\n * @function getTypeUrl\n * @memberof SdkDataMessageFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkDataMessageFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkDataMessageFrame\";\n };\n\n return SdkDataMessageFrame;\n})();\n\n$root.SdkDataMessagePayload = (function() {\n\n /**\n * Properties of a SdkDataMessagePayload.\n * @name ISdkDataMessagePayload\n * @interface ISdkDataMessagePayload\n * @property {string|null} [topic] SdkDataMessagePayload topic\n * @property {Uint8Array|null} [data] SdkDataMessagePayload data\n * @property {number|null} [lifetimeMs] SdkDataMessagePayload lifetimeMs\n * @property {string|null} [senderAttendeeId] SdkDataMessagePayload senderAttendeeId\n * @property {number|Long|null} [ingestTimeNs] SdkDataMessagePayload ingestTimeNs\n * @property {string|null} [senderExternalUserId] SdkDataMessagePayload senderExternalUserId\n */\n\n /**\n * Constructs a new SdkDataMessagePayload.\n * @name SdkDataMessagePayload\n * @classdesc Represents a SdkDataMessagePayload.\n * @implements ISdkDataMessagePayload\n * @constructor\n * @param {ISdkDataMessagePayload=} [properties] Properties to set\n */\n function SdkDataMessagePayload(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkDataMessagePayload topic.\n * @member {string} topic\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.topic = \"\";\n\n /**\n * SdkDataMessagePayload data.\n * @member {Uint8Array} data\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.data = $util.newBuffer([]);\n\n /**\n * SdkDataMessagePayload lifetimeMs.\n * @member {number} lifetimeMs\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.lifetimeMs = 0;\n\n /**\n * SdkDataMessagePayload senderAttendeeId.\n * @member {string} senderAttendeeId\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.senderAttendeeId = \"\";\n\n /**\n * SdkDataMessagePayload ingestTimeNs.\n * @member {number|Long} ingestTimeNs\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.ingestTimeNs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkDataMessagePayload senderExternalUserId.\n * @member {string} senderExternalUserId\n * @memberof SdkDataMessagePayload\n * @instance\n */\n SdkDataMessagePayload.prototype.senderExternalUserId = \"\";\n\n /**\n * Creates a new SdkDataMessagePayload instance using the specified properties.\n * @function create\n * @memberof SdkDataMessagePayload\n * @static\n * @param {ISdkDataMessagePayload=} [properties] Properties to set\n * @returns {SdkDataMessagePayload} SdkDataMessagePayload instance\n */\n SdkDataMessagePayload.create = function create(properties) {\n return new SdkDataMessagePayload(properties);\n };\n\n /**\n * Encodes the specified SdkDataMessagePayload message. Does not implicitly {@link SdkDataMessagePayload.verify|verify} messages.\n * @function encode\n * @memberof SdkDataMessagePayload\n * @static\n * @param {ISdkDataMessagePayload} message SdkDataMessagePayload message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDataMessagePayload.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.topic != null && Object.hasOwnProperty.call(message, \"topic\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.topic);\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.data);\n if (message.lifetimeMs != null && Object.hasOwnProperty.call(message, \"lifetimeMs\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.lifetimeMs);\n if (message.senderAttendeeId != null && Object.hasOwnProperty.call(message, \"senderAttendeeId\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.senderAttendeeId);\n if (message.ingestTimeNs != null && Object.hasOwnProperty.call(message, \"ingestTimeNs\"))\n writer.uint32(/* id 5, wireType 0 =*/40).int64(message.ingestTimeNs);\n if (message.senderExternalUserId != null && Object.hasOwnProperty.call(message, \"senderExternalUserId\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.senderExternalUserId);\n return writer;\n };\n\n /**\n * Encodes the specified SdkDataMessagePayload message, length delimited. Does not implicitly {@link SdkDataMessagePayload.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkDataMessagePayload\n * @static\n * @param {ISdkDataMessagePayload} message SdkDataMessagePayload message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkDataMessagePayload.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkDataMessagePayload message from the specified reader or buffer.\n * @function decode\n * @memberof SdkDataMessagePayload\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDataMessagePayload.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkDataMessagePayload();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.topic = reader.string();\n break;\n }\n case 2: {\n message.data = reader.bytes();\n break;\n }\n case 3: {\n message.lifetimeMs = reader.uint32();\n break;\n }\n case 4: {\n message.senderAttendeeId = reader.string();\n break;\n }\n case 5: {\n message.ingestTimeNs = reader.int64();\n break;\n }\n case 6: {\n message.senderExternalUserId = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkDataMessagePayload message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkDataMessagePayload\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkDataMessagePayload.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkDataMessagePayload message.\n * @function verify\n * @memberof SdkDataMessagePayload\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkDataMessagePayload.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.topic != null && message.hasOwnProperty(\"topic\"))\n if (!$util.isString(message.topic))\n return \"topic: string expected\";\n if (message.data != null && message.hasOwnProperty(\"data\"))\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\n return \"data: buffer expected\";\n if (message.lifetimeMs != null && message.hasOwnProperty(\"lifetimeMs\"))\n if (!$util.isInteger(message.lifetimeMs))\n return \"lifetimeMs: integer expected\";\n if (message.senderAttendeeId != null && message.hasOwnProperty(\"senderAttendeeId\"))\n if (!$util.isString(message.senderAttendeeId))\n return \"senderAttendeeId: string expected\";\n if (message.ingestTimeNs != null && message.hasOwnProperty(\"ingestTimeNs\"))\n if (!$util.isInteger(message.ingestTimeNs) && !(message.ingestTimeNs && $util.isInteger(message.ingestTimeNs.low) && $util.isInteger(message.ingestTimeNs.high)))\n return \"ingestTimeNs: integer|Long expected\";\n if (message.senderExternalUserId != null && message.hasOwnProperty(\"senderExternalUserId\"))\n if (!$util.isString(message.senderExternalUserId))\n return \"senderExternalUserId: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkDataMessagePayload message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkDataMessagePayload\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkDataMessagePayload} SdkDataMessagePayload\n */\n SdkDataMessagePayload.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkDataMessagePayload)\n return object;\n var message = new $root.SdkDataMessagePayload();\n if (object.topic != null)\n message.topic = String(object.topic);\n if (object.data != null)\n if (typeof object.data === \"string\")\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\n else if (object.data.length >= 0)\n message.data = object.data;\n if (object.lifetimeMs != null)\n message.lifetimeMs = object.lifetimeMs >>> 0;\n if (object.senderAttendeeId != null)\n message.senderAttendeeId = String(object.senderAttendeeId);\n if (object.ingestTimeNs != null)\n if ($util.Long)\n (message.ingestTimeNs = $util.Long.fromValue(object.ingestTimeNs)).unsigned = false;\n else if (typeof object.ingestTimeNs === \"string\")\n message.ingestTimeNs = parseInt(object.ingestTimeNs, 10);\n else if (typeof object.ingestTimeNs === \"number\")\n message.ingestTimeNs = object.ingestTimeNs;\n else if (typeof object.ingestTimeNs === \"object\")\n message.ingestTimeNs = new $util.LongBits(object.ingestTimeNs.low >>> 0, object.ingestTimeNs.high >>> 0).toNumber();\n if (object.senderExternalUserId != null)\n message.senderExternalUserId = String(object.senderExternalUserId);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkDataMessagePayload message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkDataMessagePayload\n * @static\n * @param {SdkDataMessagePayload} message SdkDataMessagePayload\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkDataMessagePayload.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.topic = \"\";\n if (options.bytes === String)\n object.data = \"\";\n else {\n object.data = [];\n if (options.bytes !== Array)\n object.data = $util.newBuffer(object.data);\n }\n object.lifetimeMs = 0;\n object.senderAttendeeId = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.ingestTimeNs = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.ingestTimeNs = options.longs === String ? \"0\" : 0;\n object.senderExternalUserId = \"\";\n }\n if (message.topic != null && message.hasOwnProperty(\"topic\"))\n object.topic = message.topic;\n if (message.data != null && message.hasOwnProperty(\"data\"))\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\n if (message.lifetimeMs != null && message.hasOwnProperty(\"lifetimeMs\"))\n object.lifetimeMs = message.lifetimeMs;\n if (message.senderAttendeeId != null && message.hasOwnProperty(\"senderAttendeeId\"))\n object.senderAttendeeId = message.senderAttendeeId;\n if (message.ingestTimeNs != null && message.hasOwnProperty(\"ingestTimeNs\"))\n if (typeof message.ingestTimeNs === \"number\")\n object.ingestTimeNs = options.longs === String ? String(message.ingestTimeNs) : message.ingestTimeNs;\n else\n object.ingestTimeNs = options.longs === String ? $util.Long.prototype.toString.call(message.ingestTimeNs) : options.longs === Number ? new $util.LongBits(message.ingestTimeNs.low >>> 0, message.ingestTimeNs.high >>> 0).toNumber() : message.ingestTimeNs;\n if (message.senderExternalUserId != null && message.hasOwnProperty(\"senderExternalUserId\"))\n object.senderExternalUserId = message.senderExternalUserId;\n return object;\n };\n\n /**\n * Converts this SdkDataMessagePayload to JSON.\n * @function toJSON\n * @memberof SdkDataMessagePayload\n * @instance\n * @returns {Object.} JSON object\n */\n SdkDataMessagePayload.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkDataMessagePayload\n * @function getTypeUrl\n * @memberof SdkDataMessagePayload\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkDataMessagePayload.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkDataMessagePayload\";\n };\n\n return SdkDataMessagePayload;\n})();\n\n$root.SdkTurnCredentials = (function() {\n\n /**\n * Properties of a SdkTurnCredentials.\n * @name ISdkTurnCredentials\n * @interface ISdkTurnCredentials\n * @property {string|null} [username] SdkTurnCredentials username\n * @property {string|null} [password] SdkTurnCredentials password\n * @property {number|null} [ttl] SdkTurnCredentials ttl\n * @property {Array.|null} [uris] SdkTurnCredentials uris\n */\n\n /**\n * Constructs a new SdkTurnCredentials.\n * @name SdkTurnCredentials\n * @classdesc Represents a SdkTurnCredentials.\n * @implements ISdkTurnCredentials\n * @constructor\n * @param {ISdkTurnCredentials=} [properties] Properties to set\n */\n function SdkTurnCredentials(properties) {\n this.uris = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTurnCredentials username.\n * @member {string} username\n * @memberof SdkTurnCredentials\n * @instance\n */\n SdkTurnCredentials.prototype.username = \"\";\n\n /**\n * SdkTurnCredentials password.\n * @member {string} password\n * @memberof SdkTurnCredentials\n * @instance\n */\n SdkTurnCredentials.prototype.password = \"\";\n\n /**\n * SdkTurnCredentials ttl.\n * @member {number} ttl\n * @memberof SdkTurnCredentials\n * @instance\n */\n SdkTurnCredentials.prototype.ttl = 0;\n\n /**\n * SdkTurnCredentials uris.\n * @member {Array.} uris\n * @memberof SdkTurnCredentials\n * @instance\n */\n SdkTurnCredentials.prototype.uris = $util.emptyArray;\n\n /**\n * Creates a new SdkTurnCredentials instance using the specified properties.\n * @function create\n * @memberof SdkTurnCredentials\n * @static\n * @param {ISdkTurnCredentials=} [properties] Properties to set\n * @returns {SdkTurnCredentials} SdkTurnCredentials instance\n */\n SdkTurnCredentials.create = function create(properties) {\n return new SdkTurnCredentials(properties);\n };\n\n /**\n * Encodes the specified SdkTurnCredentials message. Does not implicitly {@link SdkTurnCredentials.verify|verify} messages.\n * @function encode\n * @memberof SdkTurnCredentials\n * @static\n * @param {ISdkTurnCredentials} message SdkTurnCredentials message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTurnCredentials.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.username != null && Object.hasOwnProperty.call(message, \"username\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.username);\n if (message.password != null && Object.hasOwnProperty.call(message, \"password\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.password);\n if (message.ttl != null && Object.hasOwnProperty.call(message, \"ttl\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.ttl);\n if (message.uris != null && message.uris.length)\n for (var i = 0; i < message.uris.length; ++i)\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.uris[i]);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTurnCredentials message, length delimited. Does not implicitly {@link SdkTurnCredentials.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTurnCredentials\n * @static\n * @param {ISdkTurnCredentials} message SdkTurnCredentials message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTurnCredentials.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTurnCredentials message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTurnCredentials\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTurnCredentials} SdkTurnCredentials\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTurnCredentials.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTurnCredentials();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.username = reader.string();\n break;\n }\n case 2: {\n message.password = reader.string();\n break;\n }\n case 3: {\n message.ttl = reader.uint32();\n break;\n }\n case 4: {\n if (!(message.uris && message.uris.length))\n message.uris = [];\n message.uris.push(reader.string());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTurnCredentials message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTurnCredentials\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTurnCredentials} SdkTurnCredentials\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTurnCredentials.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTurnCredentials message.\n * @function verify\n * @memberof SdkTurnCredentials\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTurnCredentials.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.username != null && message.hasOwnProperty(\"username\"))\n if (!$util.isString(message.username))\n return \"username: string expected\";\n if (message.password != null && message.hasOwnProperty(\"password\"))\n if (!$util.isString(message.password))\n return \"password: string expected\";\n if (message.ttl != null && message.hasOwnProperty(\"ttl\"))\n if (!$util.isInteger(message.ttl))\n return \"ttl: integer expected\";\n if (message.uris != null && message.hasOwnProperty(\"uris\")) {\n if (!Array.isArray(message.uris))\n return \"uris: array expected\";\n for (var i = 0; i < message.uris.length; ++i)\n if (!$util.isString(message.uris[i]))\n return \"uris: string[] expected\";\n }\n return null;\n };\n\n /**\n * Creates a SdkTurnCredentials message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTurnCredentials\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTurnCredentials} SdkTurnCredentials\n */\n SdkTurnCredentials.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTurnCredentials)\n return object;\n var message = new $root.SdkTurnCredentials();\n if (object.username != null)\n message.username = String(object.username);\n if (object.password != null)\n message.password = String(object.password);\n if (object.ttl != null)\n message.ttl = object.ttl >>> 0;\n if (object.uris) {\n if (!Array.isArray(object.uris))\n throw TypeError(\".SdkTurnCredentials.uris: array expected\");\n message.uris = [];\n for (var i = 0; i < object.uris.length; ++i)\n message.uris[i] = String(object.uris[i]);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTurnCredentials message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTurnCredentials\n * @static\n * @param {SdkTurnCredentials} message SdkTurnCredentials\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTurnCredentials.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.uris = [];\n if (options.defaults) {\n object.username = \"\";\n object.password = \"\";\n object.ttl = 0;\n }\n if (message.username != null && message.hasOwnProperty(\"username\"))\n object.username = message.username;\n if (message.password != null && message.hasOwnProperty(\"password\"))\n object.password = message.password;\n if (message.ttl != null && message.hasOwnProperty(\"ttl\"))\n object.ttl = message.ttl;\n if (message.uris && message.uris.length) {\n object.uris = [];\n for (var j = 0; j < message.uris.length; ++j)\n object.uris[j] = message.uris[j];\n }\n return object;\n };\n\n /**\n * Converts this SdkTurnCredentials to JSON.\n * @function toJSON\n * @memberof SdkTurnCredentials\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTurnCredentials.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTurnCredentials\n * @function getTypeUrl\n * @memberof SdkTurnCredentials\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTurnCredentials.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTurnCredentials\";\n };\n\n return SdkTurnCredentials;\n})();\n\n$root.SdkTranscriptItem = (function() {\n\n /**\n * Properties of a SdkTranscriptItem.\n * @name ISdkTranscriptItem\n * @interface ISdkTranscriptItem\n * @property {string|null} [content] SdkTranscriptItem content\n * @property {number|Long|null} [endTime] SdkTranscriptItem endTime\n * @property {string|null} [speakerAttendeeId] SdkTranscriptItem speakerAttendeeId\n * @property {string|null} [speakerExternalUserId] SdkTranscriptItem speakerExternalUserId\n * @property {number|Long|null} [startTime] SdkTranscriptItem startTime\n * @property {SdkTranscriptItem.Type|null} [type] SdkTranscriptItem type\n * @property {boolean|null} [vocabularyFilterMatch] SdkTranscriptItem vocabularyFilterMatch\n * @property {number|null} [confidence] SdkTranscriptItem confidence\n * @property {boolean|null} [stable] SdkTranscriptItem stable\n */\n\n /**\n * Constructs a new SdkTranscriptItem.\n * @name SdkTranscriptItem\n * @classdesc Represents a SdkTranscriptItem.\n * @implements ISdkTranscriptItem\n * @constructor\n * @param {ISdkTranscriptItem=} [properties] Properties to set\n */\n function SdkTranscriptItem(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptItem content.\n * @member {string} content\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.content = \"\";\n\n /**\n * SdkTranscriptItem endTime.\n * @member {number|Long} endTime\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptItem speakerAttendeeId.\n * @member {string} speakerAttendeeId\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.speakerAttendeeId = \"\";\n\n /**\n * SdkTranscriptItem speakerExternalUserId.\n * @member {string} speakerExternalUserId\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.speakerExternalUserId = \"\";\n\n /**\n * SdkTranscriptItem startTime.\n * @member {number|Long} startTime\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptItem type.\n * @member {SdkTranscriptItem.Type} type\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.type = 1;\n\n /**\n * SdkTranscriptItem vocabularyFilterMatch.\n * @member {boolean} vocabularyFilterMatch\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.vocabularyFilterMatch = false;\n\n /**\n * SdkTranscriptItem confidence.\n * @member {number} confidence\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.confidence = 0;\n\n /**\n * SdkTranscriptItem stable.\n * @member {boolean} stable\n * @memberof SdkTranscriptItem\n * @instance\n */\n SdkTranscriptItem.prototype.stable = false;\n\n /**\n * Creates a new SdkTranscriptItem instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptItem\n * @static\n * @param {ISdkTranscriptItem=} [properties] Properties to set\n * @returns {SdkTranscriptItem} SdkTranscriptItem instance\n */\n SdkTranscriptItem.create = function create(properties) {\n return new SdkTranscriptItem(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptItem message. Does not implicitly {@link SdkTranscriptItem.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptItem\n * @static\n * @param {ISdkTranscriptItem} message SdkTranscriptItem message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptItem.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.content != null && Object.hasOwnProperty.call(message, \"content\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.content);\n if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int64(message.endTime);\n if (message.speakerAttendeeId != null && Object.hasOwnProperty.call(message, \"speakerAttendeeId\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.speakerAttendeeId);\n if (message.speakerExternalUserId != null && Object.hasOwnProperty.call(message, \"speakerExternalUserId\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.speakerExternalUserId);\n if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n writer.uint32(/* id 5, wireType 0 =*/40).int64(message.startTime);\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 6, wireType 0 =*/48).int32(message.type);\n if (message.vocabularyFilterMatch != null && Object.hasOwnProperty.call(message, \"vocabularyFilterMatch\"))\n writer.uint32(/* id 7, wireType 0 =*/56).bool(message.vocabularyFilterMatch);\n if (message.confidence != null && Object.hasOwnProperty.call(message, \"confidence\"))\n writer.uint32(/* id 8, wireType 1 =*/65).double(message.confidence);\n if (message.stable != null && Object.hasOwnProperty.call(message, \"stable\"))\n writer.uint32(/* id 9, wireType 0 =*/72).bool(message.stable);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptItem message, length delimited. Does not implicitly {@link SdkTranscriptItem.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptItem\n * @static\n * @param {ISdkTranscriptItem} message SdkTranscriptItem message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptItem.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptItem message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptItem\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptItem} SdkTranscriptItem\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptItem.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptItem();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.content = reader.string();\n break;\n }\n case 2: {\n message.endTime = reader.int64();\n break;\n }\n case 3: {\n message.speakerAttendeeId = reader.string();\n break;\n }\n case 4: {\n message.speakerExternalUserId = reader.string();\n break;\n }\n case 5: {\n message.startTime = reader.int64();\n break;\n }\n case 6: {\n message.type = reader.int32();\n break;\n }\n case 7: {\n message.vocabularyFilterMatch = reader.bool();\n break;\n }\n case 8: {\n message.confidence = reader.double();\n break;\n }\n case 9: {\n message.stable = reader.bool();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptItem message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptItem\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptItem} SdkTranscriptItem\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptItem.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptItem message.\n * @function verify\n * @memberof SdkTranscriptItem\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptItem.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.content != null && message.hasOwnProperty(\"content\"))\n if (!$util.isString(message.content))\n return \"content: string expected\";\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n return \"endTime: integer|Long expected\";\n if (message.speakerAttendeeId != null && message.hasOwnProperty(\"speakerAttendeeId\"))\n if (!$util.isString(message.speakerAttendeeId))\n return \"speakerAttendeeId: string expected\";\n if (message.speakerExternalUserId != null && message.hasOwnProperty(\"speakerExternalUserId\"))\n if (!$util.isString(message.speakerExternalUserId))\n return \"speakerExternalUserId: string expected\";\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n return \"startTime: integer|Long expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n break;\n }\n if (message.vocabularyFilterMatch != null && message.hasOwnProperty(\"vocabularyFilterMatch\"))\n if (typeof message.vocabularyFilterMatch !== \"boolean\")\n return \"vocabularyFilterMatch: boolean expected\";\n if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n if (typeof message.confidence !== \"number\")\n return \"confidence: number expected\";\n if (message.stable != null && message.hasOwnProperty(\"stable\"))\n if (typeof message.stable !== \"boolean\")\n return \"stable: boolean expected\";\n return null;\n };\n\n /**\n * Creates a SdkTranscriptItem message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptItem\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptItem} SdkTranscriptItem\n */\n SdkTranscriptItem.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptItem)\n return object;\n var message = new $root.SdkTranscriptItem();\n if (object.content != null)\n message.content = String(object.content);\n if (object.endTime != null)\n if ($util.Long)\n (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n else if (typeof object.endTime === \"string\")\n message.endTime = parseInt(object.endTime, 10);\n else if (typeof object.endTime === \"number\")\n message.endTime = object.endTime;\n else if (typeof object.endTime === \"object\")\n message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n if (object.speakerAttendeeId != null)\n message.speakerAttendeeId = String(object.speakerAttendeeId);\n if (object.speakerExternalUserId != null)\n message.speakerExternalUserId = String(object.speakerExternalUserId);\n if (object.startTime != null)\n if ($util.Long)\n (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n else if (typeof object.startTime === \"string\")\n message.startTime = parseInt(object.startTime, 10);\n else if (typeof object.startTime === \"number\")\n message.startTime = object.startTime;\n else if (typeof object.startTime === \"object\")\n message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"PRONUNCIATION\":\n case 1:\n message.type = 1;\n break;\n case \"PUNCTUATION\":\n case 2:\n message.type = 2;\n break;\n }\n if (object.vocabularyFilterMatch != null)\n message.vocabularyFilterMatch = Boolean(object.vocabularyFilterMatch);\n if (object.confidence != null)\n message.confidence = Number(object.confidence);\n if (object.stable != null)\n message.stable = Boolean(object.stable);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptItem message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptItem\n * @static\n * @param {SdkTranscriptItem} message SdkTranscriptItem\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptItem.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.content = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.endTime = options.longs === String ? \"0\" : 0;\n object.speakerAttendeeId = \"\";\n object.speakerExternalUserId = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.startTime = options.longs === String ? \"0\" : 0;\n object.type = options.enums === String ? \"PRONUNCIATION\" : 1;\n object.vocabularyFilterMatch = false;\n object.confidence = 0;\n object.stable = false;\n }\n if (message.content != null && message.hasOwnProperty(\"content\"))\n object.content = message.content;\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (typeof message.endTime === \"number\")\n object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n else\n object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n if (message.speakerAttendeeId != null && message.hasOwnProperty(\"speakerAttendeeId\"))\n object.speakerAttendeeId = message.speakerAttendeeId;\n if (message.speakerExternalUserId != null && message.hasOwnProperty(\"speakerExternalUserId\"))\n object.speakerExternalUserId = message.speakerExternalUserId;\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (typeof message.startTime === \"number\")\n object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n else\n object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkTranscriptItem.Type[message.type] === undefined ? message.type : $root.SdkTranscriptItem.Type[message.type] : message.type;\n if (message.vocabularyFilterMatch != null && message.hasOwnProperty(\"vocabularyFilterMatch\"))\n object.vocabularyFilterMatch = message.vocabularyFilterMatch;\n if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n object.confidence = options.json && !isFinite(message.confidence) ? String(message.confidence) : message.confidence;\n if (message.stable != null && message.hasOwnProperty(\"stable\"))\n object.stable = message.stable;\n return object;\n };\n\n /**\n * Converts this SdkTranscriptItem to JSON.\n * @function toJSON\n * @memberof SdkTranscriptItem\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptItem.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptItem\n * @function getTypeUrl\n * @memberof SdkTranscriptItem\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptItem.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptItem\";\n };\n\n /**\n * Type enum.\n * @name SdkTranscriptItem.Type\n * @enum {number}\n * @property {number} PRONUNCIATION=1 PRONUNCIATION value\n * @property {number} PUNCTUATION=2 PUNCTUATION value\n */\n SdkTranscriptItem.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"PRONUNCIATION\"] = 1;\n values[valuesById[2] = \"PUNCTUATION\"] = 2;\n return values;\n })();\n\n return SdkTranscriptItem;\n})();\n\n$root.SdkTranscriptEntity = (function() {\n\n /**\n * Properties of a SdkTranscriptEntity.\n * @name ISdkTranscriptEntity\n * @interface ISdkTranscriptEntity\n * @property {string|null} [category] SdkTranscriptEntity category\n * @property {number|null} [confidence] SdkTranscriptEntity confidence\n * @property {string|null} [content] SdkTranscriptEntity content\n * @property {number|Long|null} [endTime] SdkTranscriptEntity endTime\n * @property {number|Long|null} [startTime] SdkTranscriptEntity startTime\n * @property {string|null} [type] SdkTranscriptEntity type\n */\n\n /**\n * Constructs a new SdkTranscriptEntity.\n * @name SdkTranscriptEntity\n * @classdesc Represents a SdkTranscriptEntity.\n * @implements ISdkTranscriptEntity\n * @constructor\n * @param {ISdkTranscriptEntity=} [properties] Properties to set\n */\n function SdkTranscriptEntity(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptEntity category.\n * @member {string} category\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.category = \"\";\n\n /**\n * SdkTranscriptEntity confidence.\n * @member {number} confidence\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.confidence = 0;\n\n /**\n * SdkTranscriptEntity content.\n * @member {string} content\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.content = \"\";\n\n /**\n * SdkTranscriptEntity endTime.\n * @member {number|Long} endTime\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptEntity startTime.\n * @member {number|Long} startTime\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptEntity type.\n * @member {string} type\n * @memberof SdkTranscriptEntity\n * @instance\n */\n SdkTranscriptEntity.prototype.type = \"\";\n\n /**\n * Creates a new SdkTranscriptEntity instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptEntity\n * @static\n * @param {ISdkTranscriptEntity=} [properties] Properties to set\n * @returns {SdkTranscriptEntity} SdkTranscriptEntity instance\n */\n SdkTranscriptEntity.create = function create(properties) {\n return new SdkTranscriptEntity(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptEntity message. Does not implicitly {@link SdkTranscriptEntity.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptEntity\n * @static\n * @param {ISdkTranscriptEntity} message SdkTranscriptEntity message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptEntity.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.category != null && Object.hasOwnProperty.call(message, \"category\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.category);\n if (message.confidence != null && Object.hasOwnProperty.call(message, \"confidence\"))\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.confidence);\n if (message.content != null && Object.hasOwnProperty.call(message, \"content\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.content);\n if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n writer.uint32(/* id 4, wireType 0 =*/32).int64(message.endTime);\n if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n writer.uint32(/* id 5, wireType 0 =*/40).int64(message.startTime);\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 6, wireType 2 =*/50).string(message.type);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptEntity message, length delimited. Does not implicitly {@link SdkTranscriptEntity.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptEntity\n * @static\n * @param {ISdkTranscriptEntity} message SdkTranscriptEntity message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptEntity.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptEntity message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptEntity\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptEntity.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptEntity();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.category = reader.string();\n break;\n }\n case 2: {\n message.confidence = reader.double();\n break;\n }\n case 3: {\n message.content = reader.string();\n break;\n }\n case 4: {\n message.endTime = reader.int64();\n break;\n }\n case 5: {\n message.startTime = reader.int64();\n break;\n }\n case 6: {\n message.type = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptEntity message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptEntity\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptEntity.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptEntity message.\n * @function verify\n * @memberof SdkTranscriptEntity\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptEntity.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.category != null && message.hasOwnProperty(\"category\"))\n if (!$util.isString(message.category))\n return \"category: string expected\";\n if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n if (typeof message.confidence !== \"number\")\n return \"confidence: number expected\";\n if (message.content != null && message.hasOwnProperty(\"content\"))\n if (!$util.isString(message.content))\n return \"content: string expected\";\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n return \"endTime: integer|Long expected\";\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n return \"startTime: integer|Long expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n if (!$util.isString(message.type))\n return \"type: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkTranscriptEntity message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptEntity\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptEntity} SdkTranscriptEntity\n */\n SdkTranscriptEntity.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptEntity)\n return object;\n var message = new $root.SdkTranscriptEntity();\n if (object.category != null)\n message.category = String(object.category);\n if (object.confidence != null)\n message.confidence = Number(object.confidence);\n if (object.content != null)\n message.content = String(object.content);\n if (object.endTime != null)\n if ($util.Long)\n (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n else if (typeof object.endTime === \"string\")\n message.endTime = parseInt(object.endTime, 10);\n else if (typeof object.endTime === \"number\")\n message.endTime = object.endTime;\n else if (typeof object.endTime === \"object\")\n message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n if (object.startTime != null)\n if ($util.Long)\n (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n else if (typeof object.startTime === \"string\")\n message.startTime = parseInt(object.startTime, 10);\n else if (typeof object.startTime === \"number\")\n message.startTime = object.startTime;\n else if (typeof object.startTime === \"object\")\n message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n if (object.type != null)\n message.type = String(object.type);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptEntity message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptEntity\n * @static\n * @param {SdkTranscriptEntity} message SdkTranscriptEntity\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptEntity.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.category = \"\";\n object.confidence = 0;\n object.content = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.endTime = options.longs === String ? \"0\" : 0;\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.startTime = options.longs === String ? \"0\" : 0;\n object.type = \"\";\n }\n if (message.category != null && message.hasOwnProperty(\"category\"))\n object.category = message.category;\n if (message.confidence != null && message.hasOwnProperty(\"confidence\"))\n object.confidence = options.json && !isFinite(message.confidence) ? String(message.confidence) : message.confidence;\n if (message.content != null && message.hasOwnProperty(\"content\"))\n object.content = message.content;\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (typeof message.endTime === \"number\")\n object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n else\n object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (typeof message.startTime === \"number\")\n object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n else\n object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = message.type;\n return object;\n };\n\n /**\n * Converts this SdkTranscriptEntity to JSON.\n * @function toJSON\n * @memberof SdkTranscriptEntity\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptEntity.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptEntity\n * @function getTypeUrl\n * @memberof SdkTranscriptEntity\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptEntity.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptEntity\";\n };\n\n return SdkTranscriptEntity;\n})();\n\n$root.SdkTranscriptAlternative = (function() {\n\n /**\n * Properties of a SdkTranscriptAlternative.\n * @name ISdkTranscriptAlternative\n * @interface ISdkTranscriptAlternative\n * @property {Array.|null} [items] SdkTranscriptAlternative items\n * @property {string|null} [transcript] SdkTranscriptAlternative transcript\n * @property {Array.|null} [entities] SdkTranscriptAlternative entities\n */\n\n /**\n * Constructs a new SdkTranscriptAlternative.\n * @name SdkTranscriptAlternative\n * @classdesc Represents a SdkTranscriptAlternative.\n * @implements ISdkTranscriptAlternative\n * @constructor\n * @param {ISdkTranscriptAlternative=} [properties] Properties to set\n */\n function SdkTranscriptAlternative(properties) {\n this.items = [];\n this.entities = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptAlternative items.\n * @member {Array.} items\n * @memberof SdkTranscriptAlternative\n * @instance\n */\n SdkTranscriptAlternative.prototype.items = $util.emptyArray;\n\n /**\n * SdkTranscriptAlternative transcript.\n * @member {string} transcript\n * @memberof SdkTranscriptAlternative\n * @instance\n */\n SdkTranscriptAlternative.prototype.transcript = \"\";\n\n /**\n * SdkTranscriptAlternative entities.\n * @member {Array.} entities\n * @memberof SdkTranscriptAlternative\n * @instance\n */\n SdkTranscriptAlternative.prototype.entities = $util.emptyArray;\n\n /**\n * Creates a new SdkTranscriptAlternative instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {ISdkTranscriptAlternative=} [properties] Properties to set\n * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative instance\n */\n SdkTranscriptAlternative.create = function create(properties) {\n return new SdkTranscriptAlternative(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptAlternative message. Does not implicitly {@link SdkTranscriptAlternative.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {ISdkTranscriptAlternative} message SdkTranscriptAlternative message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptAlternative.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.items != null && message.items.length)\n for (var i = 0; i < message.items.length; ++i)\n $root.SdkTranscriptItem.encode(message.items[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.transcript != null && Object.hasOwnProperty.call(message, \"transcript\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.transcript);\n if (message.entities != null && message.entities.length)\n for (var i = 0; i < message.entities.length; ++i)\n $root.SdkTranscriptEntity.encode(message.entities[i], writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptAlternative message, length delimited. Does not implicitly {@link SdkTranscriptAlternative.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {ISdkTranscriptAlternative} message SdkTranscriptAlternative message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptAlternative.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptAlternative message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptAlternative.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptAlternative();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.items && message.items.length))\n message.items = [];\n message.items.push($root.SdkTranscriptItem.decode(reader, reader.uint32()));\n break;\n }\n case 2: {\n message.transcript = reader.string();\n break;\n }\n case 3: {\n if (!(message.entities && message.entities.length))\n message.entities = [];\n message.entities.push($root.SdkTranscriptEntity.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptAlternative message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptAlternative.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptAlternative message.\n * @function verify\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptAlternative.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.items != null && message.hasOwnProperty(\"items\")) {\n if (!Array.isArray(message.items))\n return \"items: array expected\";\n for (var i = 0; i < message.items.length; ++i) {\n var error = $root.SdkTranscriptItem.verify(message.items[i]);\n if (error)\n return \"items.\" + error;\n }\n }\n if (message.transcript != null && message.hasOwnProperty(\"transcript\"))\n if (!$util.isString(message.transcript))\n return \"transcript: string expected\";\n if (message.entities != null && message.hasOwnProperty(\"entities\")) {\n if (!Array.isArray(message.entities))\n return \"entities: array expected\";\n for (var i = 0; i < message.entities.length; ++i) {\n var error = $root.SdkTranscriptEntity.verify(message.entities[i]);\n if (error)\n return \"entities.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkTranscriptAlternative message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptAlternative} SdkTranscriptAlternative\n */\n SdkTranscriptAlternative.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptAlternative)\n return object;\n var message = new $root.SdkTranscriptAlternative();\n if (object.items) {\n if (!Array.isArray(object.items))\n throw TypeError(\".SdkTranscriptAlternative.items: array expected\");\n message.items = [];\n for (var i = 0; i < object.items.length; ++i) {\n if (typeof object.items[i] !== \"object\")\n throw TypeError(\".SdkTranscriptAlternative.items: object expected\");\n message.items[i] = $root.SdkTranscriptItem.fromObject(object.items[i]);\n }\n }\n if (object.transcript != null)\n message.transcript = String(object.transcript);\n if (object.entities) {\n if (!Array.isArray(object.entities))\n throw TypeError(\".SdkTranscriptAlternative.entities: array expected\");\n message.entities = [];\n for (var i = 0; i < object.entities.length; ++i) {\n if (typeof object.entities[i] !== \"object\")\n throw TypeError(\".SdkTranscriptAlternative.entities: object expected\");\n message.entities[i] = $root.SdkTranscriptEntity.fromObject(object.entities[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptAlternative message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {SdkTranscriptAlternative} message SdkTranscriptAlternative\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptAlternative.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.items = [];\n object.entities = [];\n }\n if (options.defaults)\n object.transcript = \"\";\n if (message.items && message.items.length) {\n object.items = [];\n for (var j = 0; j < message.items.length; ++j)\n object.items[j] = $root.SdkTranscriptItem.toObject(message.items[j], options);\n }\n if (message.transcript != null && message.hasOwnProperty(\"transcript\"))\n object.transcript = message.transcript;\n if (message.entities && message.entities.length) {\n object.entities = [];\n for (var j = 0; j < message.entities.length; ++j)\n object.entities[j] = $root.SdkTranscriptEntity.toObject(message.entities[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkTranscriptAlternative to JSON.\n * @function toJSON\n * @memberof SdkTranscriptAlternative\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptAlternative.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptAlternative\n * @function getTypeUrl\n * @memberof SdkTranscriptAlternative\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptAlternative.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptAlternative\";\n };\n\n return SdkTranscriptAlternative;\n})();\n\n$root.SdkTranscriptLanguageWithScore = (function() {\n\n /**\n * Properties of a SdkTranscriptLanguageWithScore.\n * @name ISdkTranscriptLanguageWithScore\n * @interface ISdkTranscriptLanguageWithScore\n * @property {string|null} [languageCode] SdkTranscriptLanguageWithScore languageCode\n * @property {number|null} [score] SdkTranscriptLanguageWithScore score\n */\n\n /**\n * Constructs a new SdkTranscriptLanguageWithScore.\n * @name SdkTranscriptLanguageWithScore\n * @classdesc Represents a SdkTranscriptLanguageWithScore.\n * @implements ISdkTranscriptLanguageWithScore\n * @constructor\n * @param {ISdkTranscriptLanguageWithScore=} [properties] Properties to set\n */\n function SdkTranscriptLanguageWithScore(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptLanguageWithScore languageCode.\n * @member {string} languageCode\n * @memberof SdkTranscriptLanguageWithScore\n * @instance\n */\n SdkTranscriptLanguageWithScore.prototype.languageCode = \"\";\n\n /**\n * SdkTranscriptLanguageWithScore score.\n * @member {number} score\n * @memberof SdkTranscriptLanguageWithScore\n * @instance\n */\n SdkTranscriptLanguageWithScore.prototype.score = 0;\n\n /**\n * Creates a new SdkTranscriptLanguageWithScore instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {ISdkTranscriptLanguageWithScore=} [properties] Properties to set\n * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore instance\n */\n SdkTranscriptLanguageWithScore.create = function create(properties) {\n return new SdkTranscriptLanguageWithScore(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptLanguageWithScore message. Does not implicitly {@link SdkTranscriptLanguageWithScore.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {ISdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptLanguageWithScore.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.languageCode != null && Object.hasOwnProperty.call(message, \"languageCode\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.languageCode);\n if (message.score != null && Object.hasOwnProperty.call(message, \"score\"))\n writer.uint32(/* id 2, wireType 1 =*/17).double(message.score);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptLanguageWithScore message, length delimited. Does not implicitly {@link SdkTranscriptLanguageWithScore.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {ISdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptLanguageWithScore.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptLanguageWithScore message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptLanguageWithScore.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptLanguageWithScore();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.languageCode = reader.string();\n break;\n }\n case 2: {\n message.score = reader.double();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptLanguageWithScore message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptLanguageWithScore.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptLanguageWithScore message.\n * @function verify\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptLanguageWithScore.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n if (!$util.isString(message.languageCode))\n return \"languageCode: string expected\";\n if (message.score != null && message.hasOwnProperty(\"score\"))\n if (typeof message.score !== \"number\")\n return \"score: number expected\";\n return null;\n };\n\n /**\n * Creates a SdkTranscriptLanguageWithScore message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptLanguageWithScore} SdkTranscriptLanguageWithScore\n */\n SdkTranscriptLanguageWithScore.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptLanguageWithScore)\n return object;\n var message = new $root.SdkTranscriptLanguageWithScore();\n if (object.languageCode != null)\n message.languageCode = String(object.languageCode);\n if (object.score != null)\n message.score = Number(object.score);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptLanguageWithScore message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {SdkTranscriptLanguageWithScore} message SdkTranscriptLanguageWithScore\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptLanguageWithScore.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.languageCode = \"\";\n object.score = 0;\n }\n if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n object.languageCode = message.languageCode;\n if (message.score != null && message.hasOwnProperty(\"score\"))\n object.score = options.json && !isFinite(message.score) ? String(message.score) : message.score;\n return object;\n };\n\n /**\n * Converts this SdkTranscriptLanguageWithScore to JSON.\n * @function toJSON\n * @memberof SdkTranscriptLanguageWithScore\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptLanguageWithScore.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptLanguageWithScore\n * @function getTypeUrl\n * @memberof SdkTranscriptLanguageWithScore\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptLanguageWithScore.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptLanguageWithScore\";\n };\n\n return SdkTranscriptLanguageWithScore;\n})();\n\n$root.SdkTranscriptResult = (function() {\n\n /**\n * Properties of a SdkTranscriptResult.\n * @name ISdkTranscriptResult\n * @interface ISdkTranscriptResult\n * @property {Array.|null} [alternatives] SdkTranscriptResult alternatives\n * @property {string|null} [channelId] SdkTranscriptResult channelId\n * @property {number|Long|null} [endTime] SdkTranscriptResult endTime\n * @property {boolean|null} [isPartial] SdkTranscriptResult isPartial\n * @property {string|null} [resultId] SdkTranscriptResult resultId\n * @property {number|Long|null} [startTime] SdkTranscriptResult startTime\n * @property {string|null} [languageCode] SdkTranscriptResult languageCode\n * @property {Array.|null} [languageIdentification] SdkTranscriptResult languageIdentification\n */\n\n /**\n * Constructs a new SdkTranscriptResult.\n * @name SdkTranscriptResult\n * @classdesc Represents a SdkTranscriptResult.\n * @implements ISdkTranscriptResult\n * @constructor\n * @param {ISdkTranscriptResult=} [properties] Properties to set\n */\n function SdkTranscriptResult(properties) {\n this.alternatives = [];\n this.languageIdentification = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptResult alternatives.\n * @member {Array.} alternatives\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.alternatives = $util.emptyArray;\n\n /**\n * SdkTranscriptResult channelId.\n * @member {string} channelId\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.channelId = \"\";\n\n /**\n * SdkTranscriptResult endTime.\n * @member {number|Long} endTime\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.endTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptResult isPartial.\n * @member {boolean} isPartial\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.isPartial = false;\n\n /**\n * SdkTranscriptResult resultId.\n * @member {string} resultId\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.resultId = \"\";\n\n /**\n * SdkTranscriptResult startTime.\n * @member {number|Long} startTime\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.startTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptResult languageCode.\n * @member {string} languageCode\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.languageCode = \"\";\n\n /**\n * SdkTranscriptResult languageIdentification.\n * @member {Array.} languageIdentification\n * @memberof SdkTranscriptResult\n * @instance\n */\n SdkTranscriptResult.prototype.languageIdentification = $util.emptyArray;\n\n /**\n * Creates a new SdkTranscriptResult instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptResult\n * @static\n * @param {ISdkTranscriptResult=} [properties] Properties to set\n * @returns {SdkTranscriptResult} SdkTranscriptResult instance\n */\n SdkTranscriptResult.create = function create(properties) {\n return new SdkTranscriptResult(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptResult message. Does not implicitly {@link SdkTranscriptResult.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptResult\n * @static\n * @param {ISdkTranscriptResult} message SdkTranscriptResult message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptResult.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.alternatives != null && message.alternatives.length)\n for (var i = 0; i < message.alternatives.length; ++i)\n $root.SdkTranscriptAlternative.encode(message.alternatives[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.channelId != null && Object.hasOwnProperty.call(message, \"channelId\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelId);\n if (message.endTime != null && Object.hasOwnProperty.call(message, \"endTime\"))\n writer.uint32(/* id 3, wireType 0 =*/24).int64(message.endTime);\n if (message.isPartial != null && Object.hasOwnProperty.call(message, \"isPartial\"))\n writer.uint32(/* id 4, wireType 0 =*/32).bool(message.isPartial);\n if (message.resultId != null && Object.hasOwnProperty.call(message, \"resultId\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.resultId);\n if (message.startTime != null && Object.hasOwnProperty.call(message, \"startTime\"))\n writer.uint32(/* id 6, wireType 0 =*/48).int64(message.startTime);\n if (message.languageCode != null && Object.hasOwnProperty.call(message, \"languageCode\"))\n writer.uint32(/* id 7, wireType 2 =*/58).string(message.languageCode);\n if (message.languageIdentification != null && message.languageIdentification.length)\n for (var i = 0; i < message.languageIdentification.length; ++i)\n $root.SdkTranscriptLanguageWithScore.encode(message.languageIdentification[i], writer.uint32(/* id 8, wireType 2 =*/66).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptResult message, length delimited. Does not implicitly {@link SdkTranscriptResult.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptResult\n * @static\n * @param {ISdkTranscriptResult} message SdkTranscriptResult message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptResult.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptResult message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptResult\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptResult} SdkTranscriptResult\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptResult.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptResult();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.alternatives && message.alternatives.length))\n message.alternatives = [];\n message.alternatives.push($root.SdkTranscriptAlternative.decode(reader, reader.uint32()));\n break;\n }\n case 2: {\n message.channelId = reader.string();\n break;\n }\n case 3: {\n message.endTime = reader.int64();\n break;\n }\n case 4: {\n message.isPartial = reader.bool();\n break;\n }\n case 5: {\n message.resultId = reader.string();\n break;\n }\n case 6: {\n message.startTime = reader.int64();\n break;\n }\n case 7: {\n message.languageCode = reader.string();\n break;\n }\n case 8: {\n if (!(message.languageIdentification && message.languageIdentification.length))\n message.languageIdentification = [];\n message.languageIdentification.push($root.SdkTranscriptLanguageWithScore.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptResult message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptResult\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptResult} SdkTranscriptResult\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptResult.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptResult message.\n * @function verify\n * @memberof SdkTranscriptResult\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptResult.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.alternatives != null && message.hasOwnProperty(\"alternatives\")) {\n if (!Array.isArray(message.alternatives))\n return \"alternatives: array expected\";\n for (var i = 0; i < message.alternatives.length; ++i) {\n var error = $root.SdkTranscriptAlternative.verify(message.alternatives[i]);\n if (error)\n return \"alternatives.\" + error;\n }\n }\n if (message.channelId != null && message.hasOwnProperty(\"channelId\"))\n if (!$util.isString(message.channelId))\n return \"channelId: string expected\";\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (!$util.isInteger(message.endTime) && !(message.endTime && $util.isInteger(message.endTime.low) && $util.isInteger(message.endTime.high)))\n return \"endTime: integer|Long expected\";\n if (message.isPartial != null && message.hasOwnProperty(\"isPartial\"))\n if (typeof message.isPartial !== \"boolean\")\n return \"isPartial: boolean expected\";\n if (message.resultId != null && message.hasOwnProperty(\"resultId\"))\n if (!$util.isString(message.resultId))\n return \"resultId: string expected\";\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (!$util.isInteger(message.startTime) && !(message.startTime && $util.isInteger(message.startTime.low) && $util.isInteger(message.startTime.high)))\n return \"startTime: integer|Long expected\";\n if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n if (!$util.isString(message.languageCode))\n return \"languageCode: string expected\";\n if (message.languageIdentification != null && message.hasOwnProperty(\"languageIdentification\")) {\n if (!Array.isArray(message.languageIdentification))\n return \"languageIdentification: array expected\";\n for (var i = 0; i < message.languageIdentification.length; ++i) {\n var error = $root.SdkTranscriptLanguageWithScore.verify(message.languageIdentification[i]);\n if (error)\n return \"languageIdentification.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkTranscriptResult message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptResult\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptResult} SdkTranscriptResult\n */\n SdkTranscriptResult.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptResult)\n return object;\n var message = new $root.SdkTranscriptResult();\n if (object.alternatives) {\n if (!Array.isArray(object.alternatives))\n throw TypeError(\".SdkTranscriptResult.alternatives: array expected\");\n message.alternatives = [];\n for (var i = 0; i < object.alternatives.length; ++i) {\n if (typeof object.alternatives[i] !== \"object\")\n throw TypeError(\".SdkTranscriptResult.alternatives: object expected\");\n message.alternatives[i] = $root.SdkTranscriptAlternative.fromObject(object.alternatives[i]);\n }\n }\n if (object.channelId != null)\n message.channelId = String(object.channelId);\n if (object.endTime != null)\n if ($util.Long)\n (message.endTime = $util.Long.fromValue(object.endTime)).unsigned = false;\n else if (typeof object.endTime === \"string\")\n message.endTime = parseInt(object.endTime, 10);\n else if (typeof object.endTime === \"number\")\n message.endTime = object.endTime;\n else if (typeof object.endTime === \"object\")\n message.endTime = new $util.LongBits(object.endTime.low >>> 0, object.endTime.high >>> 0).toNumber();\n if (object.isPartial != null)\n message.isPartial = Boolean(object.isPartial);\n if (object.resultId != null)\n message.resultId = String(object.resultId);\n if (object.startTime != null)\n if ($util.Long)\n (message.startTime = $util.Long.fromValue(object.startTime)).unsigned = false;\n else if (typeof object.startTime === \"string\")\n message.startTime = parseInt(object.startTime, 10);\n else if (typeof object.startTime === \"number\")\n message.startTime = object.startTime;\n else if (typeof object.startTime === \"object\")\n message.startTime = new $util.LongBits(object.startTime.low >>> 0, object.startTime.high >>> 0).toNumber();\n if (object.languageCode != null)\n message.languageCode = String(object.languageCode);\n if (object.languageIdentification) {\n if (!Array.isArray(object.languageIdentification))\n throw TypeError(\".SdkTranscriptResult.languageIdentification: array expected\");\n message.languageIdentification = [];\n for (var i = 0; i < object.languageIdentification.length; ++i) {\n if (typeof object.languageIdentification[i] !== \"object\")\n throw TypeError(\".SdkTranscriptResult.languageIdentification: object expected\");\n message.languageIdentification[i] = $root.SdkTranscriptLanguageWithScore.fromObject(object.languageIdentification[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptResult message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptResult\n * @static\n * @param {SdkTranscriptResult} message SdkTranscriptResult\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptResult.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.alternatives = [];\n object.languageIdentification = [];\n }\n if (options.defaults) {\n object.channelId = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.endTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.endTime = options.longs === String ? \"0\" : 0;\n object.isPartial = false;\n object.resultId = \"\";\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.startTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.startTime = options.longs === String ? \"0\" : 0;\n object.languageCode = \"\";\n }\n if (message.alternatives && message.alternatives.length) {\n object.alternatives = [];\n for (var j = 0; j < message.alternatives.length; ++j)\n object.alternatives[j] = $root.SdkTranscriptAlternative.toObject(message.alternatives[j], options);\n }\n if (message.channelId != null && message.hasOwnProperty(\"channelId\"))\n object.channelId = message.channelId;\n if (message.endTime != null && message.hasOwnProperty(\"endTime\"))\n if (typeof message.endTime === \"number\")\n object.endTime = options.longs === String ? String(message.endTime) : message.endTime;\n else\n object.endTime = options.longs === String ? $util.Long.prototype.toString.call(message.endTime) : options.longs === Number ? new $util.LongBits(message.endTime.low >>> 0, message.endTime.high >>> 0).toNumber() : message.endTime;\n if (message.isPartial != null && message.hasOwnProperty(\"isPartial\"))\n object.isPartial = message.isPartial;\n if (message.resultId != null && message.hasOwnProperty(\"resultId\"))\n object.resultId = message.resultId;\n if (message.startTime != null && message.hasOwnProperty(\"startTime\"))\n if (typeof message.startTime === \"number\")\n object.startTime = options.longs === String ? String(message.startTime) : message.startTime;\n else\n object.startTime = options.longs === String ? $util.Long.prototype.toString.call(message.startTime) : options.longs === Number ? new $util.LongBits(message.startTime.low >>> 0, message.startTime.high >>> 0).toNumber() : message.startTime;\n if (message.languageCode != null && message.hasOwnProperty(\"languageCode\"))\n object.languageCode = message.languageCode;\n if (message.languageIdentification && message.languageIdentification.length) {\n object.languageIdentification = [];\n for (var j = 0; j < message.languageIdentification.length; ++j)\n object.languageIdentification[j] = $root.SdkTranscriptLanguageWithScore.toObject(message.languageIdentification[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkTranscriptResult to JSON.\n * @function toJSON\n * @memberof SdkTranscriptResult\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptResult.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptResult\n * @function getTypeUrl\n * @memberof SdkTranscriptResult\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptResult.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptResult\";\n };\n\n return SdkTranscriptResult;\n})();\n\n$root.SdkTranscript = (function() {\n\n /**\n * Properties of a SdkTranscript.\n * @name ISdkTranscript\n * @interface ISdkTranscript\n * @property {Array.|null} [results] SdkTranscript results\n */\n\n /**\n * Constructs a new SdkTranscript.\n * @name SdkTranscript\n * @classdesc Represents a SdkTranscript.\n * @implements ISdkTranscript\n * @constructor\n * @param {ISdkTranscript=} [properties] Properties to set\n */\n function SdkTranscript(properties) {\n this.results = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscript results.\n * @member {Array.} results\n * @memberof SdkTranscript\n * @instance\n */\n SdkTranscript.prototype.results = $util.emptyArray;\n\n /**\n * Creates a new SdkTranscript instance using the specified properties.\n * @function create\n * @memberof SdkTranscript\n * @static\n * @param {ISdkTranscript=} [properties] Properties to set\n * @returns {SdkTranscript} SdkTranscript instance\n */\n SdkTranscript.create = function create(properties) {\n return new SdkTranscript(properties);\n };\n\n /**\n * Encodes the specified SdkTranscript message. Does not implicitly {@link SdkTranscript.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscript\n * @static\n * @param {ISdkTranscript} message SdkTranscript message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscript.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.results != null && message.results.length)\n for (var i = 0; i < message.results.length; ++i)\n $root.SdkTranscriptResult.encode(message.results[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscript message, length delimited. Does not implicitly {@link SdkTranscript.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscript\n * @static\n * @param {ISdkTranscript} message SdkTranscript message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscript.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscript message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscript\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscript} SdkTranscript\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscript.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscript();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.results && message.results.length))\n message.results = [];\n message.results.push($root.SdkTranscriptResult.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscript message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscript\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscript} SdkTranscript\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscript.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscript message.\n * @function verify\n * @memberof SdkTranscript\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscript.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.results != null && message.hasOwnProperty(\"results\")) {\n if (!Array.isArray(message.results))\n return \"results: array expected\";\n for (var i = 0; i < message.results.length; ++i) {\n var error = $root.SdkTranscriptResult.verify(message.results[i]);\n if (error)\n return \"results.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkTranscript message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscript\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscript} SdkTranscript\n */\n SdkTranscript.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscript)\n return object;\n var message = new $root.SdkTranscript();\n if (object.results) {\n if (!Array.isArray(object.results))\n throw TypeError(\".SdkTranscript.results: array expected\");\n message.results = [];\n for (var i = 0; i < object.results.length; ++i) {\n if (typeof object.results[i] !== \"object\")\n throw TypeError(\".SdkTranscript.results: object expected\");\n message.results[i] = $root.SdkTranscriptResult.fromObject(object.results[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscript message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscript\n * @static\n * @param {SdkTranscript} message SdkTranscript\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscript.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.results = [];\n if (message.results && message.results.length) {\n object.results = [];\n for (var j = 0; j < message.results.length; ++j)\n object.results[j] = $root.SdkTranscriptResult.toObject(message.results[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkTranscript to JSON.\n * @function toJSON\n * @memberof SdkTranscript\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscript.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscript\n * @function getTypeUrl\n * @memberof SdkTranscript\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscript.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscript\";\n };\n\n return SdkTranscript;\n})();\n\n$root.SdkTranscriptionStatus = (function() {\n\n /**\n * Properties of a SdkTranscriptionStatus.\n * @name ISdkTranscriptionStatus\n * @interface ISdkTranscriptionStatus\n * @property {SdkTranscriptionStatus.Type|null} [type] SdkTranscriptionStatus type\n * @property {number|Long|null} [eventTime] SdkTranscriptionStatus eventTime\n * @property {string|null} [transcriptionRegion] SdkTranscriptionStatus transcriptionRegion\n * @property {string|null} [transcriptionConfiguration] SdkTranscriptionStatus transcriptionConfiguration\n * @property {string|null} [message] SdkTranscriptionStatus message\n */\n\n /**\n * Constructs a new SdkTranscriptionStatus.\n * @name SdkTranscriptionStatus\n * @classdesc Represents a SdkTranscriptionStatus.\n * @implements ISdkTranscriptionStatus\n * @constructor\n * @param {ISdkTranscriptionStatus=} [properties] Properties to set\n */\n function SdkTranscriptionStatus(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptionStatus type.\n * @member {SdkTranscriptionStatus.Type} type\n * @memberof SdkTranscriptionStatus\n * @instance\n */\n SdkTranscriptionStatus.prototype.type = 1;\n\n /**\n * SdkTranscriptionStatus eventTime.\n * @member {number|Long} eventTime\n * @memberof SdkTranscriptionStatus\n * @instance\n */\n SdkTranscriptionStatus.prototype.eventTime = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n /**\n * SdkTranscriptionStatus transcriptionRegion.\n * @member {string} transcriptionRegion\n * @memberof SdkTranscriptionStatus\n * @instance\n */\n SdkTranscriptionStatus.prototype.transcriptionRegion = \"\";\n\n /**\n * SdkTranscriptionStatus transcriptionConfiguration.\n * @member {string} transcriptionConfiguration\n * @memberof SdkTranscriptionStatus\n * @instance\n */\n SdkTranscriptionStatus.prototype.transcriptionConfiguration = \"\";\n\n /**\n * SdkTranscriptionStatus message.\n * @member {string} message\n * @memberof SdkTranscriptionStatus\n * @instance\n */\n SdkTranscriptionStatus.prototype.message = \"\";\n\n /**\n * Creates a new SdkTranscriptionStatus instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {ISdkTranscriptionStatus=} [properties] Properties to set\n * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus instance\n */\n SdkTranscriptionStatus.create = function create(properties) {\n return new SdkTranscriptionStatus(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptionStatus message. Does not implicitly {@link SdkTranscriptionStatus.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {ISdkTranscriptionStatus} message SdkTranscriptionStatus message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptionStatus.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.type != null && Object.hasOwnProperty.call(message, \"type\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.type);\n if (message.eventTime != null && Object.hasOwnProperty.call(message, \"eventTime\"))\n writer.uint32(/* id 2, wireType 0 =*/16).int64(message.eventTime);\n if (message.transcriptionRegion != null && Object.hasOwnProperty.call(message, \"transcriptionRegion\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.transcriptionRegion);\n if (message.transcriptionConfiguration != null && Object.hasOwnProperty.call(message, \"transcriptionConfiguration\"))\n writer.uint32(/* id 4, wireType 2 =*/34).string(message.transcriptionConfiguration);\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\n writer.uint32(/* id 5, wireType 2 =*/42).string(message.message);\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptionStatus message, length delimited. Does not implicitly {@link SdkTranscriptionStatus.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {ISdkTranscriptionStatus} message SdkTranscriptionStatus message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptionStatus.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptionStatus message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptionStatus.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptionStatus();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.type = reader.int32();\n break;\n }\n case 2: {\n message.eventTime = reader.int64();\n break;\n }\n case 3: {\n message.transcriptionRegion = reader.string();\n break;\n }\n case 4: {\n message.transcriptionConfiguration = reader.string();\n break;\n }\n case 5: {\n message.message = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptionStatus message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptionStatus.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptionStatus message.\n * @function verify\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptionStatus.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.type != null && message.hasOwnProperty(\"type\"))\n switch (message.type) {\n default:\n return \"type: enum value expected\";\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n break;\n }\n if (message.eventTime != null && message.hasOwnProperty(\"eventTime\"))\n if (!$util.isInteger(message.eventTime) && !(message.eventTime && $util.isInteger(message.eventTime.low) && $util.isInteger(message.eventTime.high)))\n return \"eventTime: integer|Long expected\";\n if (message.transcriptionRegion != null && message.hasOwnProperty(\"transcriptionRegion\"))\n if (!$util.isString(message.transcriptionRegion))\n return \"transcriptionRegion: string expected\";\n if (message.transcriptionConfiguration != null && message.hasOwnProperty(\"transcriptionConfiguration\"))\n if (!$util.isString(message.transcriptionConfiguration))\n return \"transcriptionConfiguration: string expected\";\n if (message.message != null && message.hasOwnProperty(\"message\"))\n if (!$util.isString(message.message))\n return \"message: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkTranscriptionStatus message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptionStatus} SdkTranscriptionStatus\n */\n SdkTranscriptionStatus.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptionStatus)\n return object;\n var message = new $root.SdkTranscriptionStatus();\n switch (object.type) {\n default:\n if (typeof object.type === \"number\") {\n message.type = object.type;\n break;\n }\n break;\n case \"STARTED\":\n case 1:\n message.type = 1;\n break;\n case \"INTERRUPTED\":\n case 2:\n message.type = 2;\n break;\n case \"RESUMED\":\n case 3:\n message.type = 3;\n break;\n case \"STOPPED\":\n case 4:\n message.type = 4;\n break;\n case \"FAILED\":\n case 5:\n message.type = 5;\n break;\n }\n if (object.eventTime != null)\n if ($util.Long)\n (message.eventTime = $util.Long.fromValue(object.eventTime)).unsigned = false;\n else if (typeof object.eventTime === \"string\")\n message.eventTime = parseInt(object.eventTime, 10);\n else if (typeof object.eventTime === \"number\")\n message.eventTime = object.eventTime;\n else if (typeof object.eventTime === \"object\")\n message.eventTime = new $util.LongBits(object.eventTime.low >>> 0, object.eventTime.high >>> 0).toNumber();\n if (object.transcriptionRegion != null)\n message.transcriptionRegion = String(object.transcriptionRegion);\n if (object.transcriptionConfiguration != null)\n message.transcriptionConfiguration = String(object.transcriptionConfiguration);\n if (object.message != null)\n message.message = String(object.message);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptionStatus message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {SdkTranscriptionStatus} message SdkTranscriptionStatus\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptionStatus.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.type = options.enums === String ? \"STARTED\" : 1;\n if ($util.Long) {\n var long = new $util.Long(0, 0, false);\n object.eventTime = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long;\n } else\n object.eventTime = options.longs === String ? \"0\" : 0;\n object.transcriptionRegion = \"\";\n object.transcriptionConfiguration = \"\";\n object.message = \"\";\n }\n if (message.type != null && message.hasOwnProperty(\"type\"))\n object.type = options.enums === String ? $root.SdkTranscriptionStatus.Type[message.type] === undefined ? message.type : $root.SdkTranscriptionStatus.Type[message.type] : message.type;\n if (message.eventTime != null && message.hasOwnProperty(\"eventTime\"))\n if (typeof message.eventTime === \"number\")\n object.eventTime = options.longs === String ? String(message.eventTime) : message.eventTime;\n else\n object.eventTime = options.longs === String ? $util.Long.prototype.toString.call(message.eventTime) : options.longs === Number ? new $util.LongBits(message.eventTime.low >>> 0, message.eventTime.high >>> 0).toNumber() : message.eventTime;\n if (message.transcriptionRegion != null && message.hasOwnProperty(\"transcriptionRegion\"))\n object.transcriptionRegion = message.transcriptionRegion;\n if (message.transcriptionConfiguration != null && message.hasOwnProperty(\"transcriptionConfiguration\"))\n object.transcriptionConfiguration = message.transcriptionConfiguration;\n if (message.message != null && message.hasOwnProperty(\"message\"))\n object.message = message.message;\n return object;\n };\n\n /**\n * Converts this SdkTranscriptionStatus to JSON.\n * @function toJSON\n * @memberof SdkTranscriptionStatus\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptionStatus.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptionStatus\n * @function getTypeUrl\n * @memberof SdkTranscriptionStatus\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptionStatus.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptionStatus\";\n };\n\n /**\n * Type enum.\n * @name SdkTranscriptionStatus.Type\n * @enum {number}\n * @property {number} STARTED=1 STARTED value\n * @property {number} INTERRUPTED=2 INTERRUPTED value\n * @property {number} RESUMED=3 RESUMED value\n * @property {number} STOPPED=4 STOPPED value\n * @property {number} FAILED=5 FAILED value\n */\n SdkTranscriptionStatus.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"STARTED\"] = 1;\n values[valuesById[2] = \"INTERRUPTED\"] = 2;\n values[valuesById[3] = \"RESUMED\"] = 3;\n values[valuesById[4] = \"STOPPED\"] = 4;\n values[valuesById[5] = \"FAILED\"] = 5;\n return values;\n })();\n\n return SdkTranscriptionStatus;\n})();\n\n$root.SdkTranscriptEvent = (function() {\n\n /**\n * Properties of a SdkTranscriptEvent.\n * @name ISdkTranscriptEvent\n * @interface ISdkTranscriptEvent\n * @property {ISdkTranscriptionStatus|null} [status] SdkTranscriptEvent status\n * @property {ISdkTranscript|null} [transcript] SdkTranscriptEvent transcript\n */\n\n /**\n * Constructs a new SdkTranscriptEvent.\n * @name SdkTranscriptEvent\n * @classdesc Represents a SdkTranscriptEvent.\n * @implements ISdkTranscriptEvent\n * @constructor\n * @param {ISdkTranscriptEvent=} [properties] Properties to set\n */\n function SdkTranscriptEvent(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptEvent status.\n * @member {ISdkTranscriptionStatus|null|undefined} status\n * @memberof SdkTranscriptEvent\n * @instance\n */\n SdkTranscriptEvent.prototype.status = null;\n\n /**\n * SdkTranscriptEvent transcript.\n * @member {ISdkTranscript|null|undefined} transcript\n * @memberof SdkTranscriptEvent\n * @instance\n */\n SdkTranscriptEvent.prototype.transcript = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * SdkTranscriptEvent Event.\n * @member {\"status\"|\"transcript\"|undefined} Event\n * @memberof SdkTranscriptEvent\n * @instance\n */\n Object.defineProperty(SdkTranscriptEvent.prototype, \"Event\", {\n get: $util.oneOfGetter($oneOfFields = [\"status\", \"transcript\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Creates a new SdkTranscriptEvent instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptEvent\n * @static\n * @param {ISdkTranscriptEvent=} [properties] Properties to set\n * @returns {SdkTranscriptEvent} SdkTranscriptEvent instance\n */\n SdkTranscriptEvent.create = function create(properties) {\n return new SdkTranscriptEvent(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptEvent message. Does not implicitly {@link SdkTranscriptEvent.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptEvent\n * @static\n * @param {ISdkTranscriptEvent} message SdkTranscriptEvent message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptEvent.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.status != null && Object.hasOwnProperty.call(message, \"status\"))\n $root.SdkTranscriptionStatus.encode(message.status, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.transcript != null && Object.hasOwnProperty.call(message, \"transcript\"))\n $root.SdkTranscript.encode(message.transcript, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptEvent message, length delimited. Does not implicitly {@link SdkTranscriptEvent.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptEvent\n * @static\n * @param {ISdkTranscriptEvent} message SdkTranscriptEvent message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptEvent.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptEvent message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptEvent\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptEvent.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptEvent();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.status = $root.SdkTranscriptionStatus.decode(reader, reader.uint32());\n break;\n }\n case 2: {\n message.transcript = $root.SdkTranscript.decode(reader, reader.uint32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptEvent message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptEvent\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptEvent.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptEvent message.\n * @function verify\n * @memberof SdkTranscriptEvent\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptEvent.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n var properties = {};\n if (message.status != null && message.hasOwnProperty(\"status\")) {\n properties.Event = 1;\n {\n var error = $root.SdkTranscriptionStatus.verify(message.status);\n if (error)\n return \"status.\" + error;\n }\n }\n if (message.transcript != null && message.hasOwnProperty(\"transcript\")) {\n if (properties.Event === 1)\n return \"Event: multiple values\";\n properties.Event = 1;\n {\n var error = $root.SdkTranscript.verify(message.transcript);\n if (error)\n return \"transcript.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkTranscriptEvent message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptEvent\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptEvent} SdkTranscriptEvent\n */\n SdkTranscriptEvent.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptEvent)\n return object;\n var message = new $root.SdkTranscriptEvent();\n if (object.status != null) {\n if (typeof object.status !== \"object\")\n throw TypeError(\".SdkTranscriptEvent.status: object expected\");\n message.status = $root.SdkTranscriptionStatus.fromObject(object.status);\n }\n if (object.transcript != null) {\n if (typeof object.transcript !== \"object\")\n throw TypeError(\".SdkTranscriptEvent.transcript: object expected\");\n message.transcript = $root.SdkTranscript.fromObject(object.transcript);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptEvent message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptEvent\n * @static\n * @param {SdkTranscriptEvent} message SdkTranscriptEvent\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptEvent.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (message.status != null && message.hasOwnProperty(\"status\")) {\n object.status = $root.SdkTranscriptionStatus.toObject(message.status, options);\n if (options.oneofs)\n object.Event = \"status\";\n }\n if (message.transcript != null && message.hasOwnProperty(\"transcript\")) {\n object.transcript = $root.SdkTranscript.toObject(message.transcript, options);\n if (options.oneofs)\n object.Event = \"transcript\";\n }\n return object;\n };\n\n /**\n * Converts this SdkTranscriptEvent to JSON.\n * @function toJSON\n * @memberof SdkTranscriptEvent\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptEvent.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptEvent\n * @function getTypeUrl\n * @memberof SdkTranscriptEvent\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptEvent.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptEvent\";\n };\n\n return SdkTranscriptEvent;\n})();\n\n$root.SdkTranscriptFrame = (function() {\n\n /**\n * Properties of a SdkTranscriptFrame.\n * @name ISdkTranscriptFrame\n * @interface ISdkTranscriptFrame\n * @property {Array.|null} [events] SdkTranscriptFrame events\n */\n\n /**\n * Constructs a new SdkTranscriptFrame.\n * @name SdkTranscriptFrame\n * @classdesc Represents a SdkTranscriptFrame.\n * @implements ISdkTranscriptFrame\n * @constructor\n * @param {ISdkTranscriptFrame=} [properties] Properties to set\n */\n function SdkTranscriptFrame(properties) {\n this.events = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkTranscriptFrame events.\n * @member {Array.} events\n * @memberof SdkTranscriptFrame\n * @instance\n */\n SdkTranscriptFrame.prototype.events = $util.emptyArray;\n\n /**\n * Creates a new SdkTranscriptFrame instance using the specified properties.\n * @function create\n * @memberof SdkTranscriptFrame\n * @static\n * @param {ISdkTranscriptFrame=} [properties] Properties to set\n * @returns {SdkTranscriptFrame} SdkTranscriptFrame instance\n */\n SdkTranscriptFrame.create = function create(properties) {\n return new SdkTranscriptFrame(properties);\n };\n\n /**\n * Encodes the specified SdkTranscriptFrame message. Does not implicitly {@link SdkTranscriptFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkTranscriptFrame\n * @static\n * @param {ISdkTranscriptFrame} message SdkTranscriptFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.events != null && message.events.length)\n for (var i = 0; i < message.events.length; ++i)\n $root.SdkTranscriptEvent.encode(message.events[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkTranscriptFrame message, length delimited. Does not implicitly {@link SdkTranscriptFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkTranscriptFrame\n * @static\n * @param {ISdkTranscriptFrame} message SdkTranscriptFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkTranscriptFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkTranscriptFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkTranscriptFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkTranscriptFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.events && message.events.length))\n message.events = [];\n message.events.push($root.SdkTranscriptEvent.decode(reader, reader.uint32()));\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkTranscriptFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkTranscriptFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkTranscriptFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkTranscriptFrame message.\n * @function verify\n * @memberof SdkTranscriptFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkTranscriptFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.events != null && message.hasOwnProperty(\"events\")) {\n if (!Array.isArray(message.events))\n return \"events: array expected\";\n for (var i = 0; i < message.events.length; ++i) {\n var error = $root.SdkTranscriptEvent.verify(message.events[i]);\n if (error)\n return \"events.\" + error;\n }\n }\n return null;\n };\n\n /**\n * Creates a SdkTranscriptFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkTranscriptFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkTranscriptFrame} SdkTranscriptFrame\n */\n SdkTranscriptFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkTranscriptFrame)\n return object;\n var message = new $root.SdkTranscriptFrame();\n if (object.events) {\n if (!Array.isArray(object.events))\n throw TypeError(\".SdkTranscriptFrame.events: array expected\");\n message.events = [];\n for (var i = 0; i < object.events.length; ++i) {\n if (typeof object.events[i] !== \"object\")\n throw TypeError(\".SdkTranscriptFrame.events: object expected\");\n message.events[i] = $root.SdkTranscriptEvent.fromObject(object.events[i]);\n }\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkTranscriptFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkTranscriptFrame\n * @static\n * @param {SdkTranscriptFrame} message SdkTranscriptFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkTranscriptFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults)\n object.events = [];\n if (message.events && message.events.length) {\n object.events = [];\n for (var j = 0; j < message.events.length; ++j)\n object.events[j] = $root.SdkTranscriptEvent.toObject(message.events[j], options);\n }\n return object;\n };\n\n /**\n * Converts this SdkTranscriptFrame to JSON.\n * @function toJSON\n * @memberof SdkTranscriptFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkTranscriptFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkTranscriptFrame\n * @function getTypeUrl\n * @memberof SdkTranscriptFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkTranscriptFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkTranscriptFrame\";\n };\n\n return SdkTranscriptFrame;\n})();\n\n$root.SdkRemoteVideoUpdateFrame = (function() {\n\n /**\n * Properties of a SdkRemoteVideoUpdateFrame.\n * @name ISdkRemoteVideoUpdateFrame\n * @interface ISdkRemoteVideoUpdateFrame\n * @property {Array.|null} [addedOrUpdatedVideoSubscriptions] SdkRemoteVideoUpdateFrame addedOrUpdatedVideoSubscriptions\n * @property {Array.|null} [removedVideoSubscriptionMids] SdkRemoteVideoUpdateFrame removedVideoSubscriptionMids\n */\n\n /**\n * Constructs a new SdkRemoteVideoUpdateFrame.\n * @name SdkRemoteVideoUpdateFrame\n * @classdesc Represents a SdkRemoteVideoUpdateFrame.\n * @implements ISdkRemoteVideoUpdateFrame\n * @constructor\n * @param {ISdkRemoteVideoUpdateFrame=} [properties] Properties to set\n */\n function SdkRemoteVideoUpdateFrame(properties) {\n this.addedOrUpdatedVideoSubscriptions = [];\n this.removedVideoSubscriptionMids = [];\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkRemoteVideoUpdateFrame addedOrUpdatedVideoSubscriptions.\n * @member {Array.} addedOrUpdatedVideoSubscriptions\n * @memberof SdkRemoteVideoUpdateFrame\n * @instance\n */\n SdkRemoteVideoUpdateFrame.prototype.addedOrUpdatedVideoSubscriptions = $util.emptyArray;\n\n /**\n * SdkRemoteVideoUpdateFrame removedVideoSubscriptionMids.\n * @member {Array.} removedVideoSubscriptionMids\n * @memberof SdkRemoteVideoUpdateFrame\n * @instance\n */\n SdkRemoteVideoUpdateFrame.prototype.removedVideoSubscriptionMids = $util.emptyArray;\n\n /**\n * Creates a new SdkRemoteVideoUpdateFrame instance using the specified properties.\n * @function create\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {ISdkRemoteVideoUpdateFrame=} [properties] Properties to set\n * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame instance\n */\n SdkRemoteVideoUpdateFrame.create = function create(properties) {\n return new SdkRemoteVideoUpdateFrame(properties);\n };\n\n /**\n * Encodes the specified SdkRemoteVideoUpdateFrame message. Does not implicitly {@link SdkRemoteVideoUpdateFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {ISdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkRemoteVideoUpdateFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.addedOrUpdatedVideoSubscriptions != null && message.addedOrUpdatedVideoSubscriptions.length)\n for (var i = 0; i < message.addedOrUpdatedVideoSubscriptions.length; ++i)\n $root.SdkVideoSubscriptionConfiguration.encode(message.addedOrUpdatedVideoSubscriptions[i], writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n if (message.removedVideoSubscriptionMids != null && message.removedVideoSubscriptionMids.length)\n for (var i = 0; i < message.removedVideoSubscriptionMids.length; ++i)\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.removedVideoSubscriptionMids[i]);\n return writer;\n };\n\n /**\n * Encodes the specified SdkRemoteVideoUpdateFrame message, length delimited. Does not implicitly {@link SdkRemoteVideoUpdateFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {ISdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkRemoteVideoUpdateFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkRemoteVideoUpdateFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkRemoteVideoUpdateFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkRemoteVideoUpdateFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n if (!(message.addedOrUpdatedVideoSubscriptions && message.addedOrUpdatedVideoSubscriptions.length))\n message.addedOrUpdatedVideoSubscriptions = [];\n message.addedOrUpdatedVideoSubscriptions.push($root.SdkVideoSubscriptionConfiguration.decode(reader, reader.uint32()));\n break;\n }\n case 2: {\n if (!(message.removedVideoSubscriptionMids && message.removedVideoSubscriptionMids.length))\n message.removedVideoSubscriptionMids = [];\n message.removedVideoSubscriptionMids.push(reader.string());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkRemoteVideoUpdateFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkRemoteVideoUpdateFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkRemoteVideoUpdateFrame message.\n * @function verify\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkRemoteVideoUpdateFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.addedOrUpdatedVideoSubscriptions != null && message.hasOwnProperty(\"addedOrUpdatedVideoSubscriptions\")) {\n if (!Array.isArray(message.addedOrUpdatedVideoSubscriptions))\n return \"addedOrUpdatedVideoSubscriptions: array expected\";\n for (var i = 0; i < message.addedOrUpdatedVideoSubscriptions.length; ++i) {\n var error = $root.SdkVideoSubscriptionConfiguration.verify(message.addedOrUpdatedVideoSubscriptions[i]);\n if (error)\n return \"addedOrUpdatedVideoSubscriptions.\" + error;\n }\n }\n if (message.removedVideoSubscriptionMids != null && message.hasOwnProperty(\"removedVideoSubscriptionMids\")) {\n if (!Array.isArray(message.removedVideoSubscriptionMids))\n return \"removedVideoSubscriptionMids: array expected\";\n for (var i = 0; i < message.removedVideoSubscriptionMids.length; ++i)\n if (!$util.isString(message.removedVideoSubscriptionMids[i]))\n return \"removedVideoSubscriptionMids: string[] expected\";\n }\n return null;\n };\n\n /**\n * Creates a SdkRemoteVideoUpdateFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkRemoteVideoUpdateFrame} SdkRemoteVideoUpdateFrame\n */\n SdkRemoteVideoUpdateFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkRemoteVideoUpdateFrame)\n return object;\n var message = new $root.SdkRemoteVideoUpdateFrame();\n if (object.addedOrUpdatedVideoSubscriptions) {\n if (!Array.isArray(object.addedOrUpdatedVideoSubscriptions))\n throw TypeError(\".SdkRemoteVideoUpdateFrame.addedOrUpdatedVideoSubscriptions: array expected\");\n message.addedOrUpdatedVideoSubscriptions = [];\n for (var i = 0; i < object.addedOrUpdatedVideoSubscriptions.length; ++i) {\n if (typeof object.addedOrUpdatedVideoSubscriptions[i] !== \"object\")\n throw TypeError(\".SdkRemoteVideoUpdateFrame.addedOrUpdatedVideoSubscriptions: object expected\");\n message.addedOrUpdatedVideoSubscriptions[i] = $root.SdkVideoSubscriptionConfiguration.fromObject(object.addedOrUpdatedVideoSubscriptions[i]);\n }\n }\n if (object.removedVideoSubscriptionMids) {\n if (!Array.isArray(object.removedVideoSubscriptionMids))\n throw TypeError(\".SdkRemoteVideoUpdateFrame.removedVideoSubscriptionMids: array expected\");\n message.removedVideoSubscriptionMids = [];\n for (var i = 0; i < object.removedVideoSubscriptionMids.length; ++i)\n message.removedVideoSubscriptionMids[i] = String(object.removedVideoSubscriptionMids[i]);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkRemoteVideoUpdateFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {SdkRemoteVideoUpdateFrame} message SdkRemoteVideoUpdateFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkRemoteVideoUpdateFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.arrays || options.defaults) {\n object.addedOrUpdatedVideoSubscriptions = [];\n object.removedVideoSubscriptionMids = [];\n }\n if (message.addedOrUpdatedVideoSubscriptions && message.addedOrUpdatedVideoSubscriptions.length) {\n object.addedOrUpdatedVideoSubscriptions = [];\n for (var j = 0; j < message.addedOrUpdatedVideoSubscriptions.length; ++j)\n object.addedOrUpdatedVideoSubscriptions[j] = $root.SdkVideoSubscriptionConfiguration.toObject(message.addedOrUpdatedVideoSubscriptions[j], options);\n }\n if (message.removedVideoSubscriptionMids && message.removedVideoSubscriptionMids.length) {\n object.removedVideoSubscriptionMids = [];\n for (var j = 0; j < message.removedVideoSubscriptionMids.length; ++j)\n object.removedVideoSubscriptionMids[j] = message.removedVideoSubscriptionMids[j];\n }\n return object;\n };\n\n /**\n * Converts this SdkRemoteVideoUpdateFrame to JSON.\n * @function toJSON\n * @memberof SdkRemoteVideoUpdateFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkRemoteVideoUpdateFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkRemoteVideoUpdateFrame\n * @function getTypeUrl\n * @memberof SdkRemoteVideoUpdateFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkRemoteVideoUpdateFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkRemoteVideoUpdateFrame\";\n };\n\n return SdkRemoteVideoUpdateFrame;\n})();\n\n/**\n * SdkVideoQualityAdaptationPreference enum.\n * @name SdkVideoQualityAdaptationPreference\n * @enum {number}\n * @property {number} BALANCED=1 BALANCED value\n * @property {number} MAINTAIN_FRAMERATE=2 MAINTAIN_FRAMERATE value\n * @property {number} MAINTAIN_RESOLUTION=3 MAINTAIN_RESOLUTION value\n */\n$root.SdkVideoQualityAdaptationPreference = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"BALANCED\"] = 1;\n values[valuesById[2] = \"MAINTAIN_FRAMERATE\"] = 2;\n values[valuesById[3] = \"MAINTAIN_RESOLUTION\"] = 3;\n return values;\n})();\n\n$root.SdkVideoSubscriptionConfiguration = (function() {\n\n /**\n * Properties of a SdkVideoSubscriptionConfiguration.\n * @name ISdkVideoSubscriptionConfiguration\n * @interface ISdkVideoSubscriptionConfiguration\n * @property {string} mid SdkVideoSubscriptionConfiguration mid\n * @property {string|null} [attendeeId] SdkVideoSubscriptionConfiguration attendeeId\n * @property {number|null} [streamId] SdkVideoSubscriptionConfiguration streamId\n * @property {number|null} [priority] SdkVideoSubscriptionConfiguration priority\n * @property {number|null} [targetBitrateKbps] SdkVideoSubscriptionConfiguration targetBitrateKbps\n * @property {number|null} [groupId] SdkVideoSubscriptionConfiguration groupId\n * @property {SdkVideoQualityAdaptationPreference|null} [qualityAdaptationPreference] SdkVideoSubscriptionConfiguration qualityAdaptationPreference\n */\n\n /**\n * Constructs a new SdkVideoSubscriptionConfiguration.\n * @name SdkVideoSubscriptionConfiguration\n * @classdesc Represents a SdkVideoSubscriptionConfiguration.\n * @implements ISdkVideoSubscriptionConfiguration\n * @constructor\n * @param {ISdkVideoSubscriptionConfiguration=} [properties] Properties to set\n */\n function SdkVideoSubscriptionConfiguration(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkVideoSubscriptionConfiguration mid.\n * @member {string} mid\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.mid = \"\";\n\n /**\n * SdkVideoSubscriptionConfiguration attendeeId.\n * @member {string} attendeeId\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.attendeeId = \"\";\n\n /**\n * SdkVideoSubscriptionConfiguration streamId.\n * @member {number} streamId\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.streamId = 0;\n\n /**\n * SdkVideoSubscriptionConfiguration priority.\n * @member {number} priority\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.priority = 0;\n\n /**\n * SdkVideoSubscriptionConfiguration targetBitrateKbps.\n * @member {number} targetBitrateKbps\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.targetBitrateKbps = 0;\n\n /**\n * SdkVideoSubscriptionConfiguration groupId.\n * @member {number} groupId\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.groupId = 0;\n\n /**\n * SdkVideoSubscriptionConfiguration qualityAdaptationPreference.\n * @member {SdkVideoQualityAdaptationPreference} qualityAdaptationPreference\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n */\n SdkVideoSubscriptionConfiguration.prototype.qualityAdaptationPreference = 1;\n\n /**\n * Creates a new SdkVideoSubscriptionConfiguration instance using the specified properties.\n * @function create\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {ISdkVideoSubscriptionConfiguration=} [properties] Properties to set\n * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration instance\n */\n SdkVideoSubscriptionConfiguration.create = function create(properties) {\n return new SdkVideoSubscriptionConfiguration(properties);\n };\n\n /**\n * Encodes the specified SdkVideoSubscriptionConfiguration message. Does not implicitly {@link SdkVideoSubscriptionConfiguration.verify|verify} messages.\n * @function encode\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {ISdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkVideoSubscriptionConfiguration.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.mid);\n if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.attendeeId);\n if (message.streamId != null && Object.hasOwnProperty.call(message, \"streamId\"))\n writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.streamId);\n if (message.priority != null && Object.hasOwnProperty.call(message, \"priority\"))\n writer.uint32(/* id 4, wireType 0 =*/32).uint32(message.priority);\n if (message.targetBitrateKbps != null && Object.hasOwnProperty.call(message, \"targetBitrateKbps\"))\n writer.uint32(/* id 5, wireType 0 =*/40).uint32(message.targetBitrateKbps);\n if (message.groupId != null && Object.hasOwnProperty.call(message, \"groupId\"))\n writer.uint32(/* id 6, wireType 0 =*/48).uint32(message.groupId);\n if (message.qualityAdaptationPreference != null && Object.hasOwnProperty.call(message, \"qualityAdaptationPreference\"))\n writer.uint32(/* id 7, wireType 0 =*/56).int32(message.qualityAdaptationPreference);\n return writer;\n };\n\n /**\n * Encodes the specified SdkVideoSubscriptionConfiguration message, length delimited. Does not implicitly {@link SdkVideoSubscriptionConfiguration.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {ISdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkVideoSubscriptionConfiguration.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkVideoSubscriptionConfiguration message from the specified reader or buffer.\n * @function decode\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkVideoSubscriptionConfiguration.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkVideoSubscriptionConfiguration();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.mid = reader.string();\n break;\n }\n case 2: {\n message.attendeeId = reader.string();\n break;\n }\n case 3: {\n message.streamId = reader.uint32();\n break;\n }\n case 4: {\n message.priority = reader.uint32();\n break;\n }\n case 5: {\n message.targetBitrateKbps = reader.uint32();\n break;\n }\n case 6: {\n message.groupId = reader.uint32();\n break;\n }\n case 7: {\n message.qualityAdaptationPreference = reader.int32();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n if (!message.hasOwnProperty(\"mid\"))\n throw $util.ProtocolError(\"missing required 'mid'\", { instance: message });\n return message;\n };\n\n /**\n * Decodes a SdkVideoSubscriptionConfiguration message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkVideoSubscriptionConfiguration.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkVideoSubscriptionConfiguration message.\n * @function verify\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkVideoSubscriptionConfiguration.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (!$util.isString(message.mid))\n return \"mid: string expected\";\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n if (!$util.isString(message.attendeeId))\n return \"attendeeId: string expected\";\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n if (!$util.isInteger(message.streamId))\n return \"streamId: integer expected\";\n if (message.priority != null && message.hasOwnProperty(\"priority\"))\n if (!$util.isInteger(message.priority))\n return \"priority: integer expected\";\n if (message.targetBitrateKbps != null && message.hasOwnProperty(\"targetBitrateKbps\"))\n if (!$util.isInteger(message.targetBitrateKbps))\n return \"targetBitrateKbps: integer expected\";\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n if (!$util.isInteger(message.groupId))\n return \"groupId: integer expected\";\n if (message.qualityAdaptationPreference != null && message.hasOwnProperty(\"qualityAdaptationPreference\"))\n switch (message.qualityAdaptationPreference) {\n default:\n return \"qualityAdaptationPreference: enum value expected\";\n case 1:\n case 2:\n case 3:\n break;\n }\n return null;\n };\n\n /**\n * Creates a SdkVideoSubscriptionConfiguration message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkVideoSubscriptionConfiguration} SdkVideoSubscriptionConfiguration\n */\n SdkVideoSubscriptionConfiguration.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkVideoSubscriptionConfiguration)\n return object;\n var message = new $root.SdkVideoSubscriptionConfiguration();\n if (object.mid != null)\n message.mid = String(object.mid);\n if (object.attendeeId != null)\n message.attendeeId = String(object.attendeeId);\n if (object.streamId != null)\n message.streamId = object.streamId >>> 0;\n if (object.priority != null)\n message.priority = object.priority >>> 0;\n if (object.targetBitrateKbps != null)\n message.targetBitrateKbps = object.targetBitrateKbps >>> 0;\n if (object.groupId != null)\n message.groupId = object.groupId >>> 0;\n switch (object.qualityAdaptationPreference) {\n default:\n if (typeof object.qualityAdaptationPreference === \"number\") {\n message.qualityAdaptationPreference = object.qualityAdaptationPreference;\n break;\n }\n break;\n case \"BALANCED\":\n case 1:\n message.qualityAdaptationPreference = 1;\n break;\n case \"MAINTAIN_FRAMERATE\":\n case 2:\n message.qualityAdaptationPreference = 2;\n break;\n case \"MAINTAIN_RESOLUTION\":\n case 3:\n message.qualityAdaptationPreference = 3;\n break;\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkVideoSubscriptionConfiguration message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {SdkVideoSubscriptionConfiguration} message SdkVideoSubscriptionConfiguration\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkVideoSubscriptionConfiguration.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.mid = \"\";\n object.attendeeId = \"\";\n object.streamId = 0;\n object.priority = 0;\n object.targetBitrateKbps = 0;\n object.groupId = 0;\n object.qualityAdaptationPreference = options.enums === String ? \"BALANCED\" : 1;\n }\n if (message.mid != null && message.hasOwnProperty(\"mid\"))\n object.mid = message.mid;\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n object.attendeeId = message.attendeeId;\n if (message.streamId != null && message.hasOwnProperty(\"streamId\"))\n object.streamId = message.streamId;\n if (message.priority != null && message.hasOwnProperty(\"priority\"))\n object.priority = message.priority;\n if (message.targetBitrateKbps != null && message.hasOwnProperty(\"targetBitrateKbps\"))\n object.targetBitrateKbps = message.targetBitrateKbps;\n if (message.groupId != null && message.hasOwnProperty(\"groupId\"))\n object.groupId = message.groupId;\n if (message.qualityAdaptationPreference != null && message.hasOwnProperty(\"qualityAdaptationPreference\"))\n object.qualityAdaptationPreference = options.enums === String ? $root.SdkVideoQualityAdaptationPreference[message.qualityAdaptationPreference] === undefined ? message.qualityAdaptationPreference : $root.SdkVideoQualityAdaptationPreference[message.qualityAdaptationPreference] : message.qualityAdaptationPreference;\n return object;\n };\n\n /**\n * Converts this SdkVideoSubscriptionConfiguration to JSON.\n * @function toJSON\n * @memberof SdkVideoSubscriptionConfiguration\n * @instance\n * @returns {Object.} JSON object\n */\n SdkVideoSubscriptionConfiguration.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkVideoSubscriptionConfiguration\n * @function getTypeUrl\n * @memberof SdkVideoSubscriptionConfiguration\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkVideoSubscriptionConfiguration.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkVideoSubscriptionConfiguration\";\n };\n\n return SdkVideoSubscriptionConfiguration;\n})();\n\n$root.SdkNotificationFrame = (function() {\n\n /**\n * Properties of a SdkNotificationFrame.\n * @name ISdkNotificationFrame\n * @interface ISdkNotificationFrame\n * @property {SdkNotificationFrame.NotificationLevel|null} [level] SdkNotificationFrame level\n * @property {string|null} [message] SdkNotificationFrame message\n */\n\n /**\n * Constructs a new SdkNotificationFrame.\n * @name SdkNotificationFrame\n * @classdesc Represents a SdkNotificationFrame.\n * @implements ISdkNotificationFrame\n * @constructor\n * @param {ISdkNotificationFrame=} [properties] Properties to set\n */\n function SdkNotificationFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkNotificationFrame level.\n * @member {SdkNotificationFrame.NotificationLevel} level\n * @memberof SdkNotificationFrame\n * @instance\n */\n SdkNotificationFrame.prototype.level = 3;\n\n /**\n * SdkNotificationFrame message.\n * @member {string} message\n * @memberof SdkNotificationFrame\n * @instance\n */\n SdkNotificationFrame.prototype.message = \"\";\n\n /**\n * Creates a new SdkNotificationFrame instance using the specified properties.\n * @function create\n * @memberof SdkNotificationFrame\n * @static\n * @param {ISdkNotificationFrame=} [properties] Properties to set\n * @returns {SdkNotificationFrame} SdkNotificationFrame instance\n */\n SdkNotificationFrame.create = function create(properties) {\n return new SdkNotificationFrame(properties);\n };\n\n /**\n * Encodes the specified SdkNotificationFrame message. Does not implicitly {@link SdkNotificationFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkNotificationFrame\n * @static\n * @param {ISdkNotificationFrame} message SdkNotificationFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkNotificationFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.level != null && Object.hasOwnProperty.call(message, \"level\"))\n writer.uint32(/* id 1, wireType 0 =*/8).int32(message.level);\n if (message.message != null && Object.hasOwnProperty.call(message, \"message\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.message);\n return writer;\n };\n\n /**\n * Encodes the specified SdkNotificationFrame message, length delimited. Does not implicitly {@link SdkNotificationFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkNotificationFrame\n * @static\n * @param {ISdkNotificationFrame} message SdkNotificationFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkNotificationFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkNotificationFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkNotificationFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkNotificationFrame} SdkNotificationFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkNotificationFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkNotificationFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.level = reader.int32();\n break;\n }\n case 2: {\n message.message = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkNotificationFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkNotificationFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkNotificationFrame} SdkNotificationFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkNotificationFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkNotificationFrame message.\n * @function verify\n * @memberof SdkNotificationFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkNotificationFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.level != null && message.hasOwnProperty(\"level\"))\n switch (message.level) {\n default:\n return \"level: enum value expected\";\n case 1:\n case 2:\n case 3:\n break;\n }\n if (message.message != null && message.hasOwnProperty(\"message\"))\n if (!$util.isString(message.message))\n return \"message: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkNotificationFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkNotificationFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkNotificationFrame} SdkNotificationFrame\n */\n SdkNotificationFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkNotificationFrame)\n return object;\n var message = new $root.SdkNotificationFrame();\n switch (object.level) {\n case \"INFO\":\n case 1:\n message.level = 1;\n break;\n case \"WARNING\":\n case 2:\n message.level = 2;\n break;\n default:\n if (typeof object.level === \"number\") {\n message.level = object.level;\n break;\n }\n break;\n case \"ERROR\":\n case 3:\n message.level = 3;\n break;\n }\n if (object.message != null)\n message.message = String(object.message);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkNotificationFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkNotificationFrame\n * @static\n * @param {SdkNotificationFrame} message SdkNotificationFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkNotificationFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.level = options.enums === String ? \"ERROR\" : 3;\n object.message = \"\";\n }\n if (message.level != null && message.hasOwnProperty(\"level\"))\n object.level = options.enums === String ? $root.SdkNotificationFrame.NotificationLevel[message.level] === undefined ? message.level : $root.SdkNotificationFrame.NotificationLevel[message.level] : message.level;\n if (message.message != null && message.hasOwnProperty(\"message\"))\n object.message = message.message;\n return object;\n };\n\n /**\n * Converts this SdkNotificationFrame to JSON.\n * @function toJSON\n * @memberof SdkNotificationFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkNotificationFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkNotificationFrame\n * @function getTypeUrl\n * @memberof SdkNotificationFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkNotificationFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkNotificationFrame\";\n };\n\n /**\n * NotificationLevel enum.\n * @name SdkNotificationFrame.NotificationLevel\n * @enum {number}\n * @property {number} INFO=1 INFO value\n * @property {number} WARNING=2 WARNING value\n * @property {number} ERROR=3 ERROR value\n */\n SdkNotificationFrame.NotificationLevel = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"INFO\"] = 1;\n values[valuesById[2] = \"WARNING\"] = 2;\n values[valuesById[3] = \"ERROR\"] = 3;\n return values;\n })();\n\n return SdkNotificationFrame;\n})();\n\n$root.SdkPrimaryMeetingJoinFrame = (function() {\n\n /**\n * Properties of a SdkPrimaryMeetingJoinFrame.\n * @name ISdkPrimaryMeetingJoinFrame\n * @interface ISdkPrimaryMeetingJoinFrame\n * @property {ISdkMeetingSessionCredentials|null} [credentials] SdkPrimaryMeetingJoinFrame credentials\n */\n\n /**\n * Constructs a new SdkPrimaryMeetingJoinFrame.\n * @name SdkPrimaryMeetingJoinFrame\n * @classdesc Represents a SdkPrimaryMeetingJoinFrame.\n * @implements ISdkPrimaryMeetingJoinFrame\n * @constructor\n * @param {ISdkPrimaryMeetingJoinFrame=} [properties] Properties to set\n */\n function SdkPrimaryMeetingJoinFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkPrimaryMeetingJoinFrame credentials.\n * @member {ISdkMeetingSessionCredentials|null|undefined} credentials\n * @memberof SdkPrimaryMeetingJoinFrame\n * @instance\n */\n SdkPrimaryMeetingJoinFrame.prototype.credentials = null;\n\n /**\n * Creates a new SdkPrimaryMeetingJoinFrame instance using the specified properties.\n * @function create\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinFrame=} [properties] Properties to set\n * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame instance\n */\n SdkPrimaryMeetingJoinFrame.create = function create(properties) {\n return new SdkPrimaryMeetingJoinFrame(properties);\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingJoinFrame message. Does not implicitly {@link SdkPrimaryMeetingJoinFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingJoinFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.credentials != null && Object.hasOwnProperty.call(message, \"credentials\"))\n $root.SdkMeetingSessionCredentials.encode(message.credentials, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();\n return writer;\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingJoinFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingJoinFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingJoinFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkPrimaryMeetingJoinFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingJoinFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingJoinFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.credentials = $root.SdkMeetingSessionCredentials.decode(reader, reader.uint32());\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkPrimaryMeetingJoinFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingJoinFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkPrimaryMeetingJoinFrame message.\n * @function verify\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkPrimaryMeetingJoinFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.credentials != null && message.hasOwnProperty(\"credentials\")) {\n var error = $root.SdkMeetingSessionCredentials.verify(message.credentials);\n if (error)\n return \"credentials.\" + error;\n }\n return null;\n };\n\n /**\n * Creates a SdkPrimaryMeetingJoinFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkPrimaryMeetingJoinFrame} SdkPrimaryMeetingJoinFrame\n */\n SdkPrimaryMeetingJoinFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkPrimaryMeetingJoinFrame)\n return object;\n var message = new $root.SdkPrimaryMeetingJoinFrame();\n if (object.credentials != null) {\n if (typeof object.credentials !== \"object\")\n throw TypeError(\".SdkPrimaryMeetingJoinFrame.credentials: object expected\");\n message.credentials = $root.SdkMeetingSessionCredentials.fromObject(object.credentials);\n }\n return message;\n };\n\n /**\n * Creates a plain object from a SdkPrimaryMeetingJoinFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {SdkPrimaryMeetingJoinFrame} message SdkPrimaryMeetingJoinFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkPrimaryMeetingJoinFrame.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults)\n object.credentials = null;\n if (message.credentials != null && message.hasOwnProperty(\"credentials\"))\n object.credentials = $root.SdkMeetingSessionCredentials.toObject(message.credentials, options);\n return object;\n };\n\n /**\n * Converts this SdkPrimaryMeetingJoinFrame to JSON.\n * @function toJSON\n * @memberof SdkPrimaryMeetingJoinFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkPrimaryMeetingJoinFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkPrimaryMeetingJoinFrame\n * @function getTypeUrl\n * @memberof SdkPrimaryMeetingJoinFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkPrimaryMeetingJoinFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkPrimaryMeetingJoinFrame\";\n };\n\n return SdkPrimaryMeetingJoinFrame;\n})();\n\n$root.SdkPrimaryMeetingJoinAckFrame = (function() {\n\n /**\n * Properties of a SdkPrimaryMeetingJoinAckFrame.\n * @name ISdkPrimaryMeetingJoinAckFrame\n * @interface ISdkPrimaryMeetingJoinAckFrame\n */\n\n /**\n * Constructs a new SdkPrimaryMeetingJoinAckFrame.\n * @name SdkPrimaryMeetingJoinAckFrame\n * @classdesc Represents a SdkPrimaryMeetingJoinAckFrame.\n * @implements ISdkPrimaryMeetingJoinAckFrame\n * @constructor\n * @param {ISdkPrimaryMeetingJoinAckFrame=} [properties] Properties to set\n */\n function SdkPrimaryMeetingJoinAckFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Creates a new SdkPrimaryMeetingJoinAckFrame instance using the specified properties.\n * @function create\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinAckFrame=} [properties] Properties to set\n * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame instance\n */\n SdkPrimaryMeetingJoinAckFrame.create = function create(properties) {\n return new SdkPrimaryMeetingJoinAckFrame(properties);\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingJoinAckFrame message. Does not implicitly {@link SdkPrimaryMeetingJoinAckFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingJoinAckFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n return writer;\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingJoinAckFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingJoinAckFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {ISdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingJoinAckFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkPrimaryMeetingJoinAckFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingJoinAckFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingJoinAckFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkPrimaryMeetingJoinAckFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingJoinAckFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkPrimaryMeetingJoinAckFrame message.\n * @function verify\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkPrimaryMeetingJoinAckFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n return null;\n };\n\n /**\n * Creates a SdkPrimaryMeetingJoinAckFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkPrimaryMeetingJoinAckFrame} SdkPrimaryMeetingJoinAckFrame\n */\n SdkPrimaryMeetingJoinAckFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkPrimaryMeetingJoinAckFrame)\n return object;\n return new $root.SdkPrimaryMeetingJoinAckFrame();\n };\n\n /**\n * Creates a plain object from a SdkPrimaryMeetingJoinAckFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {SdkPrimaryMeetingJoinAckFrame} message SdkPrimaryMeetingJoinAckFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkPrimaryMeetingJoinAckFrame.toObject = function toObject() {\n return {};\n };\n\n /**\n * Converts this SdkPrimaryMeetingJoinAckFrame to JSON.\n * @function toJSON\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkPrimaryMeetingJoinAckFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkPrimaryMeetingJoinAckFrame\n * @function getTypeUrl\n * @memberof SdkPrimaryMeetingJoinAckFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkPrimaryMeetingJoinAckFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkPrimaryMeetingJoinAckFrame\";\n };\n\n return SdkPrimaryMeetingJoinAckFrame;\n})();\n\n$root.SdkPrimaryMeetingLeaveFrame = (function() {\n\n /**\n * Properties of a SdkPrimaryMeetingLeaveFrame.\n * @name ISdkPrimaryMeetingLeaveFrame\n * @interface ISdkPrimaryMeetingLeaveFrame\n */\n\n /**\n * Constructs a new SdkPrimaryMeetingLeaveFrame.\n * @name SdkPrimaryMeetingLeaveFrame\n * @classdesc Represents a SdkPrimaryMeetingLeaveFrame.\n * @implements ISdkPrimaryMeetingLeaveFrame\n * @constructor\n * @param {ISdkPrimaryMeetingLeaveFrame=} [properties] Properties to set\n */\n function SdkPrimaryMeetingLeaveFrame(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * Creates a new SdkPrimaryMeetingLeaveFrame instance using the specified properties.\n * @function create\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {ISdkPrimaryMeetingLeaveFrame=} [properties] Properties to set\n * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame instance\n */\n SdkPrimaryMeetingLeaveFrame.create = function create(properties) {\n return new SdkPrimaryMeetingLeaveFrame(properties);\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingLeaveFrame message. Does not implicitly {@link SdkPrimaryMeetingLeaveFrame.verify|verify} messages.\n * @function encode\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {ISdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingLeaveFrame.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n return writer;\n };\n\n /**\n * Encodes the specified SdkPrimaryMeetingLeaveFrame message, length delimited. Does not implicitly {@link SdkPrimaryMeetingLeaveFrame.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {ISdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkPrimaryMeetingLeaveFrame.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkPrimaryMeetingLeaveFrame message from the specified reader or buffer.\n * @function decode\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingLeaveFrame.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkPrimaryMeetingLeaveFrame();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkPrimaryMeetingLeaveFrame message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkPrimaryMeetingLeaveFrame.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkPrimaryMeetingLeaveFrame message.\n * @function verify\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkPrimaryMeetingLeaveFrame.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n return null;\n };\n\n /**\n * Creates a SdkPrimaryMeetingLeaveFrame message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkPrimaryMeetingLeaveFrame} SdkPrimaryMeetingLeaveFrame\n */\n SdkPrimaryMeetingLeaveFrame.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkPrimaryMeetingLeaveFrame)\n return object;\n return new $root.SdkPrimaryMeetingLeaveFrame();\n };\n\n /**\n * Creates a plain object from a SdkPrimaryMeetingLeaveFrame message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {SdkPrimaryMeetingLeaveFrame} message SdkPrimaryMeetingLeaveFrame\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkPrimaryMeetingLeaveFrame.toObject = function toObject() {\n return {};\n };\n\n /**\n * Converts this SdkPrimaryMeetingLeaveFrame to JSON.\n * @function toJSON\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @instance\n * @returns {Object.} JSON object\n */\n SdkPrimaryMeetingLeaveFrame.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkPrimaryMeetingLeaveFrame\n * @function getTypeUrl\n * @memberof SdkPrimaryMeetingLeaveFrame\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkPrimaryMeetingLeaveFrame.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkPrimaryMeetingLeaveFrame\";\n };\n\n return SdkPrimaryMeetingLeaveFrame;\n})();\n\n$root.SdkMeetingSessionCredentials = (function() {\n\n /**\n * Properties of a SdkMeetingSessionCredentials.\n * @name ISdkMeetingSessionCredentials\n * @interface ISdkMeetingSessionCredentials\n * @property {string|null} [attendeeId] SdkMeetingSessionCredentials attendeeId\n * @property {string|null} [externalUserId] SdkMeetingSessionCredentials externalUserId\n * @property {string|null} [joinToken] SdkMeetingSessionCredentials joinToken\n */\n\n /**\n * Constructs a new SdkMeetingSessionCredentials.\n * @name SdkMeetingSessionCredentials\n * @classdesc Represents a SdkMeetingSessionCredentials.\n * @implements ISdkMeetingSessionCredentials\n * @constructor\n * @param {ISdkMeetingSessionCredentials=} [properties] Properties to set\n */\n function SdkMeetingSessionCredentials(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n\n /**\n * SdkMeetingSessionCredentials attendeeId.\n * @member {string} attendeeId\n * @memberof SdkMeetingSessionCredentials\n * @instance\n */\n SdkMeetingSessionCredentials.prototype.attendeeId = \"\";\n\n /**\n * SdkMeetingSessionCredentials externalUserId.\n * @member {string} externalUserId\n * @memberof SdkMeetingSessionCredentials\n * @instance\n */\n SdkMeetingSessionCredentials.prototype.externalUserId = \"\";\n\n /**\n * SdkMeetingSessionCredentials joinToken.\n * @member {string} joinToken\n * @memberof SdkMeetingSessionCredentials\n * @instance\n */\n SdkMeetingSessionCredentials.prototype.joinToken = \"\";\n\n /**\n * Creates a new SdkMeetingSessionCredentials instance using the specified properties.\n * @function create\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {ISdkMeetingSessionCredentials=} [properties] Properties to set\n * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials instance\n */\n SdkMeetingSessionCredentials.create = function create(properties) {\n return new SdkMeetingSessionCredentials(properties);\n };\n\n /**\n * Encodes the specified SdkMeetingSessionCredentials message. Does not implicitly {@link SdkMeetingSessionCredentials.verify|verify} messages.\n * @function encode\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {ISdkMeetingSessionCredentials} message SdkMeetingSessionCredentials message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkMeetingSessionCredentials.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.attendeeId != null && Object.hasOwnProperty.call(message, \"attendeeId\"))\n writer.uint32(/* id 1, wireType 2 =*/10).string(message.attendeeId);\n if (message.externalUserId != null && Object.hasOwnProperty.call(message, \"externalUserId\"))\n writer.uint32(/* id 2, wireType 2 =*/18).string(message.externalUserId);\n if (message.joinToken != null && Object.hasOwnProperty.call(message, \"joinToken\"))\n writer.uint32(/* id 3, wireType 2 =*/26).string(message.joinToken);\n return writer;\n };\n\n /**\n * Encodes the specified SdkMeetingSessionCredentials message, length delimited. Does not implicitly {@link SdkMeetingSessionCredentials.verify|verify} messages.\n * @function encodeDelimited\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {ISdkMeetingSessionCredentials} message SdkMeetingSessionCredentials message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SdkMeetingSessionCredentials.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n\n /**\n * Decodes a SdkMeetingSessionCredentials message from the specified reader or buffer.\n * @function decode\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkMeetingSessionCredentials.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.SdkMeetingSessionCredentials();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1: {\n message.attendeeId = reader.string();\n break;\n }\n case 2: {\n message.externalUserId = reader.string();\n break;\n }\n case 3: {\n message.joinToken = reader.string();\n break;\n }\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n\n /**\n * Decodes a SdkMeetingSessionCredentials message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SdkMeetingSessionCredentials.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n\n /**\n * Verifies a SdkMeetingSessionCredentials message.\n * @function verify\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {Object.} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n SdkMeetingSessionCredentials.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n if (!$util.isString(message.attendeeId))\n return \"attendeeId: string expected\";\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n if (!$util.isString(message.externalUserId))\n return \"externalUserId: string expected\";\n if (message.joinToken != null && message.hasOwnProperty(\"joinToken\"))\n if (!$util.isString(message.joinToken))\n return \"joinToken: string expected\";\n return null;\n };\n\n /**\n * Creates a SdkMeetingSessionCredentials message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {Object.} object Plain object\n * @returns {SdkMeetingSessionCredentials} SdkMeetingSessionCredentials\n */\n SdkMeetingSessionCredentials.fromObject = function fromObject(object) {\n if (object instanceof $root.SdkMeetingSessionCredentials)\n return object;\n var message = new $root.SdkMeetingSessionCredentials();\n if (object.attendeeId != null)\n message.attendeeId = String(object.attendeeId);\n if (object.externalUserId != null)\n message.externalUserId = String(object.externalUserId);\n if (object.joinToken != null)\n message.joinToken = String(object.joinToken);\n return message;\n };\n\n /**\n * Creates a plain object from a SdkMeetingSessionCredentials message. Also converts values to other types if specified.\n * @function toObject\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {SdkMeetingSessionCredentials} message SdkMeetingSessionCredentials\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.} Plain object\n */\n SdkMeetingSessionCredentials.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n object.attendeeId = \"\";\n object.externalUserId = \"\";\n object.joinToken = \"\";\n }\n if (message.attendeeId != null && message.hasOwnProperty(\"attendeeId\"))\n object.attendeeId = message.attendeeId;\n if (message.externalUserId != null && message.hasOwnProperty(\"externalUserId\"))\n object.externalUserId = message.externalUserId;\n if (message.joinToken != null && message.hasOwnProperty(\"joinToken\"))\n object.joinToken = message.joinToken;\n return object;\n };\n\n /**\n * Converts this SdkMeetingSessionCredentials to JSON.\n * @function toJSON\n * @memberof SdkMeetingSessionCredentials\n * @instance\n * @returns {Object.} JSON object\n */\n SdkMeetingSessionCredentials.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Gets the default type url for SdkMeetingSessionCredentials\n * @function getTypeUrl\n * @memberof SdkMeetingSessionCredentials\n * @static\n * @param {string} [typeUrlPrefix] your custom typeUrlPrefix(default \"type.googleapis.com\")\n * @returns {string} The default type url\n */\n SdkMeetingSessionCredentials.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\n if (typeUrlPrefix === undefined) {\n typeUrlPrefix = \"type.googleapis.com\";\n }\n return typeUrlPrefix + \"/SdkMeetingSessionCredentials\";\n };\n\n return SdkMeetingSessionCredentials;\n})();\n\n/**\n * SdkVideoCodecCapability enum.\n * @name SdkVideoCodecCapability\n * @enum {number}\n * @property {number} VP8=1 VP8 value\n * @property {number} H264_BASELINE_PROFILE=2 H264_BASELINE_PROFILE value\n * @property {number} H264_CONSTRAINED_BASELINE_PROFILE=3 H264_CONSTRAINED_BASELINE_PROFILE value\n * @property {number} H264_MAIN_PROFILE=4 H264_MAIN_PROFILE value\n * @property {number} H264_HIGH_PROFILE=5 H264_HIGH_PROFILE value\n * @property {number} H264_CONSTRAINED_HIGH_PROFILE=6 H264_CONSTRAINED_HIGH_PROFILE value\n * @property {number} VP9_PROFILE_0=8 VP9_PROFILE_0 value\n * @property {number} AV1_MAIN_PROFILE=11 AV1_MAIN_PROFILE value\n */\n$root.SdkVideoCodecCapability = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"VP8\"] = 1;\n values[valuesById[2] = \"H264_BASELINE_PROFILE\"] = 2;\n values[valuesById[3] = \"H264_CONSTRAINED_BASELINE_PROFILE\"] = 3;\n values[valuesById[4] = \"H264_MAIN_PROFILE\"] = 4;\n values[valuesById[5] = \"H264_HIGH_PROFILE\"] = 5;\n values[valuesById[6] = \"H264_CONSTRAINED_HIGH_PROFILE\"] = 6;\n values[valuesById[8] = \"VP9_PROFILE_0\"] = 8;\n values[valuesById[11] = \"AV1_MAIN_PROFILE\"] = 11;\n return values;\n})();\n\nmodule.exports = $root;\n$util.Long = undefined;\n$protobuf.configure();","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientMetricReportDirection = void 0;\nvar ClientMetricReportDirection;\n(function (ClientMetricReportDirection) {\n ClientMetricReportDirection[ClientMetricReportDirection[\"UPSTREAM\"] = 0] = \"UPSTREAM\";\n ClientMetricReportDirection[ClientMetricReportDirection[\"DOWNSTREAM\"] = 1] = \"DOWNSTREAM\";\n})(ClientMetricReportDirection = exports.ClientMetricReportDirection || (exports.ClientMetricReportDirection = {}));\nexports.default = ClientMetricReportDirection;\n//# sourceMappingURL=ClientMetricReportDirection.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ClientMetricReportMediaType = void 0;\nvar ClientMetricReportMediaType;\n(function (ClientMetricReportMediaType) {\n ClientMetricReportMediaType[ClientMetricReportMediaType[\"AUDIO\"] = 0] = \"AUDIO\";\n ClientMetricReportMediaType[ClientMetricReportMediaType[\"VIDEO\"] = 1] = \"VIDEO\";\n})(ClientMetricReportMediaType = exports.ClientMetricReportMediaType || (exports.ClientMetricReportMediaType = {}));\nexports.default = ClientMetricReportMediaType;\n//# sourceMappingURL=ClientMetricReportMediaType.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass GlobalMetricReport {\n constructor() {\n this.previousMetrics = {};\n this.currentMetrics = {};\n // As metric values do not necessarily be number, this is a workaround in case metric value is string\n this.currentStringMetrics = {};\n this.previousObjectMetrics = {};\n this.currentObjectMetrics = {};\n }\n}\nexports.default = GlobalMetricReport;\n//# sourceMappingURL=GlobalMetricReport.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst ClientMetricReportDirection_1 = __importDefault(require(\"./ClientMetricReportDirection\"));\nconst ClientMetricReportMediaType_1 = __importDefault(require(\"./ClientMetricReportMediaType\"));\nconst GlobalMetricReport_1 = __importDefault(require(\"./GlobalMetricReport\"));\n/**\n * [[ClientMetricReport]] gets the media metrics used by ConnectionMonitor to\n * update connection health data.\n */\nclass ClientMetricReport {\n constructor(logger, videoStreamIndex, selfAttendeeId) {\n this.logger = logger;\n this.videoStreamIndex = videoStreamIndex;\n this.selfAttendeeId = selfAttendeeId;\n this.globalMetricReport = new GlobalMetricReport_1.default();\n this.streamMetricReports = {};\n // Will contain the raw RTCStatsReport from RTCPeerConnection.getStats() API.\n this.rtcStatsReport = {};\n // Will contain any custom metric reports generated by the SDK.\n this.customStatsReports = [];\n this.currentTimestampMs = 0;\n this.previousTimestampMs = 0;\n this.currentSsrcs = {};\n this.overriddenObservableMetrics = new Map();\n /**\n * Metric transform functions\n */\n this.identityValue = (metricName, ssrc) => {\n const metricReport = ssrc ? this.streamMetricReports[ssrc] : this.globalMetricReport;\n return Number(metricReport.currentMetrics[metricName]);\n };\n this.decoderLossPercent = (metricName, ssrc) => {\n const metricReport = this.streamMetricReports[ssrc];\n const concealedSamples = metricReport.currentMetrics['concealedSamples'] -\n (metricReport.previousMetrics['concealedSamples'] || 0);\n const totalSamplesReceived = metricReport.currentMetrics['totalSamplesReceived'] -\n (metricReport.previousMetrics['totalSamplesReceived'] || 0);\n if (totalSamplesReceived <= 0) {\n return 0;\n }\n const decoderAbnormal = totalSamplesReceived - concealedSamples;\n if (decoderAbnormal <= 0) {\n return 0;\n }\n return (concealedSamples / totalSamplesReceived) * 100;\n };\n this.packetLossPercent = (sourceMetricName, ssrc) => {\n const metricReport = this.streamMetricReports[ssrc];\n const sentOrReceived = metricReport.currentMetrics[sourceMetricName] -\n (metricReport.previousMetrics[sourceMetricName] || 0);\n const lost = metricReport.currentMetrics['packetsLost'] -\n (metricReport.previousMetrics['packetsLost'] || 0);\n const total = sentOrReceived + lost;\n if (total <= 0 || lost <= 0) {\n return 0;\n }\n return (lost * 100) / total;\n };\n this.jitterBufferMs = (metricName, ssrc) => {\n const metricReport = this.streamMetricReports[ssrc];\n const jitterBufferDelay = metricReport.currentMetrics['jitterBufferDelay'] -\n (metricReport.previousMetrics['jitterBufferDelay'] || 0);\n const jitterBufferEmittedCount = metricReport.currentMetrics['jitterBufferEmittedCount'] -\n (metricReport.previousMetrics['jitterBufferEmittedCount'] || 0);\n if (jitterBufferDelay <= 0) {\n return 0;\n }\n if (jitterBufferEmittedCount <= 0) {\n return 0;\n }\n return (jitterBufferDelay / jitterBufferEmittedCount) * 1000;\n };\n this.countPerSecond = (metricName, ssrc) => {\n const metricReport = ssrc ? this.streamMetricReports[ssrc] : this.globalMetricReport;\n let intervalSeconds = (this.currentTimestampMs - this.previousTimestampMs) / 1000;\n if (intervalSeconds <= 0) {\n return 0;\n }\n if (this.previousTimestampMs <= 0) {\n intervalSeconds = 1;\n }\n const diff = metricReport.currentMetrics[metricName] - (metricReport.previousMetrics[metricName] || 0);\n if (diff <= 0) {\n return 0;\n }\n return Math.trunc(diff / intervalSeconds);\n };\n this.bitsPerSecond = (metricName, ssrc) => {\n const metricReport = ssrc ? this.streamMetricReports[ssrc] : this.globalMetricReport;\n let intervalSeconds = (this.currentTimestampMs - this.previousTimestampMs) / 1000;\n if (intervalSeconds <= 0) {\n return 0;\n }\n if (this.previousTimestampMs <= 0) {\n intervalSeconds = 1;\n }\n const diff = (metricReport.currentMetrics[metricName] - (metricReport.previousMetrics[metricName] || 0)) *\n 8;\n if (diff <= 0) {\n return 0;\n }\n return Math.trunc(diff / intervalSeconds);\n };\n this.secondsToMilliseconds = (metricName, ssrc) => {\n const metricReport = ssrc ? this.streamMetricReports[ssrc] : this.globalMetricReport;\n return Number(metricReport.currentMetrics[metricName] * 1000);\n };\n this.averageTimeSpentPerSecondInMilliseconds = (metricName, ssrc) => {\n const metricReport = ssrc ? this.streamMetricReports[ssrc] : this.globalMetricReport;\n let intervalSeconds = (this.currentTimestampMs - this.previousTimestampMs) / 1000;\n if (intervalSeconds <= 0) {\n return 0;\n }\n if (this.previousTimestampMs <= 0) {\n intervalSeconds = 1;\n }\n const diff = metricReport.currentMetrics[metricName] - (metricReport.previousMetrics[metricName] || 0);\n if (diff <= 0) {\n return 0;\n }\n return (diff * 1000) / intervalSeconds;\n };\n this.averageCpuQualityLimitationDurationPerSecondInMilliseconds = (metricName, ssrc) => {\n const metricReport = this.streamMetricReports[ssrc];\n let intervalSeconds = (this.currentTimestampMs - this.previousTimestampMs) / 1000;\n if (intervalSeconds <= 0) {\n return 0;\n }\n if (this.previousTimestampMs <= 0) {\n intervalSeconds = 1;\n }\n let previousValue = 0;\n let currentValue = 0;\n for (const [key, value] of Object.entries(metricReport.previousObjectMetrics[metricName])) {\n if (key === 'cpu') {\n previousValue = value;\n }\n }\n for (const [key, value] of Object.entries(metricReport.currentObjectMetrics[metricName])) {\n if (key === 'cpu') {\n currentValue = value;\n }\n }\n const diff = currentValue - previousValue;\n if (diff <= 0) {\n return 0;\n }\n return (diff * 1000) / intervalSeconds;\n };\n this.isHardwareImplementation = (metricName, ssrc) => {\n const metricReport = this.streamMetricReports[ssrc];\n const implName = String(metricReport.currentStringMetrics[metricName]);\n const hasHwName = implName.includes('ExternalDecoder') ||\n implName.includes('ExternalEncoder') ||\n implName.includes('EncodeAccelerator') ||\n implName.includes('DecodeAccelerator');\n const isFallback = implName.includes('fallback from');\n return hasHwName && !isFallback ? 1 : 0;\n };\n /**\n * Canonical and derived metric maps\n */\n this.globalMetricMap = {\n retransmittedBytesSent: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RETRANSMIT_BITRATE,\n },\n totalEncodedBytesTarget: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_TARGET_ENCODER_BITRATE,\n },\n totalPacketSendDelay: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_BUCKET_DELAY_MS,\n },\n packetsDiscardedOnSend: {\n transform: this.countPerSecond,\n type: SignalingProtocol_js_1.SdkMetric.Type.SOCKET_DISCARDED_PPS,\n },\n availableIncomingBitrate: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_AVAILABLE_RECEIVE_BANDWIDTH,\n },\n availableOutgoingBitrate: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_AVAILABLE_SEND_BANDWIDTH,\n },\n currentRoundTripTime: {\n transform: this.secondsToMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.STUN_RTT_MS,\n },\n // Upstream AudioLevel is collected through RTCAudioSourceStats\n // (https://developer.mozilla.org/en-US/docs/Web/API/RTCAudioSourceStats)\n // That one doesn't have ssrc field so we must collect it through Global Metric Report\n audioLevel: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_AUDIO_LEVEL,\n source: 'audioLevel',\n },\n };\n this.audioUpstreamMetricMap = {\n jitter: { transform: this.secondsToMilliseconds, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_JITTER_MS },\n packetsSent: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_PPS },\n bytesSent: { transform: this.bitsPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_BITRATE },\n roundTripTime: { transform: this.secondsToMilliseconds, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_RTT_MS },\n packetsLost: {\n transform: this.packetLossPercent,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_MIC_FRACTION_PACKET_LOST_PERCENT,\n source: 'packetsSent',\n },\n };\n this.audioDownstreamMetricMap = {\n concealedSamples: {\n transform: this.countPerSecond,\n },\n totalSamplesReceived: {\n transform: this.countPerSecond,\n },\n decoderLoss: {\n transform: this.decoderLossPercent,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_FRACTION_DECODER_LOSS_PERCENT,\n },\n packetsReceived: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_PPS },\n packetsLost: {\n transform: this.packetLossPercent,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_FRACTION_PACKET_LOST_PERCENT,\n source: 'packetsReceived',\n },\n jitter: { transform: this.secondsToMilliseconds, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_JITTER_MS },\n jitterBufferDelay: {\n transform: this.countPerSecond,\n },\n jitterBufferEmittedCount: {\n transform: this.countPerSecond,\n },\n jitterBufferMs: {\n transform: this.jitterBufferMs,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_JITTER_BUFFER_MS,\n },\n bytesReceived: { transform: this.bitsPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_BITRATE },\n audioLevel: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_AUDIO_LEVEL },\n totalAudioPacketsLost: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_TOTAL_LOST,\n },\n totalAudioPacketsExpected: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_TOTAL_EXPECTED,\n },\n totalAudioPacketsRecoveredRed: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_TOTAL_RECOVERED_RED,\n },\n totalAudioPacketsRecoveredFec: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.RTC_SPK_TOTAL_RECOVERED_FEC,\n },\n };\n this.videoUpstreamMetricMap = {\n roundTripTime: {\n transform: this.secondsToMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_SENT_RTT_MS,\n },\n nackCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_NACKS_RECEIVED },\n pliCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_PLIS_RECEIVED },\n firCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_FIRS_RECEIVED },\n framesPerSecond: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_INPUT_FPS },\n framesEncoded: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_ENCODE_FPS },\n packetsSent: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_SENT_PPS },\n packetsLost: {\n transform: this.packetLossPercent,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT,\n source: 'packetsSent',\n },\n bytesSent: { transform: this.bitsPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_SENT_BITRATE },\n qpSum: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_SENT_QP_SUM },\n frameHeight: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_ENCODE_HEIGHT },\n frameWidth: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_ENCODE_WIDTH },\n jitter: {\n transform: this.secondsToMilliseconds,\n },\n totalEncodeTime: {\n transform: this.averageTimeSpentPerSecondInMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_ENCODE_MS,\n },\n encoderImplementation: {\n transform: this.isHardwareImplementation,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_ENCODER_IS_HARDWARE,\n },\n qualityLimitationDurations: {\n transform: this.averageCpuQualityLimitationDurationPerSecondInMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_QUALITY_LIMITATION_DURATION_CPU,\n },\n };\n this.videoDownstreamMetricMap = {\n packetsReceived: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_PPS },\n packetsLost: {\n transform: this.packetLossPercent,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT,\n source: 'packetsReceived',\n },\n framesReceived: {\n transform: this.identityValue,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_FPS,\n },\n framesDecoded: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DECODE_FPS },\n nackCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_NACKS_SENT },\n firCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_FIRS_SENT },\n pliCount: { transform: this.countPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_PLIS_SENT },\n bytesReceived: { transform: this.bitsPerSecond, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_BITRATE },\n jitter: {\n transform: this.secondsToMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_JITTER_MS,\n },\n jitterBufferDelay: {\n transform: this.countPerSecond,\n },\n jitterBufferEmittedCount: {\n transform: this.countPerSecond,\n },\n jitterBufferMs: {\n transform: this.jitterBufferMs,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_JITTER_BUFFER_MS,\n },\n qpSum: {\n transform: this.countPerSecond,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_RECEIVED_QP_SUM,\n },\n frameHeight: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DECODE_HEIGHT },\n frameWidth: { transform: this.identityValue, type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DECODE_WIDTH },\n totalDecodeTime: {\n transform: this.averageTimeSpentPerSecondInMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DECODE_MS,\n },\n decoderImplementation: {\n transform: this.isHardwareImplementation,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DECODER_IS_HARDWARE,\n },\n totalFreezesDuration: {\n transform: this.averageTimeSpentPerSecondInMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_FREEZE_DURATION,\n },\n freezeCount: {\n transform: this.countPerSecond,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_FREEZE_COUNT,\n },\n totalPausesDuration: {\n transform: this.averageTimeSpentPerSecondInMilliseconds,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_PAUSE_DURATION,\n },\n pauseCount: {\n transform: this.countPerSecond,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_PAUSE_COUNT,\n },\n framesDropped: {\n transform: this.countPerSecond,\n type: SignalingProtocol_js_1.SdkMetric.Type.VIDEO_DROPPED_FPS,\n },\n };\n /**\n * Dimensions derived from metric\n */\n this.streamDimensionMap = {\n encoderImplementation: SignalingProtocol_js_1.SdkStreamDimension.Type.VIDEO_ENCODER_NAME,\n decoderImplementation: SignalingProtocol_js_1.SdkStreamDimension.Type.VIDEO_DECODER_NAME,\n };\n /**\n * media Stream metrics\n */\n this.observableVideoMetricSpec = {\n videoUpstreamBitrate: {\n source: 'bytesSent',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamPacketsSent: {\n source: 'packetsSent',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamPacketLossPercent: {\n source: 'packetsLost',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamFramesEncodedPerSecond: {\n source: 'framesEncoded',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamFrameHeight: {\n source: 'frameHeight',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamFrameWidth: {\n source: 'frameWidth',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamJitterMs: {\n source: 'jitter',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamRoundTripTimeMs: {\n source: 'roundTripTime',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoDownstreamBitrate: {\n source: 'bytesReceived',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamPacketLossPercent: {\n source: 'packetsLost',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamPacketsReceived: {\n source: 'packetsReceived',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamFramesDecodedPerSecond: {\n source: 'framesDecoded',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamFrameHeight: {\n source: 'frameHeight',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamFrameWidth: {\n source: 'frameWidth',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamJitterMs: {\n source: 'jitter',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n videoDownstreamDelayMs: {\n source: 'jitterBufferMs',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n };\n /**\n * Observable metrics and related APIs\n */\n this.observableMetricSpec = {\n audioPacketsReceived: {\n source: 'packetsReceived',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n audioPacketsReceivedFractionLoss: {\n source: 'packetsLost',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n audioDecoderLoss: {\n source: 'decoderLoss',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n audioPacketsSent: {\n source: 'packetsSent',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n audioPacketLossPercent: {\n source: 'packetsLost',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n audioUpstreamRoundTripTimeMs: {\n source: 'roundTripTime',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n videoUpstreamBitrate: { source: 'bytesSent', media: ClientMetricReportMediaType_1.default.VIDEO, dir: ClientMetricReportDirection_1.default.UPSTREAM },\n videoPacketSentPerSecond: {\n source: 'packetsSent',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n audioSpeakerDelayMs: {\n source: 'jitterBufferMs',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n audioUpstreamJitterMs: {\n source: 'jitter',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n audioDownstreamJitterMs: {\n source: 'jitter',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n nackCountReceivedPerSecond: {\n source: 'nackCount',\n media: ClientMetricReportMediaType_1.default.VIDEO,\n dir: ClientMetricReportDirection_1.default.UPSTREAM,\n },\n availableOutgoingBitrate: { source: 'availableOutgoingBitrate' },\n availableIncomingBitrate: { source: 'availableIncomingBitrate' },\n currentRoundTripTimeMs: { source: 'currentRoundTripTime' },\n // Downstream AudioLevel is collected through RTCInboundRtpStreamStats\n // (https://developer.mozilla.org/en-US/docs/Web/API/RTCInboundRtpStreamStats)\n audioDownstreamLevel: {\n source: 'audioLevel',\n media: ClientMetricReportMediaType_1.default.AUDIO,\n dir: ClientMetricReportDirection_1.default.DOWNSTREAM,\n },\n // Upstream AudioLevel is collected through RTCAudioSourceStats\n // (https://developer.mozilla.org/en-US/docs/Web/API/RTCAudioSourceStats)\n // That one doesn't have ssrc field so we must collect it through Global Metric Report\n audioUpstreamLevel: {\n source: 'audioLevel',\n },\n };\n }\n getMetricMap(mediaType, direction) {\n switch (mediaType) {\n case ClientMetricReportMediaType_1.default.AUDIO:\n switch (direction) {\n case ClientMetricReportDirection_1.default.UPSTREAM:\n return this.audioUpstreamMetricMap;\n case ClientMetricReportDirection_1.default.DOWNSTREAM:\n return this.audioDownstreamMetricMap;\n }\n case ClientMetricReportMediaType_1.default.VIDEO:\n switch (direction) {\n case ClientMetricReportDirection_1.default.UPSTREAM:\n return this.videoUpstreamMetricMap;\n case ClientMetricReportDirection_1.default.DOWNSTREAM:\n return this.videoDownstreamMetricMap;\n }\n default:\n return this.globalMetricMap;\n }\n }\n getStreamDimensionMap() {\n return this.streamDimensionMap;\n }\n /**\n * Returns the value of the specific metric in observableMetricSpec.\n */\n getObservableMetricValue(metricName) {\n if (this.overriddenObservableMetrics.has(metricName)) {\n return this.overriddenObservableMetrics.get(metricName);\n }\n const observableMetricSpec = this.observableMetricSpec[metricName];\n const metricMap = this.getMetricMap(observableMetricSpec.media, observableMetricSpec.dir);\n const metricSpec = metricMap[observableMetricSpec.source];\n const { transform, source } = metricSpec;\n if (observableMetricSpec.hasOwnProperty('media')) {\n for (const ssrc in this.streamMetricReports) {\n const streamMetricReport = this.streamMetricReports[ssrc];\n if (streamMetricReport.direction === observableMetricSpec.dir &&\n streamMetricReport.mediaType === observableMetricSpec.media) {\n return source\n ? transform(source, Number(ssrc))\n : transform(observableMetricSpec.source, Number(ssrc));\n }\n }\n }\n else {\n return source ? transform(source) : transform(observableMetricSpec.source);\n }\n return 0;\n }\n /**\n * Returns the value of the specific metric in observableVideoMetricSpec.\n */\n getObservableVideoMetricValue(metricName, ssrcNum) {\n const observableVideoMetricSpec = this.observableVideoMetricSpec[metricName];\n const metricMap = this.getMetricMap(observableVideoMetricSpec.media, observableVideoMetricSpec.dir);\n const metricSpec = metricMap[observableVideoMetricSpec.source];\n const { transform, source } = metricSpec;\n return source\n ? transform(source, ssrcNum)\n : transform(observableVideoMetricSpec.source, ssrcNum);\n }\n /**\n * Returns the value of metrics in observableMetricSpec.\n */\n getObservableMetrics() {\n const metric = {};\n for (const metricName in this.observableMetricSpec) {\n metric[metricName] = this.getObservableMetricValue(metricName);\n }\n return metric;\n }\n /**\n * Returns the value of metrics in observableVideoMetricSpec for each SSRC.\n */\n getObservableVideoMetrics() {\n const videoStreamMetrics = {};\n if (!this.videoStreamIndex || !this.selfAttendeeId) {\n this.logger.error('Need to define VideoStreamIndex and selfAttendeeId if using getObservableVideoMetrics API');\n return videoStreamMetrics;\n }\n for (const ssrc in this.streamMetricReports) {\n if (this.streamMetricReports[ssrc].mediaType === ClientMetricReportMediaType_1.default.VIDEO) {\n const metric = {};\n for (const metricName in this.observableVideoMetricSpec) {\n if (this.observableVideoMetricSpec[metricName].dir ===\n this.streamMetricReports[ssrc].direction) {\n const metricValue = this.getObservableVideoMetricValue(metricName, Number(ssrc));\n if (!isNaN(metricValue)) {\n metric[metricName] = metricValue;\n }\n }\n }\n const groupId = this.streamMetricReports[ssrc].groupId;\n const streamId = this.streamMetricReports[ssrc].streamId;\n let attendeeId = '';\n /* istanbul ignore else */\n if (this.videoStreamIndex.attendeeIdForGroupId !== undefined) {\n attendeeId = groupId\n ? this.videoStreamIndex.attendeeIdForGroupId(groupId)\n : this.selfAttendeeId;\n }\n else {\n // This usage may be inaccurate if server side network adaptation (SSNA) is enabled,\n // and a simulcast sender has dropped their originally highest stream.\n //\n // We are ok with this given the unlikeliness of someone reimplmententing the entire\n // audio video controller (no way otherwise to inject your own index impl.), implementing\n // both simulcast and SSNA, but reusing this class :) .\n attendeeId = streamId\n ? this.videoStreamIndex.attendeeIdForStreamId(streamId)\n : this.selfAttendeeId;\n }\n videoStreamMetrics[attendeeId] = videoStreamMetrics[attendeeId]\n ? videoStreamMetrics[attendeeId]\n : {};\n videoStreamMetrics[attendeeId][ssrc] = metric;\n }\n }\n return videoStreamMetrics;\n }\n /**\n * Returns the raw RTCStatsReport from RTCPeerConnection.getStats() API.\n */\n getRTCStatsReport() {\n return this.rtcStatsReport;\n }\n /**\n * Clones the ClientMetricReport and returns it.\n */\n clone() {\n const cloned = new ClientMetricReport(this.logger, this.videoStreamIndex, this.selfAttendeeId);\n cloned.globalMetricReport = this.globalMetricReport;\n cloned.streamMetricReports = this.streamMetricReports;\n cloned.rtcStatsReport = this.rtcStatsReport;\n cloned.customStatsReports = this.customStatsReports;\n cloned.currentTimestampMs = this.currentTimestampMs;\n cloned.previousTimestampMs = this.previousTimestampMs;\n cloned.overriddenObservableMetrics = this.overriddenObservableMetrics;\n return cloned;\n }\n /**\n * Prints out the globalMetricReport, streamMetricReports and the corresponding timestamps from the current ClientMetricReport.\n */\n print() {\n const clientMetricReport = {\n globalMetricReport: this.globalMetricReport,\n streamMetricReports: this.streamMetricReports,\n currentTimestampMs: this.currentTimestampMs,\n previousTimestampMs: this.previousTimestampMs,\n };\n this.logger.debug(() => {\n return `Client Metric Report: ${JSON.stringify(clientMetricReport)}`;\n });\n }\n /**\n * Removes the SSRCs that are no longer valid.\n */\n removeDestroyedSsrcs() {\n for (const ssrc in this.streamMetricReports) {\n if (!this.currentSsrcs[ssrc]) {\n delete this.streamMetricReports[ssrc];\n }\n }\n }\n /**\n * Overrides a specific observable metric value (e.g. with one that didn't come from the WebRTC report)\n */\n overrideObservableMetric(name, value) {\n this.overriddenObservableMetrics.set(name, value);\n }\n}\nexports.default = ClientMetricReport;\n//# sourceMappingURL=ClientMetricReport.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ClientVideoStreamReceivingReport {\n}\nexports.default = ClientVideoStreamReceivingReport;\n//# sourceMappingURL=ClientVideoStreamReceivingReport.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ConnectionHealthData {\n constructor() {\n this.connectionStartTimestampMs = 0;\n this.consecutiveStatsWithNoPackets = 0;\n this.consecutiveStatsWithNoAudioPacketsSent = 0;\n this.lastPacketLossInboundTimestampMs = 0;\n this.lastGoodSignalTimestampMs = 0;\n this.lastWeakSignalTimestampMs = 0;\n this.lastNoSignalTimestampMs = 0;\n this.consecutiveMissedPongs = 0;\n this.packetsReceivedInLastMinute = [];\n this.fractionPacketsLostInboundInLastMinute = [];\n this.audioSpeakerDelayMs = 0;\n this.connectionStartTimestampMs = Date.now();\n this.lastGoodSignalTimestampMs = Date.now();\n }\n static isTimestampRecent(timestampMs, recentDurationMs) {\n return Date.now() < timestampMs + recentDurationMs;\n }\n setConnectionStartTime() {\n this.connectionStartTimestampMs = Date.now();\n this.lastGoodSignalTimestampMs = Date.now();\n }\n reset() {\n this.connectionStartTimestampMs = 0;\n this.consecutiveStatsWithNoPackets = 0;\n this.consecutiveStatsWithNoAudioPacketsSent = 0;\n this.lastPacketLossInboundTimestampMs = 0;\n this.lastGoodSignalTimestampMs = 0;\n this.lastWeakSignalTimestampMs = 0;\n this.lastNoSignalTimestampMs = 0;\n this.consecutiveMissedPongs = 0;\n this.packetsReceivedInLastMinute = [];\n this.fractionPacketsLostInboundInLastMinute = [];\n this.audioSpeakerDelayMs = 0;\n this.connectionStartTimestampMs = Date.now();\n this.lastGoodSignalTimestampMs = Date.now();\n }\n isConnectionStartRecent(recentDurationMs) {\n return ConnectionHealthData.isTimestampRecent(this.connectionStartTimestampMs, recentDurationMs);\n }\n isLastPacketLossRecent(recentDurationMs) {\n return ConnectionHealthData.isTimestampRecent(this.lastPacketLossInboundTimestampMs, recentDurationMs);\n }\n isGoodSignalRecent(recentDurationMs) {\n return ConnectionHealthData.isTimestampRecent(this.lastGoodSignalTimestampMs, recentDurationMs);\n }\n isWeakSignalRecent(recentDurationMs) {\n return ConnectionHealthData.isTimestampRecent(this.lastWeakSignalTimestampMs, recentDurationMs);\n }\n isNoSignalRecent(recentDurationMs) {\n return ConnectionHealthData.isTimestampRecent(this.lastNoSignalTimestampMs, recentDurationMs);\n }\n clone() {\n const cloned = new ConnectionHealthData();\n cloned.connectionStartTimestampMs = this.connectionStartTimestampMs;\n cloned.consecutiveStatsWithNoPackets = this.consecutiveStatsWithNoPackets;\n cloned.consecutiveStatsWithNoAudioPacketsSent = this.consecutiveStatsWithNoAudioPacketsSent;\n cloned.lastPacketLossInboundTimestampMs = this.lastPacketLossInboundTimestampMs;\n cloned.lastGoodSignalTimestampMs = this.lastGoodSignalTimestampMs;\n cloned.lastWeakSignalTimestampMs = this.lastWeakSignalTimestampMs;\n cloned.lastNoSignalTimestampMs = this.lastNoSignalTimestampMs;\n cloned.consecutiveMissedPongs = this.consecutiveMissedPongs;\n cloned.packetsReceivedInLastMinute = this.packetsReceivedInLastMinute.slice(0);\n cloned.fractionPacketsLostInboundInLastMinute = this.fractionPacketsLostInboundInLastMinute.slice(0);\n cloned.audioSpeakerDelayMs = this.audioSpeakerDelayMs;\n return cloned;\n }\n setConsecutiveMissedPongs(pongs) {\n this.consecutiveMissedPongs = pongs;\n }\n setConsecutiveStatsWithNoPackets(stats) {\n this.consecutiveStatsWithNoPackets = stats;\n }\n setConsecutiveStatsWithNoAudioPacketsSent(stats) {\n this.consecutiveStatsWithNoAudioPacketsSent = stats;\n }\n setLastPacketLossInboundTimestampMs(timeStamp) {\n this.lastPacketLossInboundTimestampMs = timeStamp;\n }\n setLastNoSignalTimestampMs(timeStamp) {\n this.lastNoSignalTimestampMs = timeStamp;\n }\n setLastWeakSignalTimestampMs(timeStamp) {\n this.lastWeakSignalTimestampMs = timeStamp;\n }\n setLastGoodSignalTimestampMs(timeStamp) {\n this.lastGoodSignalTimestampMs = timeStamp;\n }\n setAudioSpeakerDelayMs(delayMs) {\n this.audioSpeakerDelayMs = delayMs;\n }\n}\nexports.default = ConnectionHealthData;\n//# sourceMappingURL=ConnectionHealthData.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ConnectionHealthPolicyConfiguration {\n constructor() {\n this.minHealth = 0;\n this.maxHealth = 1;\n this.initialHealth = 1;\n this.connectionUnhealthyThreshold = 25;\n this.noSignalThresholdTimeMs = 10000;\n this.connectionWaitTimeMs = 10000;\n this.zeroBarsNoSignalTimeMs = 5000;\n this.oneBarWeakSignalTimeMs = 5000;\n this.twoBarsTimeMs = 5000;\n this.threeBarsTimeMs = 10000;\n this.fourBarsTimeMs = 20000;\n this.fiveBarsTimeMs = 60000;\n this.cooldownTimeMs = 60000;\n this.pastSamplesToConsider = 15;\n this.goodSignalTimeMs = 15000;\n this.fractionalLoss = 0.5;\n this.packetsExpected = 50;\n this.maximumTimesToWarn = 2;\n this.missedPongsLowerThreshold = 1;\n this.missedPongsUpperThreshold = 4;\n this.maximumAudioDelayMs = 60000;\n this.maximumAudioDelayDataPoints = 10;\n /**\n * The number of samples required to consider sending-audio to be unhealthy\n *\n * The default value is derived from the median for time taken for receiving an attendee presence message from the\n * server after joining. Attendee presence is only received when the client sends audio packets to the server, so\n * this metric is used as a proxy.\n */\n this.sendingAudioFailureSamplesToConsider = 2;\n /**\n * The purpose of this field is to add a wait time/delay to our evaluation of sending audio health\n * as the microphone may sometimes cause a delay in sending audio packets during the initial stages of a connection.\n */\n this.sendingAudioFailureInitialWaitTimeMs = 3000;\n }\n}\nexports.default = ConnectionHealthPolicyConfiguration;\n//# sourceMappingURL=ConnectionHealthPolicyConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ContentShareConstants;\n(function (ContentShareConstants) {\n ContentShareConstants[\"Modality\"] = \"#content\";\n})(ContentShareConstants || (ContentShareConstants = {}));\nexports.default = ContentShareConstants;\n//# sourceMappingURL=ContentShareConstants.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[IntervalScheduler]] calls the callback every intervalMs milliseconds.\n */\nclass IntervalScheduler {\n constructor(intervalMs) {\n this.intervalMs = intervalMs;\n }\n start(callback) {\n this.stop();\n this.timer = setInterval(callback, this.intervalMs);\n }\n stop() {\n if (this.timer === undefined) {\n return;\n }\n clearInterval(this.timer);\n this.timer = undefined;\n }\n running() {\n return this.timer !== undefined;\n }\n}\nexports.default = IntervalScheduler;\n//# sourceMappingURL=IntervalScheduler.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nclass MediaDeviceProxyHandler {\n constructor() {\n this.scheduler = null;\n this.devices = null;\n this.deviceChangeListeners = new Set();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types\n this.get = (target, property, receiver) => {\n if (!Reflect.has(target, property)) {\n return undefined;\n }\n if (!('ondevicechange' in navigator.mediaDevices)) {\n if (property === 'addEventListener') {\n return this.patchAddEventListener(target, property, receiver);\n }\n else if (property === 'removeEventListener') {\n return this.patchRemoveEventListener(target, property, receiver);\n }\n }\n const value = Reflect.get(target, property, receiver);\n return typeof value === 'function' ? value.bind(target) : value;\n };\n this.patchAddEventListener = (target, property, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n receiver) => {\n const value = Reflect.get(target, property, receiver);\n return (type, listener, options) => {\n if (type === 'devicechange') {\n this.deviceChangeListeners.add(listener);\n if (!this.scheduler) {\n this.scheduler = new IntervalScheduler_1.default(MediaDeviceProxyHandler.INTERVAL_MS);\n this.scheduler.start(this.pollDeviceLists);\n }\n }\n else {\n return Reflect.apply(value, target, [type, listener, options]);\n }\n };\n };\n this.patchRemoveEventListener = (target, property, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n receiver) => {\n const value = Reflect.get(target, property, receiver);\n return (type, listener, options) => {\n if (type === 'devicechange') {\n this.deviceChangeListeners.delete(listener);\n if (this.deviceChangeListeners.size === 0 && this.scheduler) {\n this.scheduler.stop();\n this.scheduler = null;\n }\n }\n else {\n return Reflect.apply(value, target, [type, listener, options]);\n }\n };\n };\n this.pollDeviceLists = () => __awaiter(this, void 0, void 0, function* () {\n const newDevices = yield this.sortedDeviceList();\n if (this.devices) {\n const changed = newDevices.length !== this.devices.length ||\n newDevices.some((device, index) => {\n return device.deviceId !== this.devices[index].deviceId;\n });\n if (changed) {\n this.handleDeviceChangeEvent();\n }\n }\n this.devices = newDevices;\n });\n }\n sortedDeviceList() {\n return __awaiter(this, void 0, void 0, function* () {\n // @ts-ignore\n const newDevices = yield navigator.mediaDevices.enumerateDevices();\n return newDevices.sort((device1, device2) => {\n if (device1.deviceId < device2.deviceId) {\n return 1;\n }\n if (device1.deviceId > device2.deviceId) {\n return -1;\n }\n return 0;\n });\n });\n }\n handleDeviceChangeEvent() {\n for (const listener of this.deviceChangeListeners) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n if (this.deviceChangeListeners.has(listener)) {\n const event = new Event('devicechange');\n if (typeof listener === 'function') {\n listener(event);\n }\n else {\n listener.handleEvent(event);\n }\n }\n });\n }\n }\n}\nexports.default = MediaDeviceProxyHandler;\nMediaDeviceProxyHandler.INTERVAL_MS = 1000;\n//# sourceMappingURL=MediaDeviceProxyHandler.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MediaDeviceProxyHandler_1 = __importDefault(require(\"./MediaDeviceProxyHandler\"));\nclass DefaultMediaDeviceFactory {\n constructor() {\n this.isMediaDevicesSupported = typeof navigator !== 'undefined' && !!navigator.mediaDevices;\n }\n create() {\n if (!this.isMediaDevicesSupported) {\n throw new Error(`navigator.mediaDevices is not supported`);\n }\n else {\n return new Proxy(navigator.mediaDevices, new MediaDeviceProxyHandler_1.default());\n }\n }\n}\nexports.default = DefaultMediaDeviceFactory;\n//# sourceMappingURL=DefaultMediaDeviceFactory.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A simple promise queue to enforce the order of async APIs for example, start/stop video/audio input.\n */\nclass PromiseQueue {\n constructor() {\n this.queue = Promise.resolve();\n }\n // eslint-disable-next-line\n add(func) {\n return new Promise((resolve, reject) => {\n this.queue = this.queue.then(func).then(resolve).catch(reject);\n });\n }\n}\nexports.default = PromiseQueue;\n//# sourceMappingURL=PromiseQueue.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.None = exports.Some = exports.Maybe = void 0;\nclass Maybe {\n static of(value) {\n return value === undefined || value === null ? None.of() : Some.of(value);\n }\n}\nexports.Maybe = Maybe;\nclass Some {\n constructor(value) {\n this.value = value;\n this.isSome = true;\n this.isNone = false;\n }\n map(f) {\n return Maybe.of(f(this.value));\n }\n flatMap(f) {\n return f(this.value);\n }\n get() {\n return this.value;\n }\n getOrElse(_value) {\n return this.value;\n }\n defaulting(value) {\n return Maybe.of(this.getOrElse(value));\n }\n static of(value) {\n if (value === null || value === undefined) {\n throw new Error('value is ${value}');\n }\n return new Some(value);\n }\n}\nexports.Some = Some;\nclass None {\n constructor() {\n this.isSome = false;\n this.isNone = true;\n }\n get() {\n throw new Error('value is null');\n }\n getOrElse(value) {\n return value;\n }\n map(_f) {\n return new None();\n }\n flatMap(_f) {\n return new None();\n }\n defaulting(value) {\n return Maybe.of(this.getOrElse(value));\n }\n static of() {\n return new None();\n }\n}\nexports.None = None;\n//# sourceMappingURL=Types.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DefaultVideoFrameProcessorTimer {\n constructor() {\n this.workerTimer = undefined;\n this.callback = undefined;\n this.workerTimer = this.createWorkerTimer();\n }\n // Create a timer that exists within a web worker. This timer will be used to\n // retrigger the process call whenever time expires.\n createWorkerTimer() {\n try {\n // Blob representing a script that will start a timer for the length\n // of the message posted to it. After timer expiration, it will post\n // a message back to the main thread holding the timerID\n const timerBlob = new Blob([\n `self.onmessage = async function(e){ \n var timerID = null;\n const awaitTimeout = delay => new Promise( resolve => {\n timerID = setTimeout(resolve, delay);\n })\n await awaitTimeout(e.data);\n postMessage(timerID);\n }`,\n ], { type: 'application/javascript' });\n // Create the worker and link our process call to execute on\n // every message it posts\n const worker = new Worker(window.URL.createObjectURL(timerBlob));\n return worker;\n }\n catch (error) {\n // If blob: is not passed as a worker-src to csp, then the\n // worker timer will fail... therefore no support\n }\n }\n start(delay, callback) {\n return __awaiter(this, void 0, void 0, function* () {\n this.callback = callback;\n if (this.workerTimer) {\n this.workerTimer.onmessage = event => {\n this.lastTimeout = event.data;\n this.callback();\n };\n this.workerTimer.postMessage(delay);\n }\n else {\n this.lastTimeout = setTimeout(() => {\n this.callback();\n }, delay);\n }\n });\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.callback = undefined;\n if (this.lastTimeout) {\n clearTimeout(this.lastTimeout);\n this.lastTimeout = undefined;\n }\n if (this.workerTimer) {\n this.workerTimer.terminate();\n this.workerTimer = undefined;\n }\n });\n }\n}\nexports.default = DefaultVideoFrameProcessorTimer;\n//# sourceMappingURL=DefaultVideoFrameProcessorTimer.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst CanvasVideoFrameBuffer_1 = __importDefault(require(\"./CanvasVideoFrameBuffer\"));\nconst DefaultVideoFrameProcessorTimer_1 = __importDefault(require(\"./DefaultVideoFrameProcessorTimer\"));\nconst DEFAULT_FRAMERATE = 15;\n/**\n * [[DefaultVideoFrameProcessorPipeline]] implements {@link VideoFrameProcessorPipeline}.\n * It constructs a buffer {@link CanvasVideoFrameBuffer} as source by default and invokes processor based on `framerate`.\n * The default output type is `MediaStream`.\n */\nclass DefaultVideoFrameProcessorPipeline {\n constructor(logger, stages, timer = new DefaultVideoFrameProcessorTimer_1.default()) {\n this.logger = logger;\n this.stages = stages;\n this.fr = DEFAULT_FRAMERATE;\n // initialize with dummy inactive MediaStream to keep strict type\n this.outputMediaStream = new MediaStream();\n this.videoInput = document.createElement('video');\n this.canvasOutput = document.createElement('canvas');\n this.outputCtx = this.canvasOutput.getContext('2d');\n this.canvasInput = document.createElement('canvas');\n this.inputCtx = this.canvasInput.getContext('2d');\n this.inputVideoStream = null;\n this.sourceBuffers = [];\n this.destBuffers = [];\n this.observers = new Set();\n this.hasStarted = false;\n this.process = (_event) => __awaiter(this, void 0, void 0, function* () {\n if (!this.inputVideoStream) {\n return;\n }\n const processVideoStart = performance.now();\n // videoWidth is intrinsic video width\n if (this.videoInput.videoWidth) {\n if (this.canvasInput.width !== this.videoInput.videoWidth) {\n this.canvasInput.width = this.videoInput.videoWidth;\n this.canvasInput.height = this.videoInput.videoHeight;\n this.sourceBuffers[0].height = this.canvasInput.height;\n this.sourceBuffers[0].width = this.canvasInput.width;\n this.sourceBuffers[0].framerate = this.framerate;\n }\n this.inputCtx.drawImage(this.videoInput, 0, 0);\n }\n // processes input buffers\n let buffers = [];\n buffers.push(this.sourceBuffers[0]);\n try {\n for (const proc of this.processors) {\n buffers = yield proc.process(buffers);\n }\n }\n catch (_error) {\n this.forEachObserver(obs => {\n if (obs.processingDidFailToStart) {\n obs.processingDidFailToStart();\n }\n });\n return;\n }\n this.destBuffers = buffers;\n let imageSource;\n try {\n imageSource = yield this.destBuffers[0].asCanvasImageSource();\n }\n catch (error) {\n /* istanbul ignore else: Check exists incase stop is interleaved with async function calls; hard to mock */\n if (this.inputVideoStream) {\n this.logger.info('buffers are destroyed and pipeline could not start');\n this.forEachObserver(obs => {\n if (obs.processingDidFailToStart) {\n obs.processingDidFailToStart();\n }\n });\n }\n return;\n }\n // finally draws the image\n const frameWidth = imageSource.width;\n const frameHeight = imageSource.height;\n if (frameWidth !== 0 && frameHeight !== 0) {\n if (this.canvasOutput.width !== frameWidth && this.canvasOutput.height !== frameHeight) {\n this.canvasOutput.width = frameWidth;\n this.canvasOutput.height = frameHeight;\n }\n this.outputCtx.drawImage(imageSource, 0, 0, frameWidth, frameHeight, 0, 0, frameWidth, frameHeight);\n if (!this.hasStarted) {\n this.hasStarted = true;\n this.forEachObserver(observer => {\n if (observer.processingDidStart) {\n observer.processingDidStart();\n }\n });\n }\n }\n // measures time\n const processVideoLatency = performance.now() - processVideoStart;\n const leave = (1000 * 2) / this.framerate - processVideoLatency; // half fps\n const nextFrameDelay = Math.max(0, 1000 / this.framerate - processVideoLatency);\n if (leave <= 0) {\n this.forEachObserver(obs => {\n if (obs.processingLatencyTooHigh) {\n obs.processingLatencyTooHigh(processVideoLatency);\n }\n });\n }\n yield this.timer.start(nextFrameDelay, this.process.bind(this));\n });\n this.timer = timer;\n }\n destroy() {\n this.stop();\n if (this.stages) {\n for (const stage of this.stages) {\n stage.destroy();\n }\n }\n this.timer.destroy();\n }\n get framerate() {\n return this.fr;\n }\n // A negative framerate will cause `captureStream` to throw `NotSupportedError`.\n // The setter prevents this by switching to the default framerate if less than 0.\n set framerate(value) {\n this.fr = value < 0 ? DEFAULT_FRAMERATE : value;\n }\n stop() {\n // empty stream, stop pipeline\n // null input media stream stops the pipeline.\n this.videoInput.removeEventListener('loadedmetadata', this.process);\n this.videoInput.srcObject = null;\n // Clean the input stream and buffers.\n this.destroyInputMediaStreamAndBuffers();\n // Stop all the output tracks, but don't discard the media stream,\n // because it's how other parts of the codebase recognize when\n // a selected stream is part of this transform device.\n if (this.outputMediaStream) {\n for (const track of this.outputMediaStream.getVideoTracks()) {\n track.stop();\n }\n }\n if (this.hasStarted) {\n this.hasStarted = false;\n this.forEachObserver(observer => {\n if (observer.processingDidStop) {\n observer.processingDidStop();\n }\n });\n }\n }\n addObserver(observer) {\n this.observers.add(observer);\n }\n removeObserver(observer) {\n this.observers.delete(observer);\n }\n getInputMediaStream() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.inputVideoStream;\n });\n }\n getActiveOutputMediaStream() {\n if (this.isOutputMediaStreamActive()) {\n return this.outputMediaStream;\n }\n this.outputMediaStream = this.canvasOutput.captureStream(this.framerate);\n this.cloneInputAudioTracksToOutput();\n return this.outputMediaStream;\n }\n /**\n * `inputMediaStream` is by default used to construct one {@link CanvasVideoFrameBuffer}\n * The buffer will be fed into the first {@link VideoFrameProcessor}.\n */\n setInputMediaStream(inputMediaStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!inputMediaStream) {\n this.stop();\n return;\n }\n if (inputMediaStream.getVideoTracks().length === 0) {\n this.logger.error('No video tracks in input media stream, ignoring');\n return;\n }\n this.inputVideoStream = inputMediaStream;\n const settings = this.inputVideoStream.getVideoTracks()[0].getSettings();\n this.logger.info(`processing pipeline input stream settings ${JSON.stringify(settings)}`);\n this.canvasOutput.width = settings.width;\n this.canvasOutput.height = settings.height;\n this.videoInput.addEventListener('loadedmetadata', this.process);\n this.videoInput.srcObject = this.inputVideoStream;\n // avoid iOS safari full screen video\n this.videoInput.setAttribute('playsinline', 'true');\n // create sources\n const canvasBuffer = new CanvasVideoFrameBuffer_1.default(this.canvasInput);\n this.sourceBuffers.push(canvasBuffer);\n this.videoInput.load();\n try {\n yield this.videoInput.play();\n }\n catch (_a) {\n this.logger.warn('Video element play() overrided by another load().');\n }\n this.cloneInputAudioTracksToOutput();\n });\n }\n cloneInputAudioTracksToOutput() {\n if (!this.isOutputMediaStreamActive() || this.inputVideoStream === null) {\n this.logger.info('Not cloning input audio tracks to output, do not have media streams ready');\n return; // Just wait for `getActiveOutputMediaStream`\n }\n // Remove current audio tracks from output\n for (const audioTrack of this.outputMediaStream.getAudioTracks()) {\n this.logger.info(`Removing audio track ${audioTrack.id} from output stream`);\n this.outputMediaStream.removeTrack(audioTrack);\n }\n for (const audioTrack of this.inputVideoStream.getAudioTracks()) {\n this.logger.info(`Adding audio track ${audioTrack.id} to output stream`);\n this.outputMediaStream.addTrack(audioTrack);\n }\n }\n isOutputMediaStreamActive() {\n return this.outputMediaStream && this.outputMediaStream.active;\n }\n set processors(stages) {\n this.stages = stages;\n }\n get processors() {\n return this.stages;\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observers) {\n setTimeout(() => {\n observerFunc(observer);\n }, 0);\n }\n }\n destroyInputMediaStreamAndBuffers() {\n if (this.inputVideoStream) {\n for (const track of this.inputVideoStream.getTracks()) {\n track.stop();\n }\n }\n this.inputVideoStream = null;\n for (const buffer of this.sourceBuffers) {\n buffer.destroy();\n }\n this.sourceBuffers = [];\n }\n}\nexports.default = DefaultVideoFrameProcessorPipeline;\n//# sourceMappingURL=DefaultVideoFrameProcessorPipeline.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultVideoFrameProcessorPipeline_1 = __importDefault(require(\"./DefaultVideoFrameProcessorPipeline\"));\n/**\n * [[DefaultVideoTransformDevice]] is an augmented [[VideoInputDevice]].\n * It transform the input {@link Device} with an array of {@link VideoFrameProcessor} to produce a `MediaStream`.\n */\nclass DefaultVideoTransformDevice {\n constructor(logger, device, processors, browserBehavior = new DefaultBrowserBehavior_1.default()) {\n this.logger = logger;\n this.device = device;\n this.processors = processors;\n this.browserBehavior = browserBehavior;\n this.observers = new Set();\n this.pipe = new DefaultVideoFrameProcessorPipeline_1.default(this.logger, this.processors);\n this.pipe.addObserver(this);\n }\n /**\n * getter for `outputMediaStream`.\n * `outputMediaStream` is returned by internal {@link VideoFrameProcessorPipeline}.\n * It is possible, but unlikely, that this accessor will throw.\n */\n get outputMediaStream() {\n return this.pipe.outputMediaStream;\n }\n /** @internal */\n passEventControllerToProcessors(eventController) {\n /* istanbul ignore else */\n if (this.pipe.processors) {\n for (const processor of this.pipe.processors) {\n // Only certain processors are configured to provide event reporting,\n // so here will confirm that the processor has event controller capablility\n if (typeof processor.setEventController === 'function') {\n processor.setEventController(eventController);\n }\n }\n }\n }\n /**\n * `chooseNewInnerDevice` preserves the inner pipeline and processing state and switches\n * the inner device. Since the pipeline and processors are shared with the new transform device\n * only one transform device can be used.\n */\n chooseNewInnerDevice(newDevice) {\n const newTransformDevice = new DefaultVideoTransformDevice(this.logger, newDevice, this.processors, this.browserBehavior);\n newTransformDevice.pipe = this.pipe;\n return newTransformDevice;\n }\n /**\n * Return the inner device as provided during construction.\n */\n getInnerDevice() {\n return this.device;\n }\n intrinsicDevice() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.device;\n });\n }\n /**\n * Create {@link VideoFrameProcessorPipeline} if there is not a existing one and start video processors.\n * Returns output `MediaStream` produced by {@link VideoFrameProcessorPipeline}.\n */\n transformStream(mediaStream) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.pipe.setInputMediaStream(mediaStream);\n this.inputMediaStream = mediaStream;\n return this.pipe.getActiveOutputMediaStream();\n });\n }\n /**\n * onOutputStreamDisconnect is called when device controller wants to detach\n * the transform device. The default behavior is to stop the output\n * media stream and release the input the media stream. If the input media stream\n * is the provided device, it will not be released.\n */\n onOutputStreamDisconnect() {\n this.logger.info('DefaultVideoTransformDevice: detach stopping input media stream');\n const deviceIsMediaStream = this.device && this.device.id;\n // Stop processing but keep the pipe and processors\n this.pipe.stop();\n // Turn off the camera, unless device is a MediaStream\n if (!deviceIsMediaStream) {\n if (this.inputMediaStream) {\n for (const track of this.inputMediaStream.getVideoTracks()) {\n track.stop();\n }\n }\n }\n }\n /**\n * Dispose of the inner workings of the transform device, including pipeline and processors.\n * `stop` can only be called when the transform device is not used by device controller anymore.\n * After `stop` is called, all transform devices which share the pipeline must be discarded.\n */\n stop() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.inputMediaStream) {\n for (const track of this.inputMediaStream.getVideoTracks()) {\n track.stop();\n }\n }\n this.pipe.destroy();\n this.inputMediaStream = null;\n });\n }\n /**\n * Add an observer to receive notifications about lifecycle events.\n * See {@link DefaultVideoTransformDeviceObserver} for details.\n * If the observer has already been added, this method call has no effect.\n */\n addObserver(observer) {\n this.observers.add(observer);\n }\n /**\n * Remove an existing observer. If the observer has not been previously. this method call has no effect.\n */\n removeObserver(observer) {\n this.observers.delete(observer);\n }\n processingDidStart() {\n this.logger.info('video transform device processing started');\n this.forEachObserver(observer => {\n if (observer.processingDidStart) {\n observer.processingDidStart();\n }\n });\n }\n processingLatencyTooHigh(latencyMs) {\n this.forEachObserver(observer => {\n if (observer.processingLatencyTooHigh) {\n observer.processingLatencyTooHigh(latencyMs);\n }\n });\n }\n processingDidFailToStart() {\n this.logger.info('video transform device processing failed to start');\n this.forEachObserver(observer => {\n if (observer.processingDidFailToStart) {\n observer.processingDidFailToStart();\n }\n });\n }\n processingDidStop() {\n this.logger.info('video transform device processing stopped');\n this.forEachObserver(observer => {\n if (observer.processingDidStop) {\n observer.processingDidStop();\n }\n });\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observers) {\n setTimeout(() => {\n observerFunc(observer);\n }, 0);\n }\n }\n}\nexports.default = DefaultVideoTransformDevice;\n//# sourceMappingURL=DefaultVideoTransformDevice.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ContentShareConstants_1 = __importDefault(require(\"../contentsharecontroller/ContentShareConstants\"));\nclass DefaultModality {\n constructor(_id) {\n this._id = _id;\n }\n id() {\n return this._id;\n }\n base() {\n if (!this._id) {\n return '';\n }\n return this._id.split(DefaultModality.MODALITY_SEPARATOR)[0];\n }\n modality() {\n if (!this._id) {\n return '';\n }\n const components = this._id.split(DefaultModality.MODALITY_SEPARATOR);\n if (components.length === 2) {\n return components[1];\n }\n return '';\n }\n hasModality(modality) {\n return modality !== '' && this.modality() === modality;\n }\n withModality(modality) {\n const m = new DefaultModality(this.base() + DefaultModality.MODALITY_SEPARATOR + modality);\n if (modality === '' ||\n this.base() === '' ||\n new DefaultModality(m._id).modality() !== modality) {\n return new DefaultModality(this.base());\n }\n return m;\n }\n}\nexports.default = DefaultModality;\nDefaultModality.MODALITY_SEPARATOR = ContentShareConstants_1.default.Modality[0];\nDefaultModality.MODALITY_CONTENT = ContentShareConstants_1.default.Modality.substr(1);\n//# sourceMappingURL=DefaultModality.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[VideoTileState]] encapsulates the state of a [[VideoTile]]\n */\nclass VideoTileState {\n constructor() {\n /**\n * The unique identifier for the [[VideoTile]] managed by [[VideoTileController]]. Each attendee can have at most one tileId.\n */\n this.tileId = null;\n /**\n * Indication of whether tile is associated with local video.\n */\n this.localTile = false;\n /**\n * Indication of whether the tile associated with the local attendee has started to play.\n */\n this.localTileStarted = false;\n /**\n * Indication of whether the tile has content-sharing video.\n */\n this.isContent = false;\n /**\n * Indication of whether the tile has active video stream. This value may be somewhat arbitrary in how it is calculated,\n * it is recommended to use the more specific values (e.g. `paused`, `boundVideoElement`, and `boundVideoStream`) to\n * determine activity as appropriate for your application.\n */\n this.active = false;\n /**\n * Indication of whether the tile has paused video stream.\n */\n this.paused = false;\n /**\n * Indication of whether the remote video is paused at publishing attendee. This field is not supported.\n */\n this.poorConnection = false;\n /**\n * The attendee id associated with the [[VideoTile]].\n */\n this.boundAttendeeId = null;\n /**\n * The user id associated with the [[VideoTile]].\n */\n this.boundExternalUserId = null;\n /**\n * The video stream bound with the [[VideoTile]].\n */\n this.boundVideoStream = null;\n /**\n * The HTMLVideoElement bound with the [[VideoTile]].\n */\n this.boundVideoElement = null;\n /**\n * The nameplate for the [[VideoTile]]. SDK users should use boundExternalUserId for user id instead of this field.\n */\n this.nameplate = null;\n /**\n * The intrinsic width of the video stream upon binding with the [[VideoTile]].\n * Video stream intrinsic width could change and developers should use HTMLVideoElement listener for actual intrinsic width.\n */\n this.videoStreamContentWidth = null;\n /**\n * The intrinsic height of the video stream upon binding with the [[VideoTile]]\n * Video stream intrinsic height could change and developers should use HTMLVideoElement listener for actual intrinsic height.\n */\n this.videoStreamContentHeight = null;\n /**\n * The CSS width in pixel of the HTMLVideoElement upon binding with the [[VideoTile]].\n */\n this.videoElementCSSWidthPixels = null;\n /**\n * The CSS height in pixel of the HTMLVideoElement upon binding with the [[VideoTile]].\n */\n this.videoElementCSSHeightPixels = null;\n /**\n * The device pixel ratio of the current display monitor.\n */\n this.devicePixelRatio = 0;\n /**\n * The physical width in pixel of the HTMLVideoElement upon binding with the [[VideoTile]].\n */\n this.videoElementPhysicalWidthPixels = null;\n /**\n * The physical height in pixel of the HTMLVideoElement upon binding with the [[VideoTile]].\n */\n this.videoElementPhysicalHeightPixels = null;\n /**\n * The unique identifier published by server to associate with bound video stream. It is defined in [[SignalingProtocol.proto]].\n * Developers should avoid using this field directly.\n */\n this.streamId = null;\n }\n clone() {\n const cloned = new VideoTileState();\n cloned.tileId = this.tileId;\n cloned.localTile = this.localTile;\n cloned.isContent = this.isContent;\n cloned.active = this.active;\n cloned.paused = this.paused;\n cloned.poorConnection = this.poorConnection;\n cloned.boundAttendeeId = this.boundAttendeeId;\n cloned.boundExternalUserId = this.boundExternalUserId;\n cloned.boundVideoStream = this.boundVideoStream;\n cloned.boundVideoElement = this.boundVideoElement;\n cloned.nameplate = this.nameplate;\n cloned.videoStreamContentWidth = this.videoStreamContentWidth;\n cloned.videoStreamContentHeight = this.videoStreamContentHeight;\n cloned.videoElementCSSWidthPixels = this.videoElementCSSWidthPixels;\n cloned.videoElementCSSHeightPixels = this.videoElementCSSHeightPixels;\n cloned.devicePixelRatio = this.devicePixelRatio;\n cloned.videoElementPhysicalWidthPixels = this.videoElementPhysicalWidthPixels;\n cloned.videoElementPhysicalHeightPixels = this.videoElementPhysicalHeightPixels;\n cloned.streamId = this.streamId;\n return cloned;\n }\n}\nexports.default = VideoTileState;\n//# sourceMappingURL=VideoTileState.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst VideoTileState_1 = __importDefault(require(\"./VideoTileState\"));\nclass DefaultVideoTile {\n constructor(tileId, localTile, tileController, devicePixelRatioMonitor) {\n this.tileController = tileController;\n this.devicePixelRatioMonitor = devicePixelRatioMonitor;\n this.tileState = new VideoTileState_1.default();\n this.tileState.tileId = tileId;\n this.tileState.localTile = localTile;\n this.devicePixelRatioMonitor.registerObserver(this);\n }\n /**\n * Connect a video stream to a video element by setting the srcObject of the video element to the video stream.\n * @param videoStream The video stream input.\n * @param videoElement The video element input.\n * @param localTile Flag to indicate whether this is a local video.\n */\n static connectVideoStreamToVideoElement(videoStream, videoElement, localTile) {\n const transform = localTile && videoStream.getVideoTracks()[0].getSettings().facingMode !== 'environment'\n ? 'rotateY(180deg)'\n : '';\n DefaultVideoTile.setVideoElementFlag(videoElement, 'disablePictureInPicture', localTile);\n DefaultVideoTile.setVideoElementFlag(videoElement, 'disableRemotePlayback', localTile);\n if (videoElement.style.transform !== transform) {\n videoElement.style.transform = transform;\n }\n if (videoElement.hasAttribute('controls')) {\n videoElement.removeAttribute('controls');\n }\n if (!videoElement.hasAttribute('autoplay')) {\n videoElement.setAttribute('autoplay', 'true');\n }\n // playsinline is needed for video to play in iPhone in non-fullscreen mode.\n // See https://developer.apple.com/documentation/webkit/safari_tools_and_features/delivering_video_content_for_safari#3030250\n if (!videoElement.hasAttribute('playsinline')) {\n videoElement.setAttribute('playsinline', 'true');\n }\n // Note that setting the *attribute* 'muted' affects whether the element\n // is muted *by default* (`.defaultMuted`), not whether it is currently muted (`.muted`).\n // https://html.spec.whatwg.org/#dom-media-defaultmuted\n if (!videoElement.hasAttribute('muted')) {\n // The default value…\n videoElement.setAttribute('muted', 'true');\n // … and the value right now.\n videoElement.muted = true;\n }\n if (videoElement.srcObject !== videoStream) {\n videoElement.srcObject = videoStream;\n // In Safari, a hidden video element can show a black screen.\n // See https://bugs.webkit.org/show_bug.cgi?id=241152 for more information.\n if (new DefaultBrowserBehavior_1.default().requiresVideoPlayWorkaround() && videoElement.paused) {\n const promise = videoElement.play();\n // See https://bugs.webkit.org/show_bug.cgi?id=243519 for more information.\n // https://webkit.org/blog/7734/auto-play-policy-changes-for-macos/\n /* istanbul ignore else */\n if (promise !== undefined) {\n promise\n .catch(error => {\n console.warn('Error playing video in Safari', error);\n })\n .then(() => {\n // `then` block is needed, without it we run into black tile issue even though we catch the error.\n console.debug('Video played successfully in Safari');\n });\n }\n }\n }\n }\n /**\n * Disconnect a video stream from a video element by setting `HTMLVideoElement.srcObject` to `null`.\n * @param videoElement The video element input.\n * @param dueToPause A flag to indicate whether this function is called due to pausing video tile.\n * Based on `keepLastFrameWhenPaused`, it sets `HTMLVideoElement.srcObject` to `null`.\n * @param keepLastFrameWhenPaused If `true` and `dueToPause` is also `true`, then we will not set `HTMLVideoElement.srcObject` of the\n * video element to `null` when it is paused and therefore, the last frame of the stream will be shown.\n */\n static disconnectVideoStreamFromVideoElement(videoElement, dueToPause, keepLastFrameWhenPaused = false) {\n if (!videoElement) {\n return;\n }\n if (dueToPause) {\n if (!keepLastFrameWhenPaused) {\n videoElement.srcObject = null;\n videoElement.style.transform = '';\n }\n }\n else {\n if (!videoElement.srcObject) {\n return;\n }\n videoElement.pause();\n videoElement.style.transform = '';\n DefaultVideoTile.setVideoElementFlag(videoElement, 'disablePictureInPicture', false);\n DefaultVideoTile.setVideoElementFlag(videoElement, 'disableRemotePlayback', false);\n videoElement.srcObject = null;\n }\n }\n destroy() {\n this.devicePixelRatioMonitor.removeObserver(this);\n if (this.tileState.boundVideoElement &&\n this.tileState.boundVideoElement.srcObject === this.tileState.boundVideoStream) {\n DefaultVideoTile.disconnectVideoStreamFromVideoElement(this.tileState.boundVideoElement, false);\n }\n this.tileState = new VideoTileState_1.default();\n }\n devicePixelRatioChanged(newDevicePixelRatio) {\n this.tileState.devicePixelRatio = newDevicePixelRatio;\n this.sendTileStateUpdate();\n }\n id() {\n return this.tileState.tileId;\n }\n state() {\n return this.tileState.clone();\n }\n stateRef() {\n return this.tileState;\n }\n bindVideoStream(attendeeId, localTile, mediaStream, contentWidth, contentHeight, streamId, externalUserId) {\n let tileUpdated = false;\n if (this.tileState.boundAttendeeId !== attendeeId) {\n this.tileState.boundAttendeeId = attendeeId;\n if (new DefaultModality_1.default(attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT)) {\n this.tileState.isContent = true;\n }\n tileUpdated = true;\n }\n if (this.tileState.boundExternalUserId !== externalUserId) {\n this.tileState.boundExternalUserId = externalUserId;\n tileUpdated = true;\n }\n if (this.tileState.localTile !== localTile) {\n this.tileState.localTile = localTile;\n tileUpdated = true;\n }\n if (this.tileState.boundVideoStream !== mediaStream) {\n this.tileState.boundVideoStream = mediaStream;\n tileUpdated = true;\n }\n if (this.tileState.videoStreamContentWidth !== contentWidth) {\n this.tileState.videoStreamContentWidth = contentWidth;\n tileUpdated = true;\n }\n if (this.tileState.videoStreamContentHeight !== contentHeight) {\n this.tileState.videoStreamContentHeight = contentHeight;\n tileUpdated = true;\n }\n if (this.tileState.streamId !== streamId) {\n this.tileState.streamId = streamId;\n tileUpdated = true;\n }\n if (tileUpdated) {\n this.sendTileStateUpdate();\n }\n }\n bindVideoElement(videoElement) {\n let tileUpdated = false;\n if (this.tileState.boundVideoElement !== videoElement) {\n this.tileState.boundVideoElement = videoElement;\n tileUpdated = true;\n }\n if (this.tileState.boundVideoElement !== null) {\n if (this.tileState.videoElementCSSWidthPixels !== videoElement.clientWidth) {\n this.tileState.videoElementCSSWidthPixels = videoElement.clientWidth;\n tileUpdated = true;\n }\n if (this.tileState.videoElementCSSHeightPixels !== videoElement.clientHeight) {\n this.tileState.videoElementCSSHeightPixels = videoElement.clientHeight;\n tileUpdated = true;\n }\n }\n else {\n this.tileState.videoElementCSSWidthPixels = null;\n this.tileState.videoElementCSSHeightPixels = null;\n }\n if (tileUpdated) {\n this.sendTileStateUpdate();\n }\n }\n pause() {\n if (!this.tileState.paused) {\n this.tileState.paused = true;\n this.sendTileStateUpdate();\n }\n }\n unpause() {\n if (this.tileState.paused) {\n this.tileState.paused = false;\n this.sendTileStateUpdate();\n }\n }\n markPoorConnection() {\n if (this.tileState.poorConnection) {\n return false;\n }\n this.tileState.poorConnection = true;\n this.sendTileStateUpdate();\n return true;\n }\n unmarkPoorConnection() {\n if (!this.tileState.poorConnection) {\n return false;\n }\n this.tileState.poorConnection = false;\n this.sendTileStateUpdate();\n return true;\n }\n capture() {\n if (!this.tileState.active) {\n return null;\n }\n const canvas = document.createElement('canvas');\n const video = this.tileState.boundVideoElement;\n canvas.width = video.videoWidth || video.width;\n canvas.height = video.videoHeight || video.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n return ctx.getImageData(0, 0, canvas.width, canvas.height);\n }\n setStreamId(id) {\n this.tileState.streamId = id;\n // `streamId` is not likely used by builders but we can't\n // be sure so send a tile state update just in case.\n this.tileController.sendTileStateUpdate(this.state());\n }\n sendTileStateUpdate() {\n this.updateActiveState();\n this.updateVideoStreamOnVideoElement();\n this.updateVideoElementPhysicalPixels();\n this.tileController.sendTileStateUpdate(this.state());\n }\n updateActiveState() {\n this.tileState.active = !!(!this.tileState.paused &&\n !this.tileState.poorConnection &&\n this.tileState.boundAttendeeId &&\n this.tileState.boundVideoElement &&\n this.tileState.boundVideoStream);\n }\n updateVideoElementPhysicalPixels() {\n if (typeof this.tileState.videoElementCSSWidthPixels === 'number' &&\n typeof this.tileState.videoElementCSSHeightPixels === 'number') {\n this.tileState.videoElementPhysicalWidthPixels =\n this.tileState.devicePixelRatio * this.tileState.videoElementCSSWidthPixels;\n this.tileState.videoElementPhysicalHeightPixels =\n this.tileState.devicePixelRatio * this.tileState.videoElementCSSHeightPixels;\n }\n else {\n this.tileState.videoElementPhysicalWidthPixels = null;\n this.tileState.videoElementPhysicalHeightPixels = null;\n }\n }\n updateVideoStreamOnVideoElement() {\n if (this.tileState.active) {\n DefaultVideoTile.connectVideoStreamToVideoElement(this.tileState.boundVideoStream, this.tileState.boundVideoElement, this.tileState.localTile);\n }\n else {\n DefaultVideoTile.disconnectVideoStreamFromVideoElement(this.tileState.boundVideoElement, this.tileState.paused, this.tileController.keepLastFrameWhenPaused);\n }\n }\n static setVideoElementFlag(videoElement, flag, value) {\n if (flag in videoElement) {\n // @ts-ignore\n videoElement[flag] = value;\n }\n }\n}\nexports.default = DefaultVideoTile;\n//# sourceMappingURL=DefaultVideoTile.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAudioTransformDevice = void 0;\n/**\n * `isAudioTransformDevice` is a type guard for {@link AudioTransformDevice}.\n *\n * @param device the value to check.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/explicit-module-boundary-types\nfunction isAudioTransformDevice(device) {\n return (!!device &&\n typeof device === 'object' &&\n 'mute' in device &&\n 'stop' in device &&\n 'intrinsicDevice' in device);\n}\nexports.isAudioTransformDevice = isAudioTransformDevice;\n//# sourceMappingURL=AudioTransformDevice.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DeviceSelection {\n constructor() {\n this.groupId = '';\n }\n matchesConstraints(constraints) {\n return JSON.stringify(this.constraints) === JSON.stringify(constraints);\n }\n}\nexports.default = DeviceSelection;\n//# sourceMappingURL=DeviceSelection.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass GetUserMediaError extends Error {\n constructor(cause, message) {\n super(message || 'Error fetching device.');\n this.cause = cause;\n this.name = 'GetUserMediaError';\n }\n}\nexports.default = GetUserMediaError;\n//# sourceMappingURL=GetUserMediaError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nclass NotFoundError extends GetUserMediaError_1.default {\n constructor(cause) {\n super(cause);\n this.name = 'NotFoundError';\n }\n}\nexports.default = NotFoundError;\n//# sourceMappingURL=NotFoundError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nclass NotReadableError extends GetUserMediaError_1.default {\n constructor(cause) {\n super(cause);\n this.name = 'NotReadableError';\n }\n}\nexports.default = NotReadableError;\n//# sourceMappingURL=NotReadableError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nclass OverconstrainedError extends GetUserMediaError_1.default {\n constructor(cause, constraint) {\n super(cause);\n this.constraint = constraint;\n this.name = 'OverconstrainedError';\n }\n}\nexports.default = OverconstrainedError;\n//# sourceMappingURL=OverconstrainedError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nclass PermissionDeniedError extends GetUserMediaError_1.default {\n constructor(cause, message) {\n super(cause, message);\n this.name = 'PermissionDeniedError';\n }\n}\nexports.default = PermissionDeniedError;\n//# sourceMappingURL=PermissionDeniedError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nclass TypeError extends GetUserMediaError_1.default {\n constructor(cause) {\n super(cause);\n this.name = 'TypeError';\n }\n}\nexports.default = TypeError;\n//# sourceMappingURL=TypeError.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass VideoQualitySettings {\n constructor(videoWidth, videoHeight, videoFrameRate) {\n this.videoWidth = videoWidth;\n this.videoHeight = videoHeight;\n this.videoFrameRate = videoFrameRate;\n }\n equals(other) {\n return (this.videoWidth === other.videoWidth &&\n this.videoHeight === other.videoHeight &&\n this.videoFrameRate === other.videoFrameRate);\n }\n}\nexports.default = VideoQualitySettings;\nVideoQualitySettings.VideoDisabled = new VideoQualitySettings(0, 0, 0);\nVideoQualitySettings.VideoResolutionHD = new VideoQualitySettings(1280, 720, 30);\nVideoQualitySettings.VideoResolutionFHD = new VideoQualitySettings(1920, 1080, 30);\nVideoQualitySettings.VideoResolutionUHD = new VideoQualitySettings(3840, 2160, 30);\n//# sourceMappingURL=VideoQualitySettings.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isVideoTransformDevice = void 0;\n/**\n * `isVideoTransformDevice` is a type guard for {@link VideoTransformDevice}.\n *\n * @param device the value to check.\n */\nfunction isVideoTransformDevice(device) {\n return (!!device &&\n typeof device === 'object' &&\n 'transformStream' in device &&\n 'stop' in device &&\n 'intrinsicDevice' in device);\n}\nexports.isVideoTransformDevice = isVideoTransformDevice;\n//# sourceMappingURL=VideoTransformDevice.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultMediaDeviceFactory_1 = __importDefault(require(\"../mediadevicefactory/DefaultMediaDeviceFactory\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst PromiseQueue_1 = __importDefault(require(\"../utils/PromiseQueue\"));\nconst Types_1 = require(\"../utils/Types\");\nconst DefaultVideoTransformDevice_1 = __importDefault(require(\"../videoframeprocessor/DefaultVideoTransformDevice\"));\nconst DefaultVideoTile_1 = __importDefault(require(\"../videotile/DefaultVideoTile\"));\nconst AudioTransformDevice_1 = require(\"./AudioTransformDevice\");\nconst DeviceSelection_1 = __importDefault(require(\"./DeviceSelection\"));\nconst GetUserMediaError_1 = __importDefault(require(\"./GetUserMediaError\"));\nconst NotFoundError_1 = __importDefault(require(\"./NotFoundError\"));\nconst NotReadableError_1 = __importDefault(require(\"./NotReadableError\"));\nconst OverconstrainedError_1 = __importDefault(require(\"./OverconstrainedError\"));\nconst PermissionDeniedError_1 = __importDefault(require(\"./PermissionDeniedError\"));\nconst TypeError_1 = __importDefault(require(\"./TypeError\"));\nconst VideoQualitySettings_1 = __importDefault(require(\"./VideoQualitySettings\"));\nconst VideoTransformDevice_1 = require(\"./VideoTransformDevice\");\nclass DefaultDeviceController {\n constructor(logger, options, browserBehavior = new DefaultBrowserBehavior_1.default(), eventController) {\n this.logger = logger;\n this.browserBehavior = browserBehavior;\n this.eventController = eventController;\n this.deviceInfoCache = null;\n this.activeDevices = { audio: null, video: null };\n // `chosenVideoTransformDevice` is tracked and owned by device controller.\n // It is saved when `chooseVideoInputDevice` is called with VideoTransformDevice object.\n this.chosenVideoTransformDevice = null;\n this.audioOutputDeviceId = undefined;\n this.deviceChangeObservers = new Set();\n this.mediaStreamBrokerObservers = new Set();\n this.deviceLabelTrigger = () => {\n return navigator.mediaDevices.getUserMedia({ audio: true, video: true });\n };\n this.audioInputDestinationNode = null;\n this.audioInputSourceNode = null;\n this.videoInputQualitySettings = null;\n this.useWebAudio = false;\n this.useMediaConstraintsFallback = true;\n this.audioInputTaskQueue = new PromiseQueue_1.default();\n this.videoInputTaskQueue = new PromiseQueue_1.default();\n this.muted = false;\n // This handles the dispatch of `mute` and `unmute` events from audio tracks.\n // There's a bit of a semantic mismatch here if input streams allow individual component tracks to be muted,\n // but addressing that gap is not feasible in our stream-oriented world.\n this.mediaStreamMuteObserver = (id, muted) => {\n for (const observer of this.deviceChangeObservers) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n if (this.deviceChangeObservers.has(observer) && observer.audioInputMuteStateChanged) {\n observer.audioInputMuteStateChanged(id, muted);\n }\n });\n }\n };\n this.alreadyHandlingDeviceChange = false;\n const { enableWebAudio = false, useMediaConstraintsFallback = true } = options || {};\n this.useWebAudio = enableWebAudio;\n this.useMediaConstraintsFallback = useMediaConstraintsFallback;\n this.videoInputQualitySettings = new VideoQualitySettings_1.default(DefaultDeviceController.defaultVideoWidth, DefaultDeviceController.defaultVideoHeight, DefaultDeviceController.defaultVideoFrameRate);\n const dimension = this.browserBehavior.requiresResolutionAlignment(this.videoInputQualitySettings.videoWidth, this.videoInputQualitySettings.videoHeight);\n this.videoInputQualitySettings.videoWidth = dimension[0];\n this.videoInputQualitySettings.videoHeight = dimension[1];\n this.logger.info(`DefaultDeviceController video dimension ${this.videoInputQualitySettings.videoWidth} x ${this.videoInputQualitySettings.videoHeight}`);\n try {\n this.mediaDeviceWrapper = new DefaultMediaDeviceFactory_1.default().create();\n const supportedConstraints = navigator.mediaDevices.getSupportedConstraints();\n this.logger.info(`Supported Constraints in this browser ${JSON.stringify(supportedConstraints)}`);\n }\n catch (error) {\n logger.error(error.message);\n }\n }\n isWatchingForDeviceChanges() {\n return !!this.onDeviceChangeCallback;\n }\n ensureWatchingDeviceChanges() {\n var _a;\n if (this.isWatchingForDeviceChanges()) {\n return;\n }\n this.logger.info('Starting devicechange listener.');\n this.onDeviceChangeCallback = () => {\n this.logger.info('Device change event callback is triggered');\n this.handleDeviceChange();\n };\n (_a = this.mediaDeviceWrapper) === null || _a === void 0 ? void 0 : _a.addEventListener('devicechange', this.onDeviceChangeCallback);\n }\n /**\n * Unsubscribe from the `devicechange` event, which allows the device controller to\n * update its device cache.\n */\n stopWatchingDeviceChanges() {\n var _a;\n if (!this.isWatchingForDeviceChanges()) {\n return;\n }\n this.logger.info('Stopping devicechange listener.');\n (_a = this.mediaDeviceWrapper) === null || _a === void 0 ? void 0 : _a.removeEventListener('devicechange', this.onDeviceChangeCallback);\n this.onDeviceChangeCallback = undefined;\n }\n shouldObserveDeviceChanges() {\n if (this.deviceChangeObservers.size) {\n return true;\n }\n const hasActiveDevices = (this.activeDevices['audio'] && this.activeDevices['audio'].constraints !== null) ||\n (this.activeDevices['video'] && this.activeDevices['video'].constraints !== null) ||\n !!this.audioOutputDeviceId;\n return hasActiveDevices;\n }\n watchForDeviceChangesIfNecessary() {\n if (this.shouldObserveDeviceChanges()) {\n this.ensureWatchingDeviceChanges();\n }\n else {\n this.stopWatchingDeviceChanges();\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n // Remove device change callbacks.\n this.stopWatchingDeviceChanges();\n // Deselect any audio input devices and throw away the streams.\n // Discard the current video device, if there is one.\n // Discard any audio or video transforms.\n yield this.stopAudioInput();\n yield this.stopVideoInput();\n });\n }\n listAudioInputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.listDevicesOfKind('audioinput', forceUpdate);\n this.trace('listAudioInputDevices', forceUpdate, result);\n return result;\n });\n }\n listVideoInputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.listDevicesOfKind('videoinput', forceUpdate);\n this.trace('listVideoInputDevices', forceUpdate, result);\n return result;\n });\n }\n listAudioOutputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.listDevicesOfKind('audiooutput', forceUpdate);\n this.trace('listAudioOutputDevices', forceUpdate, result);\n return result;\n });\n }\n pushAudioMeetingStateForPermissions(audioStream) {\n var _a;\n (_a = this.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent(audioStream === undefined ? 'audioInputUnselected' : 'audioInputSelected');\n }\n pushVideoMeetingStateForPermissions(videoStream) {\n var _a;\n (_a = this.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent(videoStream === undefined ? 'videoInputUnselected' : 'videoInputSelected');\n }\n startAudioInput(device) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this.audioInputTaskQueue.add(() => this.startAudioInputTask(device));\n });\n }\n startAudioInputTask(device) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (device === undefined) {\n this.logger.error('Audio input device cannot be undefined');\n return undefined;\n }\n try {\n if (AudioTransformDevice_1.isAudioTransformDevice(device)) {\n // N.B., do not JSON.stringify here — for some kinds of devices this\n // will cause a cyclic object reference error.\n this.logger.info(`Choosing transform input device ${device}`);\n yield this.chooseAudioTransformInputDevice(device);\n }\n else {\n this.logger.info(`Choosing intrinsic audio input device ${device}`);\n this.removeTransform();\n yield this.chooseInputIntrinsicDevice('audio', device);\n }\n this.trace('startAudioInputDevice', device, `success`);\n // For web audio, the audio destination stream stays the same so audio input did not change\n if (this.useWebAudio) {\n this.attachAudioInputStreamToAudioContext(this.activeDevices['audio'].stream);\n this.pushAudioMeetingStateForPermissions(this.getMediaStreamDestinationNode().stream);\n yield ((_a = this.transform) === null || _a === void 0 ? void 0 : _a.device.mute(this.muted));\n return this.getMediaStreamDestinationNode().stream;\n }\n else {\n this.publishAudioInputDidChangeEvent(this.activeDevices['audio'].stream);\n return this.activeDevices['audio'].stream;\n }\n }\n catch (error) {\n throw error;\n }\n });\n }\n stopAudioInput() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.audioInputTaskQueue.add(() => this.stopAudioInputTask());\n });\n }\n stopAudioInputTask() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (this.useWebAudio) {\n this.releaseAudioTransformStream();\n return;\n }\n this.stopTracksAndRemoveCallbacks('audio');\n }\n finally {\n this.watchForDeviceChangesIfNecessary();\n this.publishAudioInputDidChangeEvent(undefined);\n }\n });\n }\n chooseAudioTransformInputDevice(device) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (((_a = this.transform) === null || _a === void 0 ? void 0 : _a.device) === device) {\n return;\n }\n if (!this.useWebAudio) {\n throw new Error('Cannot apply transform device without enabling Web Audio.');\n }\n const context = DefaultDeviceController.getAudioContext();\n if (context instanceof OfflineAudioContext) {\n // Nothing to do.\n }\n else {\n switch (context.state) {\n case 'running':\n // Nothing to do.\n break;\n case 'closed':\n // A closed context cannot be used for creating nodes, so the correct\n // thing to do is to raise a descriptive error sooner.\n throw new Error('Cannot choose a transform device with a closed audio context.');\n case 'suspended':\n // A context might be suspended after page load. We try to resume it\n // here, otherwise audio won't work.\n yield context.resume();\n }\n }\n let nodes;\n try {\n nodes = yield device.createAudioNode(context);\n }\n catch (e) {\n this.logger.error(`Unable to create transform device node: ${e}.`);\n throw e;\n }\n // Pick the plain ol' inner device as the source. It will be\n // connected to the node.\n const inner = yield device.intrinsicDevice();\n yield this.chooseInputIntrinsicDevice('audio', inner);\n this.logger.debug(`Got inner stream: ${inner}.`);\n // Otherwise, continue: hook up the new node.\n this.setTransform(device, nodes);\n });\n }\n chooseVideoTransformInputDevice(device) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (this.eventController && device instanceof DefaultVideoTransformDevice_1.default) {\n device.passEventControllerToProcessors(this.eventController);\n }\n if (device === this.chosenVideoTransformDevice) {\n this.logger.info('Reselecting same VideoTransformDevice');\n return;\n }\n const prevVideoTransformDevice = this.chosenVideoTransformDevice;\n if (prevVideoTransformDevice) {\n this.logger.info('Switched from previous VideoTransformDevice');\n }\n const wasUsingTransformDevice = !!prevVideoTransformDevice;\n const inner = yield device.intrinsicDevice();\n const canReuseMediaStream = this.isMediaStreamReusableByDeviceId((_a = this.activeDevices['video']) === null || _a === void 0 ? void 0 : _a.stream, inner);\n if (!canReuseMediaStream) {\n this.logger.info('video transform device needs new intrinsic device');\n if (wasUsingTransformDevice) {\n // detach input media stream - turn off the camera or leave it be if inner is media stream\n prevVideoTransformDevice.onOutputStreamDisconnect();\n }\n this.chosenVideoTransformDevice = device;\n // VideoTransformDevice owns input MediaStream\n this.activeDevices['video'] = null;\n yield this.chooseInputIntrinsicDevice('video', inner);\n this.logger.info('apply processors to transform');\n yield this.chosenVideoTransformDevice.transformStream(this.activeDevices['video'].stream);\n return;\n }\n // When saved stream is reusable, only switch the saved stream to filtered stream for sending\n // but keep the saved stream intact.\n // Note: to keep the chosen media stream intact, it is important to avoid a full stop\n // because videoTileUpdate can be called when video is stopped and user might call `bindVideoElement` to disconnect the element.\n // In current implementation, disconnecting the element will `hard` stop the media stream.\n // Update device and stream\n this.chosenVideoTransformDevice = device;\n this.logger.info('video transform device uses previous stream');\n // `transformStream` will start processing.\n this.logger.info('apply processors to transform');\n yield device.transformStream(this.activeDevices['video'].stream);\n });\n }\n startVideoInput(device) {\n return __awaiter(this, void 0, void 0, function* () {\n return yield this.videoInputTaskQueue.add(() => this.startVideoInputTask(device));\n });\n }\n startVideoInputTask(device) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!device) {\n this.logger.error('Invalid video input device');\n return undefined;\n }\n try {\n if (VideoTransformDevice_1.isVideoTransformDevice(device)) {\n this.logger.info(`Choosing video transform device ${device}`);\n yield this.chooseVideoTransformInputDevice(device);\n this.publishVideoInputDidChangeEvent(this.chosenVideoTransformDevice.outputMediaStream);\n return this.chosenVideoTransformDevice.outputMediaStream;\n }\n // handle direct switching from VideoTransformDevice to Device\n // From WebRTC point, it is a device switching.\n if (this.chosenVideoInputIsTransformDevice()) {\n // disconnect old stream\n this.chosenVideoTransformDevice.onOutputStreamDisconnect();\n this.chosenVideoTransformDevice = null;\n }\n yield this.chooseInputIntrinsicDevice('video', device);\n this.trace('startVideoInputDevice', device);\n this.publishVideoInputDidChangeEvent(this.activeDevices['video'].stream);\n return this.activeDevices['video'].stream;\n }\n catch (error) {\n throw error;\n }\n });\n }\n stopVideoInput() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.videoInputTaskQueue.add(() => this.stopVideoInputTask());\n });\n }\n stopVideoInputTask() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (this.chosenVideoInputIsTransformDevice()) {\n this.releaseVideoTransformStream();\n return;\n }\n this.stopTracksAndRemoveCallbacks('video');\n }\n finally {\n this.watchForDeviceChangesIfNecessary();\n this.publishVideoInputDidChangeEvent(undefined);\n }\n });\n }\n chooseAudioOutput(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n this.audioOutputDeviceId = deviceId;\n this.watchForDeviceChangesIfNecessary();\n const deviceInfo = this.deviceInfoFromDeviceId('audiooutput', this.audioOutputDeviceId);\n this.publishAudioOutputDidChangeEvent(deviceInfo);\n this.trace('chooseAudioOutput', deviceId, null);\n return;\n });\n }\n addDeviceChangeObserver(observer) {\n this.logger.info('adding device change observer');\n this.deviceChangeObservers.add(observer);\n this.watchForDeviceChangesIfNecessary();\n this.trace('addDeviceChangeObserver');\n }\n removeDeviceChangeObserver(observer) {\n this.logger.info('removing device change observer');\n this.deviceChangeObservers.delete(observer);\n this.watchForDeviceChangesIfNecessary();\n this.trace('removeDeviceChangeObserver');\n }\n createAnalyserNodeForAudioInput() {\n var _a, _b;\n if (!this.activeDevices['audio']) {\n return null;\n }\n // If there is a WebAudio node in the graph, we use that as the source instead of the stream.\n const node = (_b = (_a = this.transform) === null || _a === void 0 ? void 0 : _a.nodes) === null || _b === void 0 ? void 0 : _b.end;\n if (node) {\n const analyser = node.context.createAnalyser();\n analyser.removeOriginalInputs = () => {\n try {\n node.disconnect(analyser);\n }\n catch (e) {\n // This can fail in some unusual cases, but this is best-effort.\n }\n };\n node.connect(analyser);\n return analyser;\n }\n return this.createAnalyserNodeForRawAudioInput();\n }\n //\n // N.B., this bypasses any applied transform node.\n //\n createAnalyserNodeForRawAudioInput() {\n if (!this.activeDevices['audio']) {\n return null;\n }\n return this.createAnalyserNodeForStream(this.activeDevices['audio'].stream);\n }\n createAnalyserNodeForStream(stream) {\n const audioContext = DefaultDeviceController.getAudioContext();\n const analyser = audioContext.createAnalyser();\n const source = audioContext.createMediaStreamSource(stream);\n source.connect(analyser);\n this.trace('createAnalyserNodeForAudioInput');\n analyser.removeOriginalInputs = () => {\n try {\n source.disconnect(analyser);\n }\n catch (e) {\n // This can fail in some unusual cases, but this is best-effort.\n }\n };\n return analyser;\n }\n startVideoPreviewForVideoInput(element) {\n if (!this.activeDevices['video']) {\n this.logger.warn('cannot bind video preview since video input device has not been chosen');\n this.trace('startVideoPreviewForVideoInput', element.id);\n return;\n }\n DefaultVideoTile_1.default.connectVideoStreamToVideoElement(this.chosenVideoTransformDevice\n ? this.chosenVideoTransformDevice.outputMediaStream\n : this.activeDevices['video'].stream, element, true);\n this.trace('startVideoPreviewForVideoInput', element.id);\n }\n stopVideoPreviewForVideoInput(element) {\n DefaultVideoTile_1.default.disconnectVideoStreamFromVideoElement(element, false);\n this.trace('stopVideoPreviewForVideoInput', element.id);\n }\n setDeviceLabelTrigger(trigger) {\n // Discard the cache if it was populated with unlabeled devices.\n if (this.deviceInfoCache) {\n for (const device of this.deviceInfoCache) {\n if (!device.label) {\n this.deviceInfoCache = null;\n break;\n }\n }\n }\n this.deviceLabelTrigger = trigger;\n this.trace('setDeviceLabelTrigger');\n }\n mixIntoAudioInput(stream) {\n let node = null;\n if (this.useWebAudio) {\n node = DefaultDeviceController.getAudioContext().createMediaStreamSource(stream);\n node.connect(this.getMediaStreamOutputNode());\n }\n else {\n this.logger.warn('WebAudio is not enabled, mixIntoAudioInput will not work');\n }\n this.trace('mixIntoAudioInput', stream.id);\n return node;\n }\n chooseVideoInputQuality(width, height, frameRate) {\n const dimension = this.browserBehavior.requiresResolutionAlignment(width, height);\n this.videoInputQualitySettings = new VideoQualitySettings_1.default(dimension[0], dimension[1], frameRate);\n }\n getVideoInputQualitySettings() {\n return this.videoInputQualitySettings;\n }\n acquireAudioInputStream() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.activeDevices['audio']) {\n this.logger.info(`No audio device chosen, creating empty audio device`);\n yield this.startAudioInput(null);\n }\n if (this.useWebAudio) {\n const dest = this.getMediaStreamDestinationNode();\n return dest.stream;\n }\n return this.activeDevices['audio'].stream;\n });\n }\n acquireVideoInputStream() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.activeDevices['video']) {\n throw new Error(`No video device chosen`);\n }\n if (this.chosenVideoInputIsTransformDevice()) {\n return this.chosenVideoTransformDevice.outputMediaStream;\n }\n return this.activeDevices['video'].stream;\n });\n }\n acquireDisplayInputStream(_streamConstraints) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new Error('unsupported');\n });\n }\n /**\n *\n * We need to do three things to clean up audio input\n *\n * * Close the tracks of the source stream.\n * * Remove the transform.\n * * Clean up the intrinsic stream's callback -- that's the stream that's tracked in\n * `activeDevices` and needs to have its callbacks removed.\n */\n releaseAudioTransformStream() {\n this.logger.info('Stopping audio track for Web Audio graph');\n this.stopTracksAndRemoveCallbacks('audio');\n this.logger.info('Removing audio transform, if there is one.');\n this.removeTransform();\n // Remove the input and output nodes. They will be recreated later if\n // needed.\n /* istanbul ignore else */\n if (this.audioInputSourceNode) {\n this.audioInputSourceNode.disconnect();\n this.audioInputSourceNode = undefined;\n }\n /* istanbul ignore else */\n if (this.audioInputDestinationNode) {\n this.audioInputDestinationNode.disconnect();\n this.audioInputDestinationNode = undefined;\n }\n }\n /**\n *\n * We need to do three things to clean up video input\n *\n * * Close the tracks of the source stream.\n * * Remove the transform.\n * * Clean up the intrinsic stream's callback -- that's the stream that's tracked in\n * `activeDevices` and needs to have its callbacks removed.\n */\n releaseVideoTransformStream() {\n this.logger.info('Stopping video track for transform');\n this.stopTracksAndRemoveCallbacks('video');\n this.logger.info('Disconnecting video transform');\n this.chosenVideoTransformDevice.onOutputStreamDisconnect();\n this.chosenVideoTransformDevice = null;\n }\n stopTracksAndRemoveCallbacks(kind) {\n const activeDevice = this.activeDevices[kind];\n // Just-in-case error handling.\n /* istanbul ignore if */\n if (!activeDevice) {\n return;\n }\n /* istanbul ignore next */\n const endedCallback = activeDevice.endedCallback;\n const trackMuteCallback = activeDevice.trackMuteCallback;\n const trackUnmuteCallback = activeDevice.trackUnmuteCallback;\n for (const track of activeDevice.stream.getTracks()) {\n track.stop();\n /* istanbul ignore else */\n if (endedCallback) {\n track.removeEventListener('ended', endedCallback);\n }\n /* istanbul ignore else */\n if (trackMuteCallback) {\n track.removeEventListener('mute', trackMuteCallback);\n }\n /* istanbul ignore else */\n if (trackUnmuteCallback) {\n track.removeEventListener('unmute', trackUnmuteCallback);\n }\n delete activeDevice.endedCallback;\n delete activeDevice.trackMuteCallback;\n delete activeDevice.trackUnmuteCallback;\n delete this.activeDevices[kind];\n }\n }\n chosenVideoInputIsTransformDevice() {\n return !!this.chosenVideoTransformDevice;\n }\n muteLocalAudioInputStream() {\n this.toggleLocalAudioInputStream(false);\n }\n unmuteLocalAudioInputStream() {\n this.toggleLocalAudioInputStream(true);\n }\n toggleLocalAudioInputStream(enabled) {\n var _a;\n let audioDevice = this.activeDevices['audio'];\n if (this.useWebAudio) {\n audioDevice = this.getMediaStreamDestinationNode();\n }\n if (!audioDevice) {\n return;\n }\n for (const track of audioDevice.stream.getTracks()) {\n if (track.enabled === enabled) {\n continue;\n }\n track.enabled = enabled;\n }\n if (this.muted !== !enabled) {\n this.muted = !enabled;\n (_a = this.transform) === null || _a === void 0 ? void 0 : _a.device.mute(this.muted);\n }\n }\n static getIntrinsicDeviceId(device) {\n if (!device) {\n return undefined;\n }\n if (typeof device === 'string') {\n return device;\n }\n if (device.id) {\n return device.id;\n }\n const constraints = device;\n const deviceIdConstraints = constraints.deviceId;\n if (!deviceIdConstraints) {\n return undefined;\n }\n if (typeof deviceIdConstraints === 'string' || Array.isArray(deviceIdConstraints)) {\n return deviceIdConstraints;\n }\n const constraintStringParams = deviceIdConstraints;\n if (typeof constraintStringParams.exact === 'string' ||\n Array.isArray(constraintStringParams.exact)) {\n return constraintStringParams.exact;\n }\n return undefined;\n }\n static createEmptyAudioDevice() {\n return DefaultDeviceController.synthesizeAudioDevice(0);\n }\n static synthesizeAudioDevice(toneHz) {\n const audioContext = DefaultDeviceController.getAudioContext();\n const outputNode = audioContext.createMediaStreamDestination();\n if (!toneHz) {\n const source = audioContext.createBufferSource();\n // The AudioContext object uses the sample rate of the default output device\n // if not specified. Creating an AudioBuffer object with the output device's\n // sample rate fails in some browsers, e.g. Safari with a Bluetooth headphone.\n try {\n source.buffer = audioContext.createBuffer(1, audioContext.sampleRate * 5, audioContext.sampleRate);\n }\n catch (error) {\n if (error && error.name === 'NotSupportedError') {\n source.buffer = audioContext.createBuffer(1, DefaultDeviceController.defaultSampleRate * 5, DefaultDeviceController.defaultSampleRate);\n }\n else {\n throw error;\n }\n }\n // Some browsers will not play audio out the MediaStreamDestination\n // unless there is actually audio to play, so we add a small amount of\n // noise here to ensure that audio is played out.\n source.buffer.getChannelData(0)[0] = 0.0003;\n source.loop = true;\n source.connect(outputNode);\n source.start();\n }\n else {\n const gainNode = audioContext.createGain();\n gainNode.gain.value = 0.1;\n gainNode.connect(outputNode);\n const oscillatorNode = audioContext.createOscillator();\n oscillatorNode.frequency.value = toneHz;\n oscillatorNode.connect(gainNode);\n oscillatorNode.start();\n }\n return outputNode.stream;\n }\n listDevicesOfKind(deviceKind, forceUpdate) {\n return __awaiter(this, void 0, void 0, function* () {\n if (forceUpdate || this.deviceInfoCache === null || !this.isWatchingForDeviceChanges()) {\n yield this.updateDeviceInfoCacheFromBrowser();\n }\n return this.listCachedDevicesOfKind(deviceKind);\n });\n }\n updateDeviceInfoCacheFromBrowser() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const doesNotHaveAccessToMediaDevices = typeof MediaDeviceInfo === 'undefined';\n if (doesNotHaveAccessToMediaDevices) {\n this.deviceInfoCache = [];\n return;\n }\n let devices = yield navigator.mediaDevices.enumerateDevices();\n let hasDeviceLabels = true;\n for (const device of devices) {\n if (!device.label) {\n hasDeviceLabels = false;\n break;\n }\n }\n if (!hasDeviceLabels) {\n try {\n this.logger.info('attempting to trigger media device labels since they are hidden');\n const triggerStream = yield this.deviceLabelTrigger();\n devices = yield navigator.mediaDevices.enumerateDevices();\n for (const track of triggerStream.getTracks()) {\n track.stop();\n }\n }\n catch (error) {\n this.logger.info('unable to get media device labels');\n (_a = this.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('deviceLabelTriggerFailed', {\n deviceLabelTriggerErrorMessage: this.getErrorMessage(error),\n });\n }\n }\n this.logger.debug(`Update device info cache with devices: ${JSON.stringify(devices)}`);\n this.deviceInfoCache = devices;\n });\n }\n listCachedDevicesOfKind(deviceKind) {\n const devicesOfKind = [];\n if (this.deviceInfoCache) {\n for (const device of this.deviceInfoCache) {\n if (device.kind === deviceKind) {\n devicesOfKind.push(device);\n }\n }\n }\n return devicesOfKind;\n }\n handleDeviceChange() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.deviceInfoCache === null) {\n return;\n }\n if (this.alreadyHandlingDeviceChange) {\n AsyncScheduler_1.default.nextTick(() => {\n this.handleDeviceChange();\n });\n return;\n }\n this.alreadyHandlingDeviceChange = true;\n const oldAudioInputDevices = this.listCachedDevicesOfKind('audioinput');\n const oldVideoInputDevices = this.listCachedDevicesOfKind('videoinput');\n const oldAudioOutputDevices = this.listCachedDevicesOfKind('audiooutput');\n yield this.updateDeviceInfoCacheFromBrowser();\n const newAudioInputDevices = this.listCachedDevicesOfKind('audioinput');\n const newVideoInputDevices = this.listCachedDevicesOfKind('videoinput');\n const newAudioOutputDevices = this.listCachedDevicesOfKind('audiooutput');\n this.forEachObserver((observer) => {\n if (!this.areDeviceListsEqual(oldAudioInputDevices, newAudioInputDevices)) {\n Types_1.Maybe.of(observer.audioInputsChanged).map(f => f.bind(observer)(newAudioInputDevices));\n }\n if (!this.areDeviceListsEqual(oldVideoInputDevices, newVideoInputDevices)) {\n Types_1.Maybe.of(observer.videoInputsChanged).map(f => f.bind(observer)(newVideoInputDevices));\n }\n if (!this.areDeviceListsEqual(oldAudioOutputDevices, newAudioOutputDevices)) {\n Types_1.Maybe.of(observer.audioOutputsChanged).map(f => f.bind(observer)(newAudioOutputDevices));\n }\n });\n this.alreadyHandlingDeviceChange = false;\n });\n }\n handleDeviceStreamEnded(kind, deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n if (kind === 'audio') {\n this.logger.warn(`Audio input device which was active is no longer available, resetting to null device`);\n yield this.startAudioInput(null); //Need to switch to empty audio device\n }\n else {\n this.logger.warn(`Video input device which was active is no longer available, stopping video`);\n yield this.stopVideoInput();\n }\n }\n catch (e) {\n /* istanbul ignore next */\n this.logger.error('Failed to choose null device after stream ended.');\n }\n if (kind === 'audio') {\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.audioInputStreamEnded).map(f => f.bind(observer)(deviceId));\n });\n }\n else {\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.videoInputStreamEnded).map(f => f.bind(observer)(deviceId));\n });\n }\n });\n }\n forEachObserver(observerFunc) {\n for (const observer of this.deviceChangeObservers) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n if (this.deviceChangeObservers.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n forEachMediaStreamBrokerObserver(observerFunc) {\n for (const observer of this.mediaStreamBrokerObservers) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n if (this.mediaStreamBrokerObservers.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n areDeviceListsEqual(a, b) {\n return (JSON.stringify(a.map(device => JSON.stringify(device)).sort()) ===\n JSON.stringify(b.map(device => JSON.stringify(device)).sort()));\n }\n intrinsicDeviceAsMediaStream(device) {\n // @ts-ignore\n return device && device.id ? device : null;\n }\n hasSameMediaStreamId(kind, selection, proposedConstraints) {\n var _a, _b, _c, _d;\n // Checking for stream using the fake constraint created in getMediaStreamConstraints\n let streamId;\n if (kind === 'audio') {\n // @ts-ignore\n streamId = proposedConstraints === null || proposedConstraints === void 0 ? void 0 : proposedConstraints.audio.streamId;\n /* istanbul ignore next */\n // @ts-ignore\n return !!streamId && streamId === ((_b = (_a = selection.constraints) === null || _a === void 0 ? void 0 : _a.audio) === null || _b === void 0 ? void 0 : _b.streamId);\n }\n /* istanbul ignore next */\n // @ts-ignore\n streamId = proposedConstraints === null || proposedConstraints === void 0 ? void 0 : proposedConstraints.video.streamId;\n /* istanbul ignore next */\n // @ts-ignore\n return !!streamId && streamId === ((_d = (_c = selection === null || selection === void 0 ? void 0 : selection.constraints) === null || _c === void 0 ? void 0 : _c.video) === null || _d === void 0 ? void 0 : _d.streamId);\n }\n hasSameGroupId(groupId, kind, device) {\n if (groupId === '') {\n return true;\n }\n const deviceIds = DefaultDeviceController.getIntrinsicDeviceId(device);\n this.logger.debug(`Checking deviceIds ${deviceIds} of type ${typeof deviceIds} with groupId ${groupId}`);\n if (typeof deviceIds === 'string' && groupId === this.getGroupIdFromDeviceId(kind, deviceIds)) {\n return true;\n }\n return false;\n }\n getGroupIdFromDeviceId(kind, deviceId) {\n if (this.deviceInfoCache !== null) {\n const cachedDeviceInfo = this.listCachedDevicesOfKind(`${kind}input`).find((cachedDevice) => cachedDevice.deviceId === deviceId);\n if (cachedDeviceInfo && cachedDeviceInfo.groupId) {\n this.logger.debug(`GroupId of deviceId ${deviceId} found in cache is ${cachedDeviceInfo.groupId}`);\n return cachedDeviceInfo.groupId;\n }\n }\n this.logger.debug(`GroupId of deviceId ${deviceId} found in cache is empty`);\n return '';\n }\n handleGetUserMediaError(error, errorTimeMs) {\n if (!error) {\n throw new GetUserMediaError_1.default(error);\n }\n switch (error.name) {\n case 'NotReadableError':\n case 'TrackStartError':\n throw new NotReadableError_1.default(error);\n case 'NotFoundError':\n case 'DevicesNotFoundError':\n throw new NotFoundError_1.default(error);\n case 'NotAllowedError':\n case 'PermissionDeniedError':\n case 'SecurityError':\n if (errorTimeMs &&\n errorTimeMs < DefaultDeviceController.permissionDeniedOriginDetectionThresholdMs) {\n throw new PermissionDeniedError_1.default(error, 'Permission denied by browser');\n }\n else {\n throw new PermissionDeniedError_1.default(error, 'Permission denied by user');\n }\n case 'OverconstrainedError':\n case 'ConstraintNotSatisfiedError':\n throw new OverconstrainedError_1.default(error);\n case 'TypeError':\n throw new TypeError_1.default(error);\n case 'AbortError':\n default:\n throw new GetUserMediaError_1.default(error);\n }\n }\n /**\n * Check whether a device is already selected.\n *\n * @param kind typically 'audio' or 'video'.\n * @param device the device about to be selected.\n * @param selection the existing device selection of this kind.\n * @param proposedConstraints the constraints that will be used when this device is selected.\n * @returns whether `device` matches `selection` — that is, whether this device is already selected.\n */\n matchesDeviceSelection(kind, device, selection, proposedConstraints) {\n if (selection &&\n selection.stream.active &&\n (this.hasSameMediaStreamId(kind, selection, proposedConstraints) ||\n (selection.groupId !== null && this.hasSameGroupId(selection.groupId, kind, device)))) {\n // TODO: this should be computed within this function.\n this.logger.debug(`Compare current device constraint ${JSON.stringify(selection.constraints)} to proposed constraints ${JSON.stringify(proposedConstraints)}`);\n return selection.matchesConstraints(proposedConstraints);\n }\n return false;\n }\n chooseInputIntrinsicDevice(kind, device) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n // N.B.,: the input device might already have augmented constraints supplied\n // by an `AudioTransformDevice`. `getMediaStreamConstraints` will respect\n // settings supplied by the device.\n const proposedConstraints = this.getMediaStreamConstraints(kind, device);\n // TODO: `matchesConstraints` should really return compatible/incompatible/exact --\n // `applyConstraints` can be used to reuse the active device while changing the\n // requested constraints.\n if (this.matchesDeviceSelection(kind, device, this.activeDevices[kind], proposedConstraints)) {\n this.logger.info(`reusing existing ${kind} input device`);\n return;\n }\n if (this.activeDevices[kind] && this.activeDevices[kind].stream) {\n this.stopTracksAndRemoveCallbacks(kind);\n }\n const startTimeMs = Date.now();\n const newDevice = new DeviceSelection_1.default();\n try {\n this.logger.info(`requesting new ${kind} device with constraint ${JSON.stringify(proposedConstraints)}`);\n const stream = this.intrinsicDeviceAsMediaStream(device);\n if (kind === 'audio' && device === null) {\n newDevice.stream = DefaultDeviceController.createEmptyAudioDevice();\n newDevice.constraints = null;\n }\n else if (stream) {\n this.logger.info(`using media stream ${stream.id} for ${kind} device`);\n newDevice.stream = stream;\n newDevice.constraints = proposedConstraints;\n }\n else {\n newDevice.stream = yield navigator.mediaDevices.getUserMedia(proposedConstraints);\n newDevice.constraints = proposedConstraints;\n }\n yield this.handleNewInputDevice(kind, newDevice);\n }\n catch (error) {\n const errorMessage = this.getErrorMessage(error);\n if (kind === 'audio') {\n (_a = this.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('audioInputFailed', {\n audioInputErrorMessage: errorMessage,\n });\n }\n else {\n (_b = this.eventController) === null || _b === void 0 ? void 0 : _b.publishEvent('videoInputFailed', {\n videoInputErrorMessage: errorMessage,\n });\n }\n this.logger.error(`failed to get ${kind} device for constraints ${JSON.stringify(proposedConstraints)}: ${errorMessage}`);\n let hasError = true;\n // This is effectively `error instanceof OverconstrainedError` but works in Node.\n if (error && 'constraint' in error) {\n this.logger.error(`Over-constrained by constraint: ${error.constraint}`);\n // Try to reduce the constraints if over-constraints\n if (this.useMediaConstraintsFallback) {\n const fallbackConstraints = this.getMediaStreamConstraints(kind, device, true);\n const fallbackConstraintsJSON = JSON.stringify(fallbackConstraints);\n if (fallbackConstraintsJSON !== JSON.stringify(proposedConstraints)) {\n this.logger.info(`retry requesting new ${kind} device with minimal constraint ${fallbackConstraintsJSON}`);\n try {\n newDevice.stream = yield navigator.mediaDevices.getUserMedia(fallbackConstraints);\n newDevice.constraints = fallbackConstraints;\n yield this.handleNewInputDevice(kind, newDevice);\n hasError = false;\n }\n catch (e) {\n this.logger.error(`failed to get ${kind} device for constraints ${fallbackConstraintsJSON}: ${this.getErrorMessage(e)}`);\n }\n }\n }\n }\n if (hasError) {\n /*\n * If there is any error while acquiring the audio device, we fall back to null device.\n * Reason: If device selection fails (e.g. NotReadableError), the peer connection is left hanging\n * with no active audio track since we release the previously attached track.\n * If no audio packet has yet been sent to the server, the server will not emit the joined event.\n */\n if (kind === 'audio') {\n this.logger.info(`choosing null ${kind} device instead`);\n try {\n newDevice.stream = DefaultDeviceController.createEmptyAudioDevice();\n newDevice.constraints = null;\n yield this.handleNewInputDevice(kind, newDevice);\n }\n catch (error) {\n this.logger.error(`failed to choose null ${kind} device. ${error.name}: ${error.message}`);\n }\n }\n this.handleGetUserMediaError(error, Date.now() - startTimeMs);\n }\n }\n finally {\n this.watchForDeviceChangesIfNecessary();\n }\n });\n }\n getErrorMessage(error) {\n if (!error) {\n return 'UnknownError';\n }\n if (error.name && error.message) {\n return `${error.name}: ${error.message}`;\n }\n if (error.name) {\n return error.name;\n }\n if (error.message) {\n return error.message;\n }\n return 'UnknownError';\n }\n handleNewInputDevice(kind, newDevice) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info(`got ${kind} device for constraints ${JSON.stringify(newDevice.constraints)}`);\n const newDeviceId = (_a = this.getMediaTrackSettings(newDevice.stream)) === null || _a === void 0 ? void 0 : _a.deviceId;\n newDevice.groupId = newDeviceId ? this.getGroupIdFromDeviceId(kind, newDeviceId) : '';\n this.activeDevices[kind] = newDevice;\n this.logger.debug(`Set activeDevice to ${JSON.stringify(newDevice)}`);\n this.watchForDeviceChangesIfNecessary();\n // Add event listener to detect ended event of media track\n // We only monitor the first track, and use its device ID for observer notifications.\n const track = newDevice.stream.getTracks()[0];\n if (track) {\n newDevice.endedCallback = () => {\n // Hard to test, but the safety check is worthwhile.\n /* istanbul ignore else */\n if (this.activeDevices[kind] && this.activeDevices[kind].stream === newDevice.stream) {\n this.handleDeviceStreamEnded(kind, newDeviceId);\n delete newDevice.endedCallback;\n }\n };\n track.addEventListener('ended', newDevice.endedCallback, { once: true });\n }\n // Add event listener to mute/unmute event for audio\n if (kind === 'audio') {\n // We only monitor the first track, and use its device ID for observer notifications.\n const track = newDevice.stream.getAudioTracks()[0];\n if (track) {\n const id = track.getSettings().deviceId || newDevice.stream;\n newDevice.trackMuteCallback = () => {\n this.mediaStreamMuteObserver(id, true);\n };\n newDevice.trackUnmuteCallback = () => {\n this.mediaStreamMuteObserver(id, false);\n };\n track.addEventListener('mute', newDevice.trackMuteCallback, { once: false });\n track.addEventListener('unmute', newDevice.trackUnmuteCallback, { once: false });\n this.logger.debug('Notifying mute state after selection');\n if (track.muted) {\n newDevice.trackMuteCallback();\n }\n else {\n newDevice.trackUnmuteCallback();\n }\n }\n }\n });\n }\n calculateMediaStreamConstraints(kind, deviceId, groupId, minimal) {\n // No need for any constraints if we want minimal constraint and there is only one device\n if (minimal && this.listCachedDevicesOfKind(`${kind}input`).length === 1) {\n return true;\n }\n const trackConstraints = {};\n // In Samsung Internet browser, navigator.mediaDevices.enumerateDevices()\n // returns same deviceId but different groupdId for some audioinput and videoinput devices.\n // To handle this, we select appropriate device using deviceId + groupId.\n if (this.browserBehavior.requiresNoExactMediaStreamConstraints()) {\n trackConstraints.deviceId = deviceId;\n }\n else {\n trackConstraints.deviceId = { exact: deviceId };\n }\n if (groupId) {\n trackConstraints.groupId = groupId;\n }\n if (minimal) {\n return trackConstraints;\n }\n // Video additional constraints\n if (kind === 'video') {\n trackConstraints.width = {\n ideal: this.videoInputQualitySettings.videoWidth,\n };\n trackConstraints.height = {\n ideal: this.videoInputQualitySettings.videoHeight,\n };\n trackConstraints.frameRate = {\n ideal: this.videoInputQualitySettings.videoFrameRate,\n };\n return trackConstraints;\n }\n // Audio additional constraints\n if (this.supportSampleRateConstraint()) {\n trackConstraints.sampleRate = { ideal: DefaultDeviceController.defaultSampleRate };\n }\n if (this.supportSampleSizeConstraint()) {\n trackConstraints.sampleSize = { ideal: DefaultDeviceController.defaultSampleSize };\n }\n if (this.supportChannelCountConstraint()) {\n trackConstraints.channelCount = { ideal: DefaultDeviceController.defaultChannelCount };\n }\n const augmented = Object.assign({ echoCancellation: true, googEchoCancellation: true, googEchoCancellation2: true, googAutoGainControl: true, googAutoGainControl2: true, googNoiseSuppression: true, googNoiseSuppression2: true, googHighpassFilter: true }, trackConstraints);\n return augmented;\n }\n getMediaStreamConstraintsFromTrackConstraints(kind, trackConstraints) {\n return kind === 'audio' ? { audio: trackConstraints } : { video: trackConstraints };\n }\n getMediaStreamConstraints(kind, device, minimal = false) {\n let trackConstraints = {};\n if (!device) {\n return null;\n }\n const stream = this.intrinsicDeviceAsMediaStream(device);\n if (stream) {\n // @ts-ignore - create a fake track constraint using the stream id\n trackConstraints.streamId = stream.id;\n return this.getMediaStreamConstraintsFromTrackConstraints(kind, trackConstraints);\n }\n if (typeof device === 'string') {\n let groupId = '';\n if (this.browserBehavior.requiresGroupIdMediaStreamConstraints()) {\n if (this.deviceInfoCache !== null) {\n groupId = this.getGroupIdFromDeviceId(kind, device);\n }\n else {\n this.logger.error('Device cache is not populated. Please make sure to call list devices first');\n }\n }\n trackConstraints = this.calculateMediaStreamConstraints(kind, device, groupId, minimal);\n return this.getMediaStreamConstraintsFromTrackConstraints(kind, trackConstraints);\n }\n if (isMediaDeviceInfo(device)) {\n trackConstraints = this.calculateMediaStreamConstraints(kind, device.deviceId, device.groupId, minimal);\n return this.getMediaStreamConstraintsFromTrackConstraints(kind, trackConstraints);\n }\n // Take the input set of constraints.\n // In this case, we just use the constraints as-is.\n // @ts-ignore - device is a MediaTrackConstraints\n trackConstraints = device;\n return this.getMediaStreamConstraintsFromTrackConstraints(kind, trackConstraints);\n }\n deviceInfoFromDeviceId(deviceKind, deviceId) {\n if (this.deviceInfoCache === null) {\n return null;\n }\n for (const device of this.deviceInfoCache) {\n if (device.kind === deviceKind && device.deviceId === deviceId) {\n return device;\n }\n }\n return null;\n }\n hasAppliedTransform() {\n return !!this.transform;\n }\n isMediaStreamReusableByDeviceId(stream, device) {\n // for null device, assume the stream is not reusable\n if (!stream || !stream.active || !device) {\n return false;\n }\n if (device.id) {\n return stream.id === device.id;\n }\n const settings = this.getMediaTrackSettings(stream);\n // If a device does not specify deviceId, we have to assume the stream is not reusable.\n if (!settings.deviceId) {\n return false;\n }\n const deviceIds = DefaultDeviceController.getIntrinsicDeviceId(device);\n if (typeof deviceIds === 'string') {\n return settings.deviceId === deviceIds;\n }\n return false;\n }\n getMediaTrackSettings(stream) {\n var _a;\n return (_a = stream.getTracks()[0]) === null || _a === void 0 ? void 0 : _a.getSettings();\n }\n reconnectAudioInputs() {\n if (!this.audioInputSourceNode) {\n return;\n }\n this.audioInputSourceNode.disconnect();\n const output = this.getMediaStreamOutputNode();\n this.audioInputSourceNode.connect(output);\n }\n setTransform(device, nodes) {\n var _a, _b;\n (_b = (_a = this.transform) === null || _a === void 0 ? void 0 : _a.nodes) === null || _b === void 0 ? void 0 : _b.end.disconnect();\n this.transform = { nodes, device };\n const proc = nodes === null || nodes === void 0 ? void 0 : nodes.end;\n const dest = this.getMediaStreamDestinationNode();\n this.logger.debug(`Connecting transform node ${proc} to destination ${dest}.`);\n proc === null || proc === void 0 ? void 0 : proc.connect(dest);\n this.reconnectAudioInputs();\n }\n removeTransform() {\n var _a;\n const previous = this.transform;\n if (!previous) {\n return undefined;\n }\n (_a = this.transform.nodes) === null || _a === void 0 ? void 0 : _a.end.disconnect();\n this.transform = undefined;\n this.reconnectAudioInputs();\n return previous;\n }\n attachAudioInputStreamToAudioContext(stream) {\n var _a;\n (_a = this.audioInputSourceNode) === null || _a === void 0 ? void 0 : _a.disconnect();\n this.audioInputSourceNode = DefaultDeviceController.getAudioContext().createMediaStreamSource(stream);\n const output = this.getMediaStreamOutputNode();\n this.audioInputSourceNode.connect(output);\n }\n /**\n * Return the end of the Web Audio graph: post-transform audio.\n */\n getMediaStreamDestinationNode() {\n if (!this.audioInputDestinationNode) {\n this.audioInputDestinationNode = DefaultDeviceController.getAudioContext().createMediaStreamDestination();\n }\n return this.audioInputDestinationNode;\n }\n /**\n * Return the start of the Web Audio graph: pre-transform audio.\n * If there's no transform node, this is the destination node.\n */\n getMediaStreamOutputNode() {\n var _a, _b;\n return ((_b = (_a = this.transform) === null || _a === void 0 ? void 0 : _a.nodes) === null || _b === void 0 ? void 0 : _b.start) || this.getMediaStreamDestinationNode();\n }\n /**\n * Overrides the default latency hint used by the user agent when creating the `AudioContext`. By default,\n * user agents will choose \"interactive\" which opts for the smallest possible audio buffer. This can\n * cause choppy audio in some cases on Windows. Therefore, \"playback\" will be chosen on Windows unless\n * this value is overridden with this function.\n * @param latencyHint The latency hint to be used when creating the Web Audio `AudioContext`\n */\n static setDefaultLatencyHint(latencyHint) {\n DefaultDeviceController.defaultLatencyHint = latencyHint;\n }\n /**\n * Returns the Web Audio `AudioContext` used by the {@link DefaultDeviceController}. The `AudioContext`\n * is created lazily the first time this function is called.\n * @returns a Web Audio `AudioContext`\n */\n static getAudioContext() {\n if (!DefaultDeviceController.audioContext) {\n const options = {};\n if (navigator.mediaDevices.getSupportedConstraints().sampleRate) {\n options.sampleRate = DefaultDeviceController.defaultSampleRate;\n }\n const browserBehavior = new DefaultBrowserBehavior_1.default();\n if (browserBehavior.requiresPlaybackLatencyHintForAudioContext()) {\n options.latencyHint = 'playback'; // 'playback' is equivalent to 0.02s (20ms) on Windows\n }\n if (DefaultDeviceController.defaultLatencyHint) {\n options.latencyHint = DefaultDeviceController.defaultLatencyHint;\n }\n DefaultDeviceController.audioContext = new (window.AudioContext ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.webkitAudioContext)(options);\n }\n return DefaultDeviceController.audioContext;\n }\n static closeAudioContext() {\n if (DefaultDeviceController.audioContext) {\n try {\n DefaultDeviceController.audioContext.close();\n }\n catch (e) {\n // Nothing we can do.\n }\n }\n DefaultDeviceController.audioContext = null;\n }\n addMediaStreamBrokerObserver(observer) {\n this.mediaStreamBrokerObservers.add(observer);\n }\n removeMediaStreamBrokerObserver(observer) {\n this.mediaStreamBrokerObservers.delete(observer);\n }\n publishVideoInputDidChangeEvent(videoStream) {\n this.forEachMediaStreamBrokerObserver((observer) => {\n if (observer.videoInputDidChange) {\n observer.videoInputDidChange(videoStream);\n }\n });\n this.pushVideoMeetingStateForPermissions(videoStream);\n }\n publishAudioInputDidChangeEvent(audioStream) {\n this.forEachMediaStreamBrokerObserver((observer) => {\n if (observer.audioInputDidChange) {\n observer.audioInputDidChange(audioStream);\n }\n });\n this.pushAudioMeetingStateForPermissions(audioStream);\n }\n publishAudioOutputDidChangeEvent(device) {\n this.forEachMediaStreamBrokerObserver((observer) => {\n if (observer.audioOutputDidChange) {\n observer.audioOutputDidChange(device);\n }\n });\n }\n supportSampleRateConstraint() {\n return this.useWebAudio && !!navigator.mediaDevices.getSupportedConstraints().sampleRate;\n }\n supportSampleSizeConstraint() {\n return this.useWebAudio && !!navigator.mediaDevices.getSupportedConstraints().sampleSize;\n }\n supportChannelCountConstraint() {\n return this.useWebAudio && !!navigator.mediaDevices.getSupportedConstraints().channelCount;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trace(name, input, output) {\n let s = `API/DefaultDeviceController/${name}`;\n if (typeof input !== 'undefined') {\n s += ` ${JSON.stringify(input)}`;\n }\n if (typeof output !== 'undefined') {\n s += ` -> ${JSON.stringify(output)}`;\n }\n this.logger.info(s);\n }\n}\nexports.default = DefaultDeviceController;\nDefaultDeviceController.permissionDeniedOriginDetectionThresholdMs = 500;\nDefaultDeviceController.defaultVideoWidth = 960;\nDefaultDeviceController.defaultVideoHeight = 540;\nDefaultDeviceController.defaultVideoFrameRate = 15;\nDefaultDeviceController.defaultSampleRate = 48000;\nDefaultDeviceController.defaultSampleSize = 16;\nDefaultDeviceController.defaultChannelCount = 1;\nDefaultDeviceController.audioContext = null;\nfunction isMediaDeviceInfo(device) {\n return (typeof device === 'object' &&\n 'deviceId' in device &&\n 'groupId' in device &&\n 'kind' in device &&\n 'label' in device);\n}\n//# sourceMappingURL=DefaultDeviceController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultDeviceController_1 = __importDefault(require(\"../devicecontroller/DefaultDeviceController\"));\nclass ContentShareMediaStreamBroker {\n constructor(logger) {\n this.logger = logger;\n }\n get mediaStream() {\n return this._mediaStream;\n }\n set mediaStream(mediaStream) {\n this._mediaStream = mediaStream;\n }\n acquireAudioInputStream() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._mediaStream.getAudioTracks().length === 0) {\n this.logger.info('No audio stream available. Synthesizing an audio stream.');\n return DefaultDeviceController_1.default.synthesizeAudioDevice(0);\n }\n return this._mediaStream;\n });\n }\n acquireVideoInputStream() {\n return __awaiter(this, void 0, void 0, function* () {\n return this._mediaStream;\n });\n }\n acquireDisplayInputStream(streamConstraints) {\n return __awaiter(this, void 0, void 0, function* () {\n if (streamConstraints &&\n streamConstraints.video &&\n // @ts-ignore\n streamConstraints.video.mandatory &&\n // @ts-ignore\n streamConstraints.video.mandatory.chromeMediaSource &&\n // @ts-ignore\n streamConstraints.video.mandatory.chromeMediaSourceId) {\n return navigator.mediaDevices.getUserMedia(streamConstraints);\n }\n // @ts-ignore https://github.com/microsoft/TypeScript/issues/31821\n return navigator.mediaDevices.getDisplayMedia(streamConstraints);\n });\n }\n acquireScreenCaptureDisplayInputStream(sourceId, frameRate) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.acquireDisplayInputStream(this.screenCaptureDisplayMediaConstraints(sourceId, frameRate));\n });\n }\n screenCaptureDisplayMediaConstraints(sourceId, frameRate) {\n return {\n audio: !sourceId && new DefaultBrowserBehavior_1.default().getDisplayMediaAudioCaptureSupport()\n ? true\n : false,\n video: Object.assign(Object.assign({}, (!sourceId && {\n frameRate: {\n max: frameRate ? frameRate : ContentShareMediaStreamBroker.defaultFrameRate,\n },\n })), (sourceId && {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRate ? frameRate : ContentShareMediaStreamBroker.defaultFrameRate,\n },\n })),\n };\n }\n toggleMediaStream(enable) {\n let changed = false;\n if (this.mediaStream) {\n for (let i = 0; i < this.mediaStream.getTracks().length; i++) {\n if (this.mediaStream.getTracks()[i].enabled !== enable) {\n this.mediaStream.getTracks()[i].enabled = enable;\n changed = true;\n }\n }\n }\n return changed;\n }\n cleanup() {\n if (this.mediaStream) {\n for (let i = 0; i < this.mediaStream.getTracks().length; i++) {\n const track = this.mediaStream.getTracks()[i];\n track.stop();\n }\n }\n this.mediaStream = null;\n }\n muteLocalAudioInputStream() {\n throw new Error('unsupported');\n }\n unmuteLocalAudioInputStream() {\n throw new Error('unsupported');\n }\n addMediaStreamBrokerObserver(_observer) { }\n removeMediaStreamBrokerObserver(_observer) { }\n}\nexports.default = ContentShareMediaStreamBroker;\nContentShareMediaStreamBroker.defaultFrameRate = 15;\n//# sourceMappingURL=ContentShareMediaStreamBroker.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[CreatePeerConnectionTask]] sets up the peer connection object.\n */\nclass CreatePeerConnectionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'CreatePeerConnectionTask';\n this.removeTrackAddedEventListener = null;\n this.removeTrackRemovedEventListeners = {};\n this.trackEvents = [\n 'ended',\n 'mute',\n 'unmute',\n 'isolationchange',\n 'overconstrained',\n ];\n this.removeVideoTrackEventListeners = {};\n this.trackAddedHandler = (event) => {\n const track = event.track;\n this.context.logger.info(`received track event: kind=${track.kind} id=${track.id} label=${track.label}`);\n if (event.transceiver && event.transceiver.currentDirection === 'inactive') {\n return;\n }\n if (event.streams.length === 0) {\n this.context.logger.warn(`Track event but no stream`);\n return;\n }\n const stream = event.streams[0];\n if (track.kind === 'audio') {\n this.context.audioMixController.bindAudioStream(stream);\n }\n else if (track.kind === 'video' && !this.trackIsVideoInput(track)) {\n this.addRemoteVideoTrack(track, stream);\n }\n };\n }\n removeObserver() {\n this.removeTrackAddedEventListener && this.removeTrackAddedEventListener();\n for (const trackId in this.removeTrackRemovedEventListeners) {\n this.removeTrackRemovedEventListeners[trackId]();\n }\n }\n addPeerConnectionEventLogger() {\n const peer = this.context.peer;\n peer.addEventListener('connectionstatechange', () => {\n this.context.logger.info(`peer connection state changed: ${peer.connectionState}`);\n });\n peer.addEventListener('negotiationneeded', () => {\n this.context.logger.info('peer connection negotiation is needed');\n });\n peer.addEventListener('icegatheringstatechange', () => {\n this.context.logger.info(`peer connection ice gathering state changed: ${peer.iceGatheringState}`);\n });\n peer.addEventListener('icecandidate', (event) => {\n this.context.logger.info(`peer connection ice candidate: ${event.candidate ? event.candidate.candidate : '(null)'}`);\n });\n peer.addEventListener('iceconnectionstatechange', () => {\n this.context.logger.info(`peer connection ice connection state changed: ${peer.iceConnectionState}`);\n });\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.removableObservers.push(this);\n const hasTurnCredentials = this.context.turnCredentials && this.context.turnCredentials.uris.length > 0;\n const configuration = hasTurnCredentials\n ? {\n iceServers: [\n {\n urls: this.context.turnCredentials.uris,\n username: this.context.turnCredentials.username,\n credential: this.context.turnCredentials.password,\n credentialType: 'password',\n },\n ],\n iceTransportPolicy: 'relay',\n }\n : {};\n configuration.bundlePolicy = this.context.browserBehavior.requiresBundlePolicy();\n // @ts-ignore\n configuration.sdpSemantics = 'unified-plan';\n // @ts-ignore\n configuration.encodedInsertableStreams = this.context.audioProfile.hasRedundancyEnabled();\n if (this.context.peer) {\n this.context.logger.info('reusing peer connection');\n }\n else {\n this.context.logger.info('creating new peer connection');\n // @ts-ignore\n this.context.peer = new RTCPeerConnection(configuration);\n this.addPeerConnectionEventLogger();\n }\n this.removeTrackAddedEventListener = () => {\n if (this.context.peer) {\n this.context.peer.removeEventListener('track', this.trackAddedHandler);\n }\n this.removeTrackAddedEventListener = null;\n };\n this.context.peer.addEventListener('track', this.trackAddedHandler);\n });\n }\n trackIsVideoInput(track) {\n if (this.context.transceiverController.useTransceivers()) {\n this.logger.debug(() => {\n return `getting video track type`;\n });\n return this.context.transceiverController.trackIsVideoInput(track);\n }\n return false;\n }\n addRemoteVideoTrack(track, stream) {\n var _a;\n const trackId = stream.id;\n const attendeeId = this.context.videoStreamIndex.attendeeIdForTrack(trackId);\n let skipAdding;\n let tile;\n if (this.context.videoTileController.getVideoTileForAttendeeId) {\n tile = this.context.videoTileController.getVideoTileForAttendeeId(attendeeId);\n skipAdding = !!((_a = tile === null || tile === void 0 ? void 0 : tile.state()) === null || _a === void 0 ? void 0 : _a.boundVideoStream);\n }\n else {\n skipAdding = this.context.videoTileController.haveVideoTileForAttendeeId(attendeeId);\n }\n if (skipAdding) {\n this.context.logger.info(`Not adding remote track. Already have tile for attendeeId: ${attendeeId}`);\n return;\n }\n if (!tile) {\n tile = this.context.videoTileController.addVideoTile();\n this.logger.info(`Created video tile ${tile.id()}`);\n }\n let streamId = this.context.videoStreamIndex.streamIdForTrack(trackId);\n if (typeof streamId === 'undefined') {\n this.logger.warn(`stream not found for tile=${tile.id()} track=${trackId}`);\n streamId = null;\n }\n for (let i = 0; i < this.trackEvents.length; i++) {\n const trackEvent = this.trackEvents[i];\n const videoTracks = stream.getVideoTracks();\n if (videoTracks && videoTracks.length) {\n const videoTrack = videoTracks[0];\n const callback = () => {\n this.context.logger.info(`received the ${trackEvent} event for tile=${tile.id()} id=${track.id} streamId=${streamId}`);\n if (trackEvent === 'ended') {\n this.removeRemoteVideoTrack(track, tile.state());\n }\n };\n videoTrack.addEventListener(trackEvent, callback);\n if (!this.removeVideoTrackEventListeners[track.id]) {\n this.removeVideoTrackEventListeners[track.id] = [];\n }\n this.removeVideoTrackEventListeners[track.id].push(() => {\n videoTrack.removeEventListener(trackEvent, callback);\n });\n }\n }\n let width;\n let height;\n if (track.getSettings) {\n const cap = track.getSettings();\n width = cap.width;\n height = cap.height;\n }\n else {\n const cap = track.getCapabilities();\n width = cap.width;\n height = cap.height;\n }\n const externalUserId = this.context.videoStreamIndex.externalUserIdForTrack(trackId);\n tile.bindVideoStream(attendeeId, false, stream, width, height, streamId, externalUserId);\n this.logger.info(`video track added, use tile=${tile.id()} track=${trackId} streamId=${streamId}`);\n const endEvent = 'removetrack';\n const target = stream;\n const trackRemovedHandler = () => this.removeRemoteVideoTrack(track, tile.state());\n this.removeTrackRemovedEventListeners[track.id] = () => {\n target.removeEventListener(endEvent, trackRemovedHandler);\n delete this.removeTrackRemovedEventListeners[track.id];\n };\n target.addEventListener(endEvent, trackRemovedHandler);\n }\n removeRemoteVideoTrack(track, tileState) {\n if (this.removeTrackRemovedEventListeners.hasOwnProperty(track.id)) {\n this.removeTrackRemovedEventListeners[track.id]();\n for (const removeVideoTrackEventListener of this.removeVideoTrackEventListeners[track.id]) {\n removeVideoTrackEventListener();\n }\n delete this.removeVideoTrackEventListeners[track.id];\n }\n this.logger.info(`video track ended, removing tile=${tileState.tileId} id=${track.id} stream=${tileState.streamId}`);\n if (tileState.streamId) {\n this.context.videosPaused.remove(tileState.streamId);\n }\n else {\n this.logger.warn(`no stream found for tile=${tileState.tileId}`);\n }\n this.context.videoTileController.removeVideoTile(tileState.tileId);\n }\n}\nexports.default = CreatePeerConnectionTask;\nCreatePeerConnectionTask.REMOVE_HANDLER_INTERVAL_MS = 10000;\n//# sourceMappingURL=CreatePeerConnectionTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeetingSessionStatusCode = void 0;\n/**\n * [[MeetingSessionStatusCode]] gives the underlying reason for a given [[MeetingSessionStatus]]. Though some codes are used for\n * [[MeetingSessionStatus]] internally, the primary use of these is in `AudioVideoObserver.audioVideoDidStop`, and their docstrings\n * will be specific to that usage. Other functions that use [[MeetingSessionStatus]] (mainly\n * `AudioVideoControllerFacade.promoteToPrimaryMeeting` and `AudioVideoObserver.audioVideoWasDemotedFromPrimaryMeeting` will document\n * their usage separately).\n *\n * These status codes can be used for logging, debugging, and notification to end users, but in most cases should not\n * be used for any retry behavior, as the audio video controller will already be retrying non-terminal errors (i.e. regardless\n * of `MeetingSessionStatus.isTerminal`, your application should not try to immediately restart or recreate the\n * audio video controller). For error codes that indicate issues with the Chime service, please create a github issue\n * with browser logs if they occur frequently.\n *\n * If `MeetingSessionStatus.isTerminal` returns `true`, you should remove any meeting UX in addition to notifying the user,\n * as the audio video controller will not be retrying the connection. When notifying users, more general failure messages are\n * recommended unless otherwise noted.\n */\nvar MeetingSessionStatusCode;\n(function (MeetingSessionStatusCode) {\n /**\n * There is no error. This code is used internally but will never be returned by `audioVideoDidStop`\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"OK\"] = 0] = \"OK\";\n /**\n * The attendee left the meeting normally via `AudioVideoConftrollerFacade.stop`\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"Left\"] = 1] = \"Left\";\n /**\n * The attendee joined from another device (e.g. another browser window/tab or on mobile) using the\n * same credentials. `Audio` prefix is irrelevant. The end-user may want to be notified of this\n * type of error.\n *\n * This also can occur if your application unintentionally creates two meeting sessions.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioJoinedFromAnotherDevice\"] = 2] = \"AudioJoinedFromAnotherDevice\";\n /**\n * Authentication was rejected as the attendee information in `MeetingSessionCredentials` did\n * not match that of an attendee created via `chime::CreateAttendee`.\n *\n * This error may imply an issue with your credential providing service. The `Audio` prefix is irrelevant.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioAuthenticationRejected\"] = 3] = \"AudioAuthenticationRejected\";\n /**\n * The client can not join because the meeting is at capacity. The service supports up to 250 attendees. The\n * end user may want to be notified of this type of error. The `Audio` prefix is irrelevant.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioCallAtCapacity\"] = 4] = \"AudioCallAtCapacity\";\n /**\n * The attendee attempted to join a meeting that has already ended. See\n * [this FAQ](https://aws.github.io/amazon-chime-sdk-js/modules/faqs.html#when-does-an-amazon-chime-sdk-meeting-end)\n * for more information. The end user may want to be notified of this type of error.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"MeetingEnded\"] = 5] = \"MeetingEnded\";\n /**\n * There was an internal server error related to audio. This may indicate some issue with the audio device, or an issue with\n * the Amazon Chime SDK service itself.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioInternalServerError\"] = 6] = \"AudioInternalServerError\";\n /**\n * There was an internal server error related to audio. This may indicate some issue with the audio device, or an issue with\n * the Amazon Chime SDK service itself.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioServiceUnavailable\"] = 7] = \"AudioServiceUnavailable\";\n /**\n * There was an internal server error related to audio. This may indicate some issue with the audio device, or an issue with\n * the Amazon Chime SDK service itself.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioDisconnected\"] = 8] = \"AudioDisconnected\";\n /**\n * This is only used internally and will not be provided in any `audioVideoDidStop` calls.\n *\n * The client has asked to send and receive video, but it is only possible to\n * continue in view-only mode (receiving video). This should be handled by\n * explicitly switching to view-only mode.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"VideoCallSwitchToViewOnly\"] = 9] = \"VideoCallSwitchToViewOnly\";\n /**\n * This is only used internally and will not be provided in any `audioVideoDidStop` calls.\n *\n * This can happen when you attempt to join a video meeting in \"send only\" mode\n * (transmitting your camera, but not receiving anything -- this isn't something\n * we ever do in practice, but it is supported on the server). It should be\n * treated as \"fatal\" and probably should not be retried (despite the 5xx nature).\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"VideoCallAtSourceCapacity\"] = 10] = \"VideoCallAtSourceCapacity\";\n /**\n * The Amazon Chime SDK for JavaScript failed to establish a signaling connection because\n * you or someone else deleted the attendee using the\n * [DeleteAttendee](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_meeting-chime_DeleteAttendee.html)\n * API action in your server application. You also should not use the attendee response from\n * the ended meeting that you created with the same ClientRequestToken parameter\n * before.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"SignalingBadRequest\"] = 11] = \"SignalingBadRequest\";\n /**\n * The Chime SDK for JavaScript either failed to establish a signaling connection to the Chime\n * backend due to an internal server error or the connection was lost mid-call.\n *\n * This may indicate an issue with the Chime service, but also often indicates a network issue impacting the end user,\n * who may want to be notified of their unstable network during the reconnection.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"SignalingInternalServerError\"] = 12] = \"SignalingInternalServerError\";\n /**\n * Received unknown signaling error frame without a status. This code is nearly impossible to occur\n * and indicates an issue with the Chime service.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"SignalingRequestFailed\"] = 13] = \"SignalingRequestFailed\";\n /**\n * Timed out gathering ICE candidates. If in Chrome, this could be an\n * indication that the browser is in a bad state due to a VPN reconnect and\n * the user should try quitting and relaunching the app. See:\n * https://bugs.chromium.org/p/webrtc/issues/detail?id=9097\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"ICEGatheringTimeoutWorkaround\"] = 14] = \"ICEGatheringTimeoutWorkaround\";\n /**\n * Due to connection health as determined by [[ConnectionHealthPolicyConfiguration]], a reconnect has been triggered.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"ConnectionHealthReconnect\"] = 15] = \"ConnectionHealthReconnect\";\n /**\n * The [[RealtimeController]] failed in some way. This indicates an issue with the callback function provided to RealtimeController APIs (e.g. a callback is throwing an error).\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"RealtimeApiFailed\"] = 16] = \"RealtimeApiFailed\";\n /**\n * A step in the connection to the Amazon Chime SDK backends failed without a more specific reason. This may indicate end-user connection issues\n * and should be retried.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"TaskFailed\"] = 17] = \"TaskFailed\";\n /**\n * There was an issue with media negotiation. This may indicate an issue with Amazon Chime SDK, or that the end user is using an unsupported\n * browser. Please use `new DefaultBrowserBehavior().isSupported()` pre-call to check the support of end-user browsers\n * and warn them of possible issues.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"IncompatibleSDP\"] = 18] = \"IncompatibleSDP\";\n /**\n * This can happen when you attempt to join a meeting which has ended or attendee got removed. This is analogous to `MeetingEnded` except\n * determined through the media channel rather then the signaling channel.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"TURNCredentialsForbidden\"] = 19] = \"TURNCredentialsForbidden\";\n /**\n * The attendee did not show up on the roster. This may indicate an issue with the end user audio device or and issue with Amazon Chime SDK.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"NoAttendeePresent\"] = 20] = \"NoAttendeePresent\";\n /**\n * The session was ended because the attendee has been removed via `chime::DeleteAttendee`. The end user may want to be notified\n * of this error.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioAttendeeRemoved\"] = 21] = \"AudioAttendeeRemoved\";\n /**\n * This is only used in promotion functions and will not be provided in any `audioVideoDidStop` calls.\n *\n * The attendees Primary meeting credentials have been revoked or deleted.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioVideoWasRemovedFromPrimaryMeeting\"] = 22] = \"AudioVideoWasRemovedFromPrimaryMeeting\";\n /**\n * This is only used internally and will not be provided in any `audioVideoDidStop` calls.\n *\n * Reserved.\n */\n MeetingSessionStatusCode[MeetingSessionStatusCode[\"AudioDisconnectAudio\"] = 23] = \"AudioDisconnectAudio\";\n})(MeetingSessionStatusCode = exports.MeetingSessionStatusCode || (exports.MeetingSessionStatusCode = {}));\nexports.default = MeetingSessionStatusCode;\n//# sourceMappingURL=MeetingSessionStatusCode.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SDPCandidateType = void 0;\nvar SDPCandidateType;\n(function (SDPCandidateType) {\n SDPCandidateType[\"Host\"] = \"host\";\n SDPCandidateType[\"ServerReflexive\"] = \"srflx\";\n SDPCandidateType[\"PeerReflexive\"] = \"prflx\";\n SDPCandidateType[\"Relay\"] = \"relay\";\n})(SDPCandidateType = exports.SDPCandidateType || (exports.SDPCandidateType = {}));\nexports.default = SDPCandidateType;\n//# sourceMappingURL=SDPCandidateType.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Represents parsed attributes of a media section (i.e. associated with a single m-line)\n */\nclass SDPMediaSection {\n}\nexports.default = SDPMediaSection;\n//# sourceMappingURL=SDPMediaSection.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_1 = require(\"../signalingprotocol/SignalingProtocol\");\n/**\n * `VideoCodecCapability` represents a higher level type to wrap `RTCRtpCodecCapability`\n * and the codec name used in the SDP, while also namespacing static create functions\n * for codecs supported in the SDK.\n *\n * Note that `codecName` is different then `codecCapability.mimeType`\n */\nclass VideoCodecCapability {\n constructor(codecName, codecCapability) {\n this.codecName = codecName;\n this.codecCapability = codecCapability;\n }\n equals(other) {\n return (other !== undefined &&\n this.codecName === other.codecName &&\n this.codecCapability.mimeType === other.codecCapability.mimeType &&\n this.codecCapability.clockRate === other.codecCapability.clockRate &&\n this.codecCapability.sdpFmtpLine === other.codecCapability.sdpFmtpLine);\n }\n /**\n * Returns whether the codec capability fmtp line matches. This will not\n * attempt to match H.264 profile levels (e.g. 5.2, 3.1), see internal comments for\n * more detailed information.\n *\n * This function is meant to only be used internally.\n */\n fmtpLineMatches(line, expectedPayloadType) {\n const codecCapabilityFmtpLine = this.codecCapability.sdpFmtpLine;\n if (!codecCapabilityFmtpLine) {\n return false;\n }\n if (this.codecName === 'H264') {\n // Given that most H.264 decoders for the past decade can support level 5.2, we do not bother checking the Profile Level\n // with regards to canonically defined, meeting wide, H.264 profile options (i.e. we intentionally do not split up `h264HighProfile`\n // into `h264HighProfileLevel52, `h264HighProfileLevel31`, etc.).\n //\n // Additionally, Chrome bundles FFmpeg software decoders which while advertised as 3.1, will happily decode any bitrate/resolution.\n //\n // If maximum compatability with H.264 is desired by a builder they should stick to H.264 Constrained Baseline Profile.\n const profileLevelIdRegex = /profile-level-id=([0-9a-f]{4})[0-9a-f]{2}/i;\n const modifiedCodecCapabilityFmtpLine = codecCapabilityFmtpLine.replace(profileLevelIdRegex, 'profile-level-id=$1');\n const modifiedLine = line.replace(profileLevelIdRegex, 'profile-level-id=$1');\n return modifiedLine.startsWith(`a=fmtp:${expectedPayloadType} ${modifiedCodecCapabilityFmtpLine}`);\n }\n return line.startsWith(`a=fmtp:${expectedPayloadType} ${codecCapabilityFmtpLine}`);\n }\n /**\n * Returns the configuration of VP8 supported by the SDK\n */\n static vp8() {\n return new VideoCodecCapability('VP8', {\n clockRate: 90000,\n mimeType: 'video/VP8',\n });\n }\n /**\n * Returns the configuration of H.264 Baseline Profile supported by the SDK.\n *\n * This profile is more likely to use hardware for encode on most browsers\n * then constrained baseline profile.\n */\n static h264BaselineProfile() {\n return new VideoCodecCapability('H264', {\n clockRate: 90000,\n mimeType: 'video/H264',\n sdpFmtpLine: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f',\n });\n }\n /**\n * Returns the configuration of H.264 CBP supported by the SDK.\n *\n * This profile is required in all WebRTC implementations and typically\n * uses software for the encode for stability. Hardware decode is common.\n */\n static h264ConstrainedBaselineProfile() {\n return new VideoCodecCapability('H264', {\n clockRate: 90000,\n mimeType: 'video/H264',\n sdpFmtpLine: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f',\n });\n }\n /**\n * Returns the configuration of H.264 Main Profile supported by the SDK\n *\n * This profile is more likely to use hardware for encode on most browsers\n * then constrained baseline profile. It may have modest quality/bitrate improvements\n * over baseline/constrained baseline profile.\n */\n static h264MainProfile() {\n return new VideoCodecCapability('H264', {\n clockRate: 90000,\n mimeType: 'video/H264',\n sdpFmtpLine: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f',\n });\n }\n /**\n * Returns the configuration of H.264 High Profile supported by the SDK.\n *\n * Currently most browsers do not have software fallback for high profile\n * which may impact stability. Its usage should be done with caution.\n *\n * On MacOS, until https://bugs.chromium.org/p/chromium/issues/detail?id=1520287 is\n * resolved, receivers will fail to allocate the decoder for this profile if the sender switches away and back\n * to this codec (e.g. fallback for a Firefox receiver, and then recovery when the Firefox\n * receiver leaves).\n *\n * If you expect a decent amount of iOS safari traffic, you should include `h264ConstrainedHighProfile` in your\n * preferences as well. It will be forwarded as High profile to receivers that negotiated High but not Constrained\n * High\n */\n static h264HighProfile() {\n return new VideoCodecCapability('H264', {\n clockRate: 90000,\n mimeType: 'video/H264',\n sdpFmtpLine: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=64001f',\n });\n }\n /**\n * Returns the configuration of H.264 Constrained High Profile supported by the SDK\n *\n * This is currently only used on Safari. The same notes on H.264 High Profile apply to this\n * codec.\n */\n static h264ConstrainedHighProfile() {\n return new VideoCodecCapability('H264', {\n clockRate: 90000,\n mimeType: 'video/H264',\n sdpFmtpLine: 'level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640c1f',\n });\n }\n /**\n * Returns the configuration of H.264 recommended by the SDK for maximum compatability.\n */\n static h264() {\n return VideoCodecCapability.h264ConstrainedBaselineProfile();\n }\n /**\n * Returns the configuration of VP9 profile 0 supported by the SDK.\n * Profile 0 is for use with 8-bit source content.\n */\n static vp9Profile0() {\n return new VideoCodecCapability('VP9', {\n clockRate: 90000,\n mimeType: 'video/VP9',\n sdpFmtpLine: 'profile-id=0',\n });\n }\n /**\n * Returns the configuration of AV1 recommended by the SDK\n */\n static vp9() {\n return VideoCodecCapability.vp9Profile0();\n }\n /**\n * Returns the configuration of AV1 main profile used by the SDK\n */\n static av1Main() {\n return new VideoCodecCapability('AV1', {\n clockRate: 90000,\n mimeType: 'video/AV1',\n });\n }\n /**\n * Returns the configuration of AV1 recommended by the SDK\n */\n static av1() {\n return VideoCodecCapability.av1Main();\n }\n /**\n * Returns the configuration of codec corresponding to the signaled capability\n */\n static fromSignaled(capability) {\n switch (capability) {\n case SignalingProtocol_1.SdkVideoCodecCapability.VP8:\n return VideoCodecCapability.vp8();\n case SignalingProtocol_1.SdkVideoCodecCapability.H264_BASELINE_PROFILE:\n return VideoCodecCapability.h264BaselineProfile();\n case SignalingProtocol_1.SdkVideoCodecCapability.H264_CONSTRAINED_BASELINE_PROFILE:\n return VideoCodecCapability.h264ConstrainedBaselineProfile();\n case SignalingProtocol_1.SdkVideoCodecCapability.H264_MAIN_PROFILE:\n return VideoCodecCapability.h264MainProfile();\n case SignalingProtocol_1.SdkVideoCodecCapability.H264_HIGH_PROFILE:\n return VideoCodecCapability.h264HighProfile();\n case SignalingProtocol_1.SdkVideoCodecCapability.H264_CONSTRAINED_HIGH_PROFILE:\n return VideoCodecCapability.h264ConstrainedHighProfile();\n case SignalingProtocol_1.SdkVideoCodecCapability.VP9_PROFILE_0:\n return VideoCodecCapability.vp9Profile0();\n case SignalingProtocol_1.SdkVideoCodecCapability.AV1_MAIN_PROFILE:\n return VideoCodecCapability.av1Main();\n default:\n return undefined;\n }\n }\n}\nexports.default = VideoCodecCapability;\n//# sourceMappingURL=VideoCodecCapability.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SDPCandidateType_1 = __importDefault(require(\"./SDPCandidateType\"));\nconst SDPMediaSection_1 = __importDefault(require(\"./SDPMediaSection\"));\nconst VideoCodecCapability_1 = __importDefault(require(\"./VideoCodecCapability\"));\n/**\n * [[SDP]] includes a few helper functions for parsing sdp string.\n */\nclass SDP {\n /**\n * Construts a new [[SDP]] object\n */\n constructor(sdp) {\n this.sdp = sdp;\n }\n /**\n * Clones an SDP\n */\n clone() {\n return new SDP(this.sdp);\n }\n /**\n * Checks if the candidate is a valid RTP candidate\n */\n static isRTPCandidate(candidate) {\n const match = /candidate[:](\\S+) (\\d+)/g.exec(candidate);\n if (match === null || match[2] !== '1') {\n return false;\n }\n return true;\n }\n /**\n * Constructs a new SDP with the given set of SDP lines.\n */\n static linesToSDP(lines) {\n return new SDP(lines.join(SDP.CRLF));\n }\n /**\n * Returns an enum of [[candidateType]] for the given string.\n */\n static candidateTypeFromString(candidateType) {\n switch (candidateType) {\n case SDPCandidateType_1.default.Host:\n return SDPCandidateType_1.default.Host;\n case SDPCandidateType_1.default.ServerReflexive:\n return SDPCandidateType_1.default.ServerReflexive;\n case SDPCandidateType_1.default.PeerReflexive:\n return SDPCandidateType_1.default.PeerReflexive;\n case SDPCandidateType_1.default.Relay:\n return SDPCandidateType_1.default.Relay;\n }\n return null;\n }\n /**\n * Returns the candidate type assocaited with the sdpline.\n */\n static candidateType(sdpLine) {\n const match = /a[=]candidate[:].* typ ([a-z]+) /g.exec(sdpLine);\n if (match === null) {\n return null;\n }\n return SDP.candidateTypeFromString(match[1]);\n }\n /**\n * Returns the media type associated with the sdp line.\n */\n static mediaType(sdpLine) {\n const match = /m=(audio|video)/g.exec(sdpLine);\n if (match === null) {\n return undefined;\n }\n return match[1];\n }\n /**\n * Erase out \"a=mid\" from the sdp line.\n */\n static mid(sdpLine) {\n if (!sdpLine.includes('a=mid:')) {\n return undefined;\n }\n return sdpLine.replace(/^(a=mid:)/, '');\n }\n /**\n * Return the direction associated with the sdp line.\n */\n static direction(sdpLine) {\n const match = /a=(sendrecv|sendonly|recvonly|inactive)/g.exec(sdpLine);\n if (match === null) {\n return undefined;\n }\n return match[1];\n }\n /**\n * Format the sdp string into separate lines.\n */\n static splitLines(blob) {\n return blob\n .trim()\n .split('\\n')\n .map((line) => {\n return line.trim();\n });\n }\n /**\n * split the different sdp sections\n */\n static splitSections(sdp) {\n // each section starts with \"m=\"\n const sections = sdp.split('\\nm=');\n return sections.map((section, index) => {\n return (index > 0 ? 'm=' + section : section).trim() + SDP.CRLF;\n });\n }\n /**\n * split the different sdp sections\n */\n static findActiveCameraSection(sections) {\n let cameraLineIndex = 0;\n let hasCamera = false;\n for (const sec of sections) {\n if (/^m=video/.test(sec)) {\n if (sec.indexOf('sendrecv') > -1 ||\n // RFC 4566: If none of the attributes \"sendonly\", \"recvonly\", \"inactive\",\n // and \"sendrecv\" is present, \"sendrecv\" SHOULD be assumed as the\n // default for sessions\n (sec.indexOf('sendonly') === -1 &&\n sec.indexOf('recvonly') === -1 &&\n sec.indexOf('inactive') === -1)) {\n hasCamera = true;\n break;\n }\n }\n cameraLineIndex++;\n }\n if (hasCamera === false) {\n cameraLineIndex = -1;\n }\n return cameraLineIndex;\n }\n /**\n * Extract the SSRCs from the group line.\n *\n * a=ssrc-group: ...\n */\n static extractSSRCsFromFIDGroupLine(figGroupLine) {\n const ssrcStringMatch = /^a=ssrc-group:FID\\s(.+)/.exec(figGroupLine);\n return ssrcStringMatch[1];\n }\n /**\n * Extracts the lines from the sdp blob that matches the given prefix.\n */\n static matchPrefix(blob, prefix) {\n return SDP.splitLines(blob).filter((line) => {\n return line.indexOf(prefix) === 0;\n });\n }\n /**\n * Splits SDP string into lines\n */\n lines() {\n return this.sdp.split(SDP.CRLF);\n }\n /**\n * Checks if SDP has a video section.\n */\n hasVideo() {\n return /^m=video/gm.exec(this.sdp) !== null;\n }\n /**\n * Checks whether the SDP has candidates for any m-line\n */\n hasCandidates() {\n const match = /a[=]candidate[:]/g.exec(this.sdp);\n if (match === null) {\n return false;\n }\n return true;\n }\n /**\n * Checks whether the SDP has candidates for all m-lines\n */\n hasCandidatesForAllMLines() {\n const isAnyCLineUsingLocalHost = this.sdp.indexOf('c=IN IP4 0.0.0.0') > -1;\n const mLinesHaveCandidates = !isAnyCLineUsingLocalHost;\n return mLinesHaveCandidates;\n }\n /**\n * Removes candidates of a given type from SDP\n */\n withoutCandidateType(candidateTypeToExclude) {\n return SDP.linesToSDP(this.lines().filter(line => SDP.candidateType(line) !== candidateTypeToExclude));\n }\n /**\n * Removes server reflexive candidate from SDP\n */\n withoutServerReflexiveCandidates() {\n return this.withoutCandidateType(SDPCandidateType_1.default.ServerReflexive);\n }\n /**\n * Inserts a parameter to the SDP local offer setting the desired average audio bitrate\n */\n withAudioMaxAverageBitrate(maxAverageBitrate) {\n if (!maxAverageBitrate) {\n return this.clone();\n }\n maxAverageBitrate = Math.trunc(Math.min(Math.max(maxAverageBitrate, SDP.rfc7587LowestBitrate), SDP.rfc7587HighestBitrate));\n const srcLines = this.lines();\n const fmtpAttributes = SDP.findOpusFmtpAttributes(srcLines);\n const dstLines = SDP.updateOpusFmtpAttributes(srcLines, fmtpAttributes, [\n `maxaveragebitrate=${maxAverageBitrate}`,\n ]);\n return SDP.linesToSDP(dstLines);\n }\n /**\n * Update the SDP to include stereo\n */\n withStereoAudio() {\n const srcLines = this.lines();\n const fmtpAttributes = SDP.findOpusFmtpAttributes(srcLines);\n const dstLines = SDP.updateOpusFmtpAttributes(srcLines, fmtpAttributes, [\n 'stereo=1',\n 'sprop-stereo=1',\n ]);\n return SDP.linesToSDP(dstLines);\n }\n /**\n * Here we loop through each line in the SDP\n * and construct an array containing the fmtp\n * attribute for all the audio m lines that use\n * the opus codec. If it doesn't use opus codec\n * we add null to the array which tells\n * updateOpusFmtpAttributes that no update is\n * needed for that particular fmtp attribute line\n */\n static findOpusFmtpAttributes(sdpLines) {\n const opusRtpMapRegex = /^a=rtpmap:\\s*(\\d+)\\s+opus\\/48000/;\n let lookingForOpusRtpMap = false;\n const fmtpAttributes = [];\n for (const line of sdpLines) {\n if (line.startsWith('m=audio')) {\n fmtpAttributes.push(null);\n lookingForOpusRtpMap = true;\n }\n if (line.startsWith('m=video')) {\n // Opus rtpmap is only part of audio m lines section\n // Set this to false as we don't need to perform regex\n // matches for video section\n lookingForOpusRtpMap = false;\n }\n if (lookingForOpusRtpMap) {\n const match = opusRtpMapRegex.exec(line);\n if (match !== null) {\n fmtpAttributes[fmtpAttributes.length - 1] = `a=fmtp:${match[1]} `;\n }\n }\n }\n return fmtpAttributes;\n }\n /**\n * Update the fmtp lines in each audio m section\n * that correspond to the opus codec with the parameters\n * specifief in additionalParams\n */\n static updateOpusFmtpAttributes(srcLines, fmtpAttributes, additionalParams) {\n const dstLines = [];\n let fmtpIndex = 0;\n let currFmtpAttribute = null;\n for (const line of srcLines) {\n if (line.startsWith('m=audio')) {\n currFmtpAttribute = fmtpAttributes[fmtpIndex];\n fmtpIndex++;\n }\n if (line.startsWith('m=video')) {\n currFmtpAttribute = null;\n }\n if (currFmtpAttribute && line.startsWith(currFmtpAttribute)) {\n const oldParameters = line.slice(currFmtpAttribute.length).split(';');\n const newParameters = [];\n // If an existing parameter is in additionalParams\n // dont add it to newParameters as it will be replaced\n for (const parameter of oldParameters) {\n const index = additionalParams.findIndex(element => element.startsWith(parameter.split('=')[0]));\n if (index < 0) {\n newParameters.push(parameter);\n }\n }\n for (const parameter of additionalParams) {\n newParameters.push(parameter);\n }\n dstLines.push(currFmtpAttribute + newParameters.join(';'));\n }\n else {\n dstLines.push(line);\n }\n }\n return dstLines;\n }\n /**\n * Munges Unified-Plan SDP from different browsers to conform to one format\n * TODO: will remove this soon.\n */\n withUnifiedPlanFormat() {\n let originalSdp = this.sdp;\n if (originalSdp.includes('mozilla')) {\n return this.clone();\n }\n else {\n originalSdp = originalSdp.replace('o=-', 'o=mozilla-chrome');\n }\n return new SDP(originalSdp);\n }\n /**\n * Returns the total number of unique Rtp header extensions.\n */\n getUniqueRtpHeaderExtensionId(srcLines) {\n const headerExtensionIds = [];\n for (const line of srcLines) {\n if (/^a=extmap:/.test(line.trim())) {\n const headerExtension = line.split('a=extmap:')[1].split(' ');\n const id = +headerExtension[0];\n if (!headerExtensionIds.includes(id)) {\n headerExtensionIds.push(id);\n }\n }\n }\n headerExtensionIds.sort((a, b) => a - b);\n let previousId = 0; // header extension cannot be 0, refer https://datatracker.ietf.org/doc/html/rfc5285\n for (const id of headerExtensionIds) {\n if (id - previousId > 1) {\n return previousId + 1;\n }\n previousId = id;\n }\n // One-Byte Header header extension cannot be bigger than 14, refer https://datatracker.ietf.org/doc/html/rfc5285\n return previousId === 14 ? -1 : previousId + 1;\n }\n /**\n * To avoid resubscribing to preemptively turn off simulcast streams or to switch layers\n * negotiate with the back end to determine whether to use layers allocation header extension\n * this will not add the packet overhead unless negotiated to avoid waste\n */\n withVideoLayersAllocationRtpHeaderExtension(previousSdp) {\n return this.withRtpHeaderExtension(previousSdp, SDP.videoLayersAllocationRtpHeaderExtensionUrl);\n }\n /**\n * Dependency descriptors can be used by the backend to designate spatial or temporal layers\n * on a single encoding. Along with the video layers allocation exension this will\n * result in the ability for remote attendees to subscribe to individual layers below the top.\n */\n withDependencyDescriptorRtpHeaderExtension(previousSdp) {\n return this.withRtpHeaderExtension(previousSdp, SDP.dependencyDescriptorRtpHeaderExtensionUrl);\n }\n /**\n * If the send transceiver is in a state where the layers allocation extension is not matching up with\n * the dependency descriptor extension, or we simply don't want to allow for the seperation of spatial\n * or temporal layers, we can remove the dependency descriptor from the SDP.\n *\n * Note: Care should be taken when calling this function since `withDependencyDescriptorRtpHeaderExtension`\n * if called again will require an accurate ID value. Thus it is recommended to only call `withoutDependencyDescriptorRtpHeaderExtension`\n * after setting the local description.\n */\n withoutDependencyDescriptorRtpHeaderExtension() {\n const srcLines = SDP.splitLines(this.sdp).filter(line => !line.includes(SDP.dependencyDescriptorRtpHeaderExtensionUrl));\n return new SDP(srcLines.join(SDP.CRLF) + SDP.CRLF);\n }\n withRtpHeaderExtension(previousSdp, url) {\n // According to https://webrtc.googlesource.com/src/+/b62ee8ce94e5f10e0a94d6f112e715cc4d0cd9dc,\n // RTP header extension ID change would result in a hard failure. Therefore if the extension exists\n // in the previous SDP, use the same extension ID to avoid the failure. Otherwise use a new ID\n const previousId = previousSdp ? previousSdp.getRtpHeaderExtensionId(url) : -1;\n const id = previousId === -1 ? this.getUniqueRtpHeaderExtensionId(SDP.splitLines(this.sdp)) : previousId;\n const sections = SDP.splitSections(this.sdp);\n const newSections = [];\n for (let section of sections) {\n if (/^m=video/.test(section) && SDP.getRtpHeaderExtensionIdInSection(section, url) === -1) {\n // Add RTP header extension when it does not already exist\n const srcLines = SDP.splitLines(section);\n const dstLines = [];\n if (id === -1 || this.hasRtpHeaderExtensionId(id)) {\n // if all ids are used or the id is already used, we won't add new line to it\n newSections.push(section);\n continue;\n }\n for (const line of srcLines) {\n dstLines.push(line);\n if (/^a=sendrecv/.test(line.trim())) {\n const targetLine = `a=extmap:` + id + ` ` + url;\n dstLines.push(targetLine);\n }\n }\n section = dstLines.join(SDP.CRLF) + SDP.CRLF;\n }\n else if (previousId !== -1 &&\n /^m=video/.test(section) &&\n SDP.getRtpHeaderExtensionIdInSection(section, url) !== previousId) {\n // Override extension ID if it does not match previous SDP\n const srcLines = SDP.splitLines(section);\n const dstLines = [];\n for (const line of srcLines) {\n if (/^a=extmap:/.test(line.trim())) {\n const headerExtension = line.split('a=extmap:')[1].split(' ');\n if (headerExtension[1] === url) {\n if (!this.hasRtpHeaderExtensionId(previousId)) {\n // If previous ID is used by another extension, remove it from this SDP\n const targetLine = `a=extmap:` + previousId + ` ` + url;\n dstLines.push(targetLine);\n }\n continue;\n }\n }\n dstLines.push(line);\n }\n section = dstLines.join(SDP.CRLF) + SDP.CRLF;\n }\n newSections.push(section);\n }\n const newSdp = newSections.join('');\n return new SDP(newSdp);\n }\n /**\n * Extracts the ssrc for the sendrecv video media section in SDP\n */\n ssrcForVideoSendingSection() {\n const srcSDP = this.sdp;\n const sections = SDP.splitSections(srcSDP);\n if (sections.length < 2) {\n return '';\n }\n const cameraLineIndex = SDP.findActiveCameraSection(sections);\n if (cameraLineIndex === -1) {\n return '';\n }\n // TODO: match for Firefox. Currently all failures are not Firefox induced.\n const fidGroupMatch = SDP.matchPrefix(sections[cameraLineIndex], 'a=ssrc-group:FID ');\n if (fidGroupMatch.length < 1) {\n return '';\n }\n const fidGroup = SDP.extractSSRCsFromFIDGroupLine(fidGroupMatch[0]);\n const [videoSSRC1] = fidGroup.split(' ').map(ssrc => parseInt(ssrc, 10));\n return videoSSRC1.toString();\n }\n /**\n * Returns whether the sendrecv video sections if exist have two different SSRCs in SDPs\n */\n videoSendSectionHasDifferentSSRC(prevSdp) {\n const ssrc1 = this.ssrcForVideoSendingSection();\n const ssrc2 = prevSdp.ssrcForVideoSendingSection();\n if (ssrc1 === '' || ssrc2 === '') {\n return false;\n }\n const ssrc1InNumber = parseInt(ssrc1, 10);\n const ssrc2InNumber = parseInt(ssrc2, 10);\n if (ssrc1InNumber === ssrc2InNumber) {\n return false;\n }\n return true;\n }\n /**\n * Removes H.264 from the send section.\n */\n removeH264SupportFromSendSection() {\n const srcSDP = this.sdp;\n const sections = SDP.splitSections(srcSDP);\n const cameraLineIndex = SDP.findActiveCameraSection(sections);\n if (cameraLineIndex === -1) {\n return new SDP(this.sdp);\n }\n const cameraSection = sections[cameraLineIndex];\n const cameraSectionLines = SDP.splitLines(cameraSection);\n const payloadTypesForH264 = [];\n const primaryPayloadTypeToFeedbackPayloadTypes = new Map();\n // Loop through camera section (m=video)\n cameraSectionLines.forEach(attribute => {\n // Find the payload type with H264 codec line (e.g., a=rtpmap: H264/90000)\n if (/^a=rtpmap:/.test(attribute)) {\n const payloadMatch = /^a=rtpmap:([0-9]+)\\s/.exec(attribute);\n if (payloadMatch && attribute.toLowerCase().includes('h264')) {\n payloadTypesForH264.push(parseInt(payloadMatch[1], 10));\n }\n }\n // Loop through the rtx payload and create a mapping between it and the primary payload.\n // a=fmtp: apt=\n if (/^a=fmtp:/.test(attribute)) {\n const feedbackMatches = /^a=fmtp:([0-9]+) apt=([0-9]+)/.exec(attribute);\n if (feedbackMatches && feedbackMatches.length === 3) {\n const feedbackPayloadType = parseInt(feedbackMatches[1], 10);\n const primaryPayloadType = parseInt(feedbackMatches[2], 10);\n if (primaryPayloadTypeToFeedbackPayloadTypes.has(primaryPayloadType)) {\n primaryPayloadTypeToFeedbackPayloadTypes\n .get(primaryPayloadType)\n .push(feedbackPayloadType);\n }\n else {\n primaryPayloadTypeToFeedbackPayloadTypes.set(primaryPayloadType, [feedbackPayloadType]);\n }\n }\n }\n });\n // Add the rtx payloads corresponding to the H264 codec to the remove list\n const payloadTypesToRemove = new Set();\n for (const type of payloadTypesForH264) {\n payloadTypesToRemove.add(type);\n const feedbackTypes = primaryPayloadTypeToFeedbackPayloadTypes.get(type);\n if (feedbackTypes) {\n for (const feedbackType of feedbackTypes) {\n payloadTypesToRemove.add(feedbackType);\n }\n }\n }\n // Remove H264 payload from the media line. m=video 9 UDP/+++ \n if (payloadTypesForH264.length > 0) {\n const mline = cameraSectionLines[0].split(' ');\n cameraSectionLines[0] = mline\n .filter((text) => !payloadTypesToRemove.has(parseInt(text)))\n .join(' ');\n }\n // Filter out lines with H264 payload\n const filteredLines = cameraSectionLines.filter((line) => {\n if (!line.includes('rtpmap') && !line.includes('rtcp-fb') && !line.includes('fmtp')) {\n return true;\n }\n for (const type of payloadTypesToRemove) {\n if (line.includes(type.toString())) {\n return false;\n }\n }\n return true;\n });\n sections[cameraLineIndex] = filteredLines.join(SDP.CRLF) + SDP.CRLF;\n const newSDP = sections.join('');\n return new SDP(newSDP);\n }\n /**\n * List of parsed media sections sections in order they occur on SDP.\n */\n mediaSections() {\n const sections = SDP.splitSections(this.sdp);\n if (sections.length < 2) {\n return [];\n }\n const parsedMediaSections = [];\n for (let i = 1; i < sections.length; i++) {\n const section = new SDPMediaSection_1.default();\n const lines = SDP.splitLines(sections[i]);\n for (const line of lines) {\n const mediaType = SDP.mediaType(line);\n if (mediaType !== undefined) {\n section.mediaType = mediaType;\n continue;\n }\n const direction = SDP.direction(line);\n if (direction !== undefined) {\n section.direction = direction;\n continue;\n }\n const mid = SDP.mid(line);\n if (mid !== undefined) {\n section.mid = mid;\n continue;\n }\n }\n parsedMediaSections.push(section);\n }\n return parsedMediaSections;\n }\n /**\n * Return RTP header extension ID if the extension exists in section. Return -1 otherwise\n */\n static getRtpHeaderExtensionIdInSection(section, url) {\n const lines = SDP.splitLines(section);\n for (const line of lines) {\n if (/^a=extmap:/.test(line.trim())) {\n const headerExtension = line.split('a=extmap:')[1].split(' ');\n const id = +headerExtension[0];\n if (headerExtension[1] === url) {\n return id;\n }\n }\n }\n return -1;\n }\n /**\n * Return RTP header extension ID if the extension exists in SDP. Return -1 otherwise\n */\n getRtpHeaderExtensionId(url) {\n const sections = SDP.splitSections(this.sdp);\n for (const section of sections) {\n if (/^m=video/.test(section)) {\n const id = SDP.getRtpHeaderExtensionIdInSection(section, url);\n if (id !== -1) {\n return id;\n }\n }\n }\n return -1;\n }\n /**\n * Return if extension ID exists in the SDP\n */\n hasRtpHeaderExtensionId(targetId) {\n const lines = SDP.splitLines(this.sdp);\n for (const line of lines) {\n if (/^a=extmap:/.test(line.trim())) {\n const headerExtension = line.split('a=extmap:')[1].split(' ');\n const id = +headerExtension[0];\n if (id === targetId) {\n return true;\n }\n }\n }\n return false;\n }\n /**\n * Based off the provided preferences, this function will reorder the payload types listed in the `m=video` line.\n *\n * This will be applied to the `a=sendrecv` section so it can be applied on either local or remote SDPs. It can be used to\n * 'polyfill' `RTCRtpSender.setCodecPreferences' on the offer, but it can also be used on remote SDPs to force the\n * codec actually being send, since the send codec is currently dependent on the remote answer (i.e. `setCodecPreferences` doesn't actually\n * have any impact unless the remote side respects the order of codecs which is not true of the Chime SDK media backends).\n */\n withVideoSendCodecPreferences(preferences) {\n const srcSDP = this.sdp;\n const sections = SDP.splitSections(srcSDP);\n // Note `findActiveCameraSection` looks for `sendrecv` video sections so it\n // works on both local and remote SDPs.\n const cameraLineIndex = SDP.findActiveCameraSection(sections);\n if (cameraLineIndex === -1) {\n return new SDP(this.sdp);\n }\n sections[cameraLineIndex] = this.sectionWithCodecPreferences(sections[cameraLineIndex], preferences);\n const newSDP = sections.join('');\n return new SDP(newSDP);\n }\n // Based off the provided preferences, this function will reorder the payload types listed in the `m=video` line.\n sectionWithCodecPreferences(section, preferences) {\n const payloadTypeToCodec = new Map();\n const lines = SDP.splitLines(section);\n // Process each line to map payload types to their respective codecs\n lines.forEach(line => {\n if (!line.startsWith('a=rtpmap:')) {\n return;\n }\n const payloadMatch = /^a=rtpmap:(\\d+)\\s/.exec(line);\n if (!payloadMatch) {\n return;\n }\n const payloadTypeString = payloadMatch[1];\n for (const preference of preferences) {\n if (!line.includes(`${preference.codecName}/${preference.codecCapability.clockRate}`)) {\n continue;\n }\n let codecMatches = false;\n if (preference.codecCapability.sdpFmtpLine !== undefined) {\n let hasVp9ProfileId = false;\n for (const prospectiveFmtpLine of lines) {\n if (preference.fmtpLineMatches(prospectiveFmtpLine, parseInt(payloadTypeString))) {\n codecMatches = true;\n break;\n }\n hasVp9ProfileId || (hasVp9ProfileId = prospectiveFmtpLine.startsWith(`a=fmtp:${payloadTypeString} profile-id=`));\n }\n if (preference.equals(VideoCodecCapability_1.default.vp9Profile0()) && !hasVp9ProfileId) {\n codecMatches = true;\n }\n }\n else {\n codecMatches = true;\n }\n if (codecMatches) {\n payloadTypeToCodec.set(payloadTypeString, preference);\n break;\n }\n }\n });\n const payloadTypesToRemove = new Set(payloadTypeToCodec.keys());\n const mline = lines[0].split(' ').filter(text => !payloadTypesToRemove.has(text));\n const orderedPreferedPayloadTypes = Array.from(payloadTypeToCodec.entries())\n .sort(([_payloadType1, codec1], [_payloadType2, codec2]) => {\n const priority1 = preferences.indexOf(codec1);\n const priority2 = preferences.indexOf(codec2);\n return priority1 - priority2;\n })\n .map(([payloadType, _]) => payloadType);\n mline.splice(3, 0, ...orderedPreferedPayloadTypes);\n lines[0] = mline.join(' ');\n return lines.join(SDP.CRLF) + SDP.CRLF;\n }\n /**\n * Returns the `VideoCodecCapability` which corresponds to the first payload type in the\n * m-line (e.g. `m=video 9 UDP/+++ ...`),\n * parsing the rest of the SDP for relevant information to construct it.\n *\n * Returns undefined if there is no video send section or no codecs in the send section\n *\n * This function is currently unused/deprecated and will be removed in a future PR.\n */\n highestPriorityVideoSendCodec() {\n const prioritizedSendVideoCodecCapabilities = this.prioritizedSendVideoCodecCapabilities();\n return prioritizedSendVideoCodecCapabilities.length > 0\n ? prioritizedSendVideoCodecCapabilities[0]\n : undefined;\n }\n /**\n * Returns all `VideoCodecCapability` that can be found in the camera section, in order of priority as defined in\n * m-line (e.g. `m=video 9 UDP/+++ ...`),\n * parsing the rest of the SDP for relevant information to construct it.\n *\n * Returns an empty list if there is no video send section or no codecs in the send section\n */\n prioritizedSendVideoCodecCapabilities() {\n const srcSDP = this.sdp;\n const sections = SDP.splitSections(srcSDP);\n // Note `findActiveCameraSection` looks for `sendrecv` video sections so it\n // works on both local and remote SDPs.\n const cameraLineIndex = SDP.findActiveCameraSection(sections);\n if (cameraLineIndex === -1) {\n return [];\n }\n const lines = SDP.splitLines(sections[cameraLineIndex]);\n // m=video 9 UDP/+++ ...\n const mlineTokens = lines[0].split(' ');\n if (mlineTokens.length < 4) {\n return [];\n }\n // Extract payload types from the m-line\n const payloadTypes = mlineTokens.slice(3);\n // Get VideoCodecCapability for each payload type\n const capabilities = payloadTypes\n .map(payloadType => this.videoCodecCapabilityForPayloadType(lines, payloadType))\n .filter(capability => {\n // Filter out capabilities that failed to parse or are not codecs (e.g. RTX payload types)\n return (capability !== undefined && ['VP8', 'H264', 'VP9', 'AV1'].includes(capability.codecName));\n });\n return capabilities;\n }\n videoCodecCapabilityForPayloadType(sectionLines, payloadType) {\n let codecName = undefined;\n let clockRate = undefined;\n let fmtpLine = undefined;\n for (const line of sectionLines) {\n // Match the payload type in rtpmap lines\n const payloadMatch = /^a=rtpmap:([0-9]+)\\s/.exec(line);\n if (payloadMatch && payloadMatch[1] === payloadType) {\n const lineTokens = line.split(' ');\n const nameAndClockRate = lineTokens[1].split('/');\n if (nameAndClockRate.length >= 2) {\n codecName = nameAndClockRate[0];\n clockRate = nameAndClockRate[1];\n }\n }\n // Match fmtp lines for the payload type\n if (line.startsWith(`a=fmtp:${payloadType} `)) {\n // `split` will always return 2 items given we have trailing whitespace in check above\n fmtpLine = line.split(' ')[1];\n }\n }\n if (codecName !== undefined) {\n return new VideoCodecCapability_1.default(codecName, {\n clockRate: parseInt(clockRate),\n mimeType: `video/${codecName}`,\n sdpFmtpLine: fmtpLine,\n });\n }\n return undefined;\n }\n getAudioPayloadTypes() {\n const payloadTypeMap = new Map();\n const srcSDP = this.sdp;\n const sections = SDP.splitSections(srcSDP);\n payloadTypeMap.set('opus', SDP.findAudioPayloadType('opus', sections));\n payloadTypeMap.set('red', SDP.findAudioPayloadType('red', sections));\n return payloadTypeMap;\n }\n static findAudioPayloadType(codecName, sections) {\n const codecRegex = `a=rtpmap:\\\\s*(\\\\d+)\\\\s+${codecName}\\\\/48000`;\n const rtpMapRegex = new RegExp(codecRegex);\n for (const sec of sections) {\n if (/^m=audio/.test(sec)) {\n const match = rtpMapRegex.exec(sec);\n if (match !== null) {\n return Number(match[1]);\n }\n }\n }\n return 0;\n }\n /**\n * Modifies the active camera section to include a specified starting bitrate\n * for video sending by adding a 'x-google-start-bitrate' fmtp line paramter for\n * each payload type associated with video.\n *\n * If no active camera section is found in the SDP, returns the original SDP object.\n */\n withStartingVideoSendBitrate(bitrateKbps) {\n const sections = SDP.splitSections(this.sdp);\n const cameraLineIndex = SDP.findActiveCameraSection(sections);\n if (cameraLineIndex === -1) {\n return this;\n }\n const srcLines = SDP.splitLines(sections[cameraLineIndex]);\n const dstLines = [];\n for (const line of srcLines) {\n if (/^a=fmtp:\\d*/.test(line)) {\n // `x-google-start-bitrate` is an unofficial flag that has existed in libwebrtc since its release and is unlikely\n // to be removed without notification.\n //\n // libwebrtc reference: https://webrtc.googlesource.com/src/+/b6ef1a736ee94d97cc28f3bd59b826c716a3278f/media/base/media_constants.cc#97\n const newLine = line + `;x-google-start-bitrate=${bitrateKbps * 1000}`;\n dstLines.push(newLine);\n }\n else {\n dstLines.push(line);\n }\n }\n sections[cameraLineIndex] = dstLines.join(SDP.CRLF) + SDP.CRLF;\n const newSdp = sections.join('');\n return new SDP(newSdp);\n }\n}\nexports.default = SDP;\nSDP.CRLF = '\\r\\n';\nSDP.rfc7587LowestBitrate = 6000;\nSDP.rfc7587HighestBitrate = 510000;\nSDP.dependencyDescriptorRtpHeaderExtensionUrl = `https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension`;\nSDP.videoLayersAllocationRtpHeaderExtensionUrl = `http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00`;\n//# sourceMappingURL=SDP.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst SDP_1 = __importDefault(require(\"../sdp/SDP\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[CreateSDPTask]] asynchronously calls [[createOffer]] on peer connection.\n */\nclass CreateSDPTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'CreateSDPTask';\n }\n cancel() {\n // Just in case. The baseCancel behavior should prevent this.\n /* istanbul ignore else */\n if (this.cancelPromise) {\n const error = new Error(`canceling ${this.name()}`);\n this.cancelPromise(error);\n delete this.cancelPromise;\n }\n }\n sessionUsesAudio() {\n var _a, _b;\n return !!((_b = (_a = this.context.meetingSessionConfiguration) === null || _a === void 0 ? void 0 : _a.urls) === null || _b === void 0 ? void 0 : _b.audioHostURL);\n }\n sessionUsesVideo() {\n const enabled = true;\n let sending;\n if (this.context.transceiverController.useTransceivers()) {\n sending = this.context.transceiverController.hasVideoInput();\n }\n else {\n sending = this.context.videoTileController.hasStartedLocalVideoTile();\n }\n const receiving = !!this.context.videosToReceive && !this.context.videosToReceive.empty();\n const usesVideo = enabled && (sending || receiving);\n this.context.logger.info(`uses video: ${usesVideo} (enabled: ${enabled}, sending: ${sending}, receiving: ${receiving})`);\n return usesVideo;\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const offerOptions = {\n offerToReceiveAudio: this.sessionUsesAudio(),\n offerToReceiveVideo: this.sessionUsesVideo(),\n };\n this.logger.info(`peer connection offerOptions: ${JSON.stringify(offerOptions)}`);\n yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n this.cancelPromise = (error) => {\n reject(error);\n };\n try {\n this.context.sdpOfferInit = yield this.context.peer.createOffer(offerOptions);\n this.context.logger.info('peer connection created offer');\n if (this.context.previousSdpOffer) {\n if (new SDP_1.default(this.context.sdpOfferInit.sdp).videoSendSectionHasDifferentSSRC(this.context.previousSdpOffer)) {\n const error = new Error(`canceling ${this.name()} due to the meeting status code: ${MeetingSessionStatusCode_1.default.IncompatibleSDP}`);\n this.context.previousSdpOffer = null;\n reject(error);\n return;\n }\n }\n resolve();\n }\n catch (error) {\n reject(error);\n }\n finally {\n delete this.cancelPromise;\n }\n }));\n });\n }\n}\nexports.default = CreateSDPTask;\n//# sourceMappingURL=CreateSDPTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/* eslint @typescript-eslint/no-explicit-any: 0 */\nclass DataMessage {\n constructor(timestampMs, topic, data, senderAttendeeId, senderExternalUserId, throttled) {\n this.timestampMs = timestampMs;\n this.topic = topic;\n this.data = data;\n this.senderAttendeeId = senderAttendeeId;\n this.senderExternalUserId = senderExternalUserId;\n this.throttled = !!throttled;\n }\n /**\n * Helper conversion methods to convert {@link Uint8Array} data to string\n */\n text() {\n return new TextDecoder().decode(this.data);\n }\n /**\n * Helper conversion methods to convert {@link Uint8Array} data to JSON\n */\n json() {\n return JSON.parse(new TextDecoder().decode(this.data));\n }\n}\nexports.default = DataMessage;\n//# sourceMappingURL=DataMessage.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nclass DefaultActiveSpeakerDetector {\n constructor(realtimeController, selfAttendeeId, hasBandwidthPriorityCallback, waitIntervalMs = 1000, updateIntervalMs = 200) {\n this.realtimeController = realtimeController;\n this.selfAttendeeId = selfAttendeeId;\n this.hasBandwidthPriorityCallback = hasBandwidthPriorityCallback;\n this.waitIntervalMs = waitIntervalMs;\n this.updateIntervalMs = updateIntervalMs;\n this.speakerScores = {};\n this.speakerMuteState = {};\n this.detectorCallbackToHandler = new Map();\n this.detectorCallbackToScoresTimer = new Map();\n this.detectorCallbackToActivityTimer = new Map();\n this.hasBandwidthPriority = false;\n this.mostRecentUpdateTimestamp = {};\n }\n needUpdate(attendeeId) {\n if (!this.activeSpeakers) {\n return true;\n }\n return ((this.speakerScores[attendeeId] === 0 && this.activeSpeakers.includes(attendeeId)) ||\n (this.speakerScores[attendeeId] > 0 && !this.activeSpeakers.includes(attendeeId)));\n }\n updateActiveSpeakers(policy, callback, attendeeId) {\n if (!this.needUpdate(attendeeId)) {\n return;\n }\n const sortedSpeakers = [];\n const attendeeIds = Object.keys(this.speakerScores);\n for (let i = 0; i < attendeeIds.length; i++) {\n const attendeeId = attendeeIds[i];\n sortedSpeakers.push({ attendeeId: attendeeId, activeScore: this.speakerScores[attendeeId] });\n }\n const sortedAttendeeIds = sortedSpeakers\n .sort((s1, s2) => s2.activeScore - s1.activeScore)\n .filter(function (s) {\n return s.activeScore > 0;\n })\n .map(function (s) {\n return s.attendeeId;\n });\n this.activeSpeakers = sortedAttendeeIds;\n callback(sortedAttendeeIds);\n const selfIsActive = sortedAttendeeIds.length > 0 && sortedAttendeeIds[0] === this.selfAttendeeId;\n const hasBandwidthPriority = selfIsActive && policy.prioritizeVideoSendBandwidthForActiveSpeaker();\n const hasBandwidthPriorityDidChange = this.hasBandwidthPriority !== hasBandwidthPriority;\n if (hasBandwidthPriorityDidChange) {\n this.hasBandwidthPriority = hasBandwidthPriority;\n this.hasBandwidthPriorityCallback(hasBandwidthPriority);\n }\n }\n updateScore(policy, callback, attendeeId, volume, muted) {\n const activeScore = policy.calculateScore(attendeeId, volume, muted);\n if (this.speakerScores[attendeeId] !== activeScore) {\n this.speakerScores[attendeeId] = activeScore;\n this.mostRecentUpdateTimestamp[attendeeId] = Date.now();\n this.updateActiveSpeakers(policy, callback, attendeeId);\n }\n }\n subscribe(policy, callback, scoresCallback, scoresCallbackIntervalMs) {\n const handler = (attendeeId, present) => {\n if (!present) {\n this.speakerScores[attendeeId] = 0;\n this.mostRecentUpdateTimestamp[attendeeId] = Date.now();\n this.updateActiveSpeakers(policy, callback, attendeeId);\n return;\n }\n this.realtimeController.realtimeSubscribeToVolumeIndicator(attendeeId, (attendeeId, volume, muted, _signalStrength) => {\n this.mostRecentUpdateTimestamp[attendeeId] = Date.now();\n if (muted !== null) {\n this.speakerMuteState[attendeeId] = muted;\n }\n this.updateScore(policy, callback, attendeeId, volume, muted);\n });\n };\n this.detectorCallbackToHandler.set(callback, handler);\n const activityTimer = new IntervalScheduler_1.default(this.updateIntervalMs);\n activityTimer.start(() => {\n for (const attendeeId in this.speakerScores) {\n if (Date.now() - this.mostRecentUpdateTimestamp[attendeeId] > this.waitIntervalMs) {\n this.updateScore(policy, callback, attendeeId, 0, this.speakerMuteState[attendeeId]);\n }\n }\n });\n this.detectorCallbackToActivityTimer.set(callback, activityTimer);\n if (scoresCallback && scoresCallbackIntervalMs) {\n const scoresTimer = new IntervalScheduler_1.default(scoresCallbackIntervalMs);\n scoresTimer.start(() => {\n scoresCallback(this.speakerScores);\n });\n this.detectorCallbackToScoresTimer.set(callback, scoresTimer);\n }\n this.realtimeController.realtimeSubscribeToAttendeeIdPresence(handler);\n }\n unsubscribe(callback) {\n const handler = this.detectorCallbackToHandler.get(callback);\n this.detectorCallbackToHandler.delete(callback);\n if (handler) {\n this.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(handler);\n }\n const activityTimer = this.detectorCallbackToActivityTimer.get(callback);\n if (activityTimer) {\n activityTimer.stop();\n this.detectorCallbackToActivityTimer.delete(callback);\n }\n const scoresTimer = this.detectorCallbackToScoresTimer.get(callback);\n if (scoresTimer) {\n scoresTimer.stop();\n this.detectorCallbackToHandler.delete(callback);\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n for (const handler of this.detectorCallbackToHandler.values()) {\n this.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(handler);\n }\n for (const activityTimer of this.detectorCallbackToActivityTimer.values()) {\n activityTimer.stop();\n }\n for (const scoresTimer of this.detectorCallbackToScoresTimer.values()) {\n scoresTimer.stop();\n }\n this.detectorCallbackToHandler.clear();\n this.detectorCallbackToActivityTimer.clear();\n this.detectorCallbackToScoresTimer.clear();\n });\n }\n}\nexports.default = DefaultActiveSpeakerDetector;\n//# sourceMappingURL=DefaultActiveSpeakerDetector.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DefaultActiveSpeakerPolicy {\n /** Creates active speaker policy with speakerWeight, cutoffThreshold, silenceThreshold, and takeoverRate.\n *\n * @param speakerWeight\n * The number used to calculate new active speaker score for current attendee.\n * ```js\n * Formula:\n * updatedCurrentAttendeeScore = currentAttendeeExistingScore * speakerWeight + currentReceivedVolume * (1 - speakerWeight)\n * ```\n *\n * @param cutoffThreshold\n * The threshold number compared with updated active speaker score.\n * If the updated active speaker score is less than this threshold value,\n * the updated score is returned as 0, else the updated score is returned.\n *\n * @param silenceThreshold\n * The threshold number compared with current received volume.\n * While calculating the new active speaker score, if the current received\n * volume is less than this threshold value, the current received volume is considered as 0,\n * else 1.\n *\n * @param takeoverRate\n * The number used to calculate other attendee's active speaker score, other than the current attendee.\n * ```js\n * Formula:\n * updatedOtherAttendeeActiveSpeakerScore = Math.max(\n * existingOtherAttendeeActiveSpeakerScore - takeoverRate * currentReceivedVolume,\n * 0\n * );\n * ```\n */\n constructor(speakerWeight = 0.9, cutoffThreshold = 0.01, silenceThreshold = 0.2, takeoverRate = 0.2) {\n this.speakerWeight = speakerWeight;\n this.cutoffThreshold = cutoffThreshold;\n this.silenceThreshold = silenceThreshold;\n this.takeoverRate = takeoverRate;\n /**\n * The map of attendeeIds to their active speaker score values\n */\n this.volumes = {};\n }\n calculateScore(attendeeId, volume, muted) {\n if (muted || volume === null) {\n volume = 0;\n }\n if (!this.volumes.hasOwnProperty(attendeeId)) {\n this.volumes[attendeeId] = 0;\n }\n if (volume > this.silenceThreshold) {\n volume = 1.0;\n }\n else {\n volume = 0.0;\n }\n const score = this.volumes[attendeeId] * this.speakerWeight + volume * (1 - this.speakerWeight);\n this.volumes[attendeeId] = score;\n for (const otherAttendeeId in this.volumes) {\n if (otherAttendeeId !== attendeeId) {\n this.volumes[otherAttendeeId] = Math.max(this.volumes[otherAttendeeId] - this.takeoverRate * volume, 0);\n }\n }\n if (score < this.cutoffThreshold) {\n return 0;\n }\n return score;\n }\n prioritizeVideoSendBandwidthForActiveSpeaker() {\n return true;\n }\n}\nexports.default = DefaultActiveSpeakerPolicy;\n//# sourceMappingURL=DefaultActiveSpeakerPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nclass DefaultAudioMixController {\n constructor(logger) {\n this.logger = logger;\n this.audioDevice = null;\n this.audioElement = null;\n this.audioStream = null;\n this.browserBehavior = new DefaultBrowserBehavior_1.default();\n this.observers = new Set();\n }\n bindAudioElement(element) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!element) {\n throw new Error(`Cannot bind audio element: ${element}`);\n }\n this.audioElement = element;\n this.audioElement.autoplay = true;\n return this.bindAudioMix();\n });\n }\n unbindAudioElement() {\n if (!this.audioElement) {\n return;\n }\n this.audioElement.srcObject = null;\n this.audioElement = null;\n this.forEachObserver((observer) => {\n if (this.audioStream) {\n observer.meetingAudioStreamBecameInactive(this.audioStream);\n }\n });\n }\n bindAudioStream(stream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!stream) {\n return;\n }\n this.audioStream = stream;\n try {\n yield this.bindAudioMix();\n }\n catch (error) {\n /* istanbul ignore else */\n if (this.logger) {\n this.logger.warn(`Failed to bind audio stream: ${error}`);\n }\n }\n });\n }\n bindAudioDevice(device) {\n return __awaiter(this, void 0, void 0, function* () {\n /**\n * Throw error if browser doesn't even support setSinkId\n * Read more: https://caniuse.com/?search=setSinkId\n */\n if (device && !this.browserBehavior.supportsSetSinkId()) {\n throw new Error('Cannot select audio output device. This browser does not support setSinkId.');\n }\n // Always set device -- we might be setting it back to `null` to reselect\n // the default, and even in that case we need to call `bindAudioMix` in\n // order to update the sink ID to the empty string.\n this.audioDevice = device;\n return this.bindAudioMix();\n });\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observers) {\n AsyncScheduler_1.default.nextTick(() => {\n observerFunc(observer);\n });\n }\n }\n bindAudioMix() {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.audioElement) {\n return;\n }\n const previousStream = this.audioElement.srcObject;\n if (this.audioStream) {\n this.audioElement.srcObject = this.audioStream;\n }\n if (previousStream !== this.audioStream) {\n this.forEachObserver((observer) => {\n if (previousStream) {\n observer.meetingAudioStreamBecameInactive(previousStream);\n }\n if (this.audioStream) {\n observer.meetingAudioStreamBecameActive(this.audioStream);\n }\n });\n }\n // In usual operation, the output device is undefined, and so is the element\n // sink ID. In this case, don't throw an error -- we're being called as a side\n // effect of just binding the audio element, not choosing an output device.\n const shouldSetSinkId = ((_a = this.audioDevice) === null || _a === void 0 ? void 0 : _a.deviceId) !== this.audioElement.sinkId;\n if (shouldSetSinkId &&\n typeof this.audioElement.sinkId === 'undefined') {\n throw new Error('Cannot select audio output device. This browser does not support setSinkId.');\n }\n const newSinkId = this.audioDevice ? this.audioDevice.deviceId : '';\n const oldSinkId = this.audioElement.sinkId;\n if (newSinkId === oldSinkId) {\n return;\n }\n // Take the existing stream and temporarily unbind it while we change\n // the sink ID.\n const existingAudioElement = this\n .audioElement;\n const existingStream = this.audioStream;\n if (this.browserBehavior.hasChromiumWebRTC()) {\n existingAudioElement.srcObject = null;\n }\n if (shouldSetSinkId) {\n try {\n yield existingAudioElement.setSinkId(newSinkId);\n }\n catch (error) {\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.error(`Failed to set sinkId for audio element: ${error}`);\n throw error;\n }\n }\n if (this.browserBehavior.hasChromiumWebRTC()) {\n existingAudioElement.srcObject = existingStream;\n }\n });\n }\n getCurrentMeetingAudioStream() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.audioStream;\n });\n }\n addAudioMixObserver(observer) {\n return __awaiter(this, void 0, void 0, function* () {\n this.observers.add(observer);\n });\n }\n removeAudioMixObserver(observer) {\n return __awaiter(this, void 0, void 0, function* () {\n this.observers.delete(observer);\n });\n }\n audioOutputDidChange(device) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info('Receive an audio output change event');\n return this.bindAudioDevice(device);\n });\n }\n}\nexports.default = DefaultAudioMixController;\n//# sourceMappingURL=DefaultAudioMixController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Types_1 = require(\"../utils/Types\");\nclass SignalingAndMetricsConnectionMonitor {\n constructor(audioVideoController, realtimeController, connectionHealthData, pingPong, statsCollector) {\n this.audioVideoController = audioVideoController;\n this.realtimeController = realtimeController;\n this.connectionHealthData = connectionHealthData;\n this.pingPong = pingPong;\n this.statsCollector = statsCollector;\n this.isActive = false;\n this.hasSeenValidCandidatePairMetricsBefore = false;\n this.lastTotalBytesReceived = 0;\n this.realtimeController.realtimeSubscribeToLocalSignalStrengthChange((signalStrength) => {\n if (this.isActive) {\n this.receiveSignalStrengthChange(signalStrength);\n }\n });\n }\n start() {\n this.isActive = true;\n this.pingPong.addObserver(this);\n this.pingPong.start();\n this.audioVideoController.addObserver(this);\n }\n stop() {\n this.isActive = false;\n this.pingPong.removeObserver(this);\n this.pingPong.stop();\n this.audioVideoController.removeObserver(this);\n }\n receiveSignalStrengthChange(signalStrength) {\n if (signalStrength === 0) {\n this.connectionHealthData.setLastNoSignalTimestampMs(Date.now());\n }\n else if (signalStrength <= 0.5) {\n this.connectionHealthData.setLastWeakSignalTimestampMs(Date.now());\n }\n else {\n this.connectionHealthData.setLastGoodSignalTimestampMs(Date.now());\n }\n this.updateConnectionHealth();\n }\n didReceivePong(_id, latencyMs, clockSkewMs) {\n this.connectionHealthData.setConsecutiveMissedPongs(0);\n this.statsCollector.logLatency('ping_pong', latencyMs);\n this.statsCollector.logLatency('ping_pong_clock_skew', clockSkewMs);\n this.updateConnectionHealth();\n }\n didMissPongs() {\n this.connectionHealthData.setConsecutiveMissedPongs(this.connectionHealthData.consecutiveMissedPongs + 1);\n this.updateConnectionHealth();\n }\n metricsDidReceive(clientMetricReport) {\n let audioPacketsReceived = 0;\n let audiofractionPacketsLostInbound = 0;\n const metricReport = clientMetricReport.getObservableMetrics();\n const potentialAudioPacketsReceived = metricReport.audioPacketsReceived;\n const potentialAudioFractionPacketsLostInbound = metricReport.audioPacketsReceivedFractionLoss;\n const audioSpeakerDelayMs = metricReport.audioSpeakerDelayMs;\n // Firefox does not presently have aggregated bandwidth estimation\n if (typeof audioSpeakerDelayMs === 'number' && !isNaN(audioSpeakerDelayMs)) {\n this.connectionHealthData.setAudioSpeakerDelayMs(audioSpeakerDelayMs);\n }\n // To get the total bytes received, including RTCP, we need to sum up\n // all candidate pair metrics (in case the candidate pair changes).\n //\n // The stats collector currently doesn't account for candidate pair stats\n // so we just use the raw report for now.\n const webrtcReport = clientMetricReport.getRTCStatsReport();\n let totalBytesReceived = 0;\n webrtcReport.forEach(stat => {\n if (stat.type === 'candidate-pair' && stat.bytesReceived) {\n totalBytesReceived += stat.bytesReceived;\n }\n });\n const bytesReceived = totalBytesReceived - this.lastTotalBytesReceived;\n this.lastTotalBytesReceived = totalBytesReceived;\n if (typeof potentialAudioPacketsReceived === 'number' &&\n typeof potentialAudioFractionPacketsLostInbound === 'number') {\n audioPacketsReceived = potentialAudioPacketsReceived;\n audiofractionPacketsLostInbound = potentialAudioFractionPacketsLostInbound;\n if (audioPacketsReceived < 0 || audiofractionPacketsLostInbound < 0 || bytesReceived < 0) {\n // The stats collector or logic above may emit negative numbers on this metric after reconnect\n // which we should not use.\n return;\n }\n }\n else {\n return;\n }\n this.addToMinuteWindow(this.connectionHealthData.packetsReceivedInLastMinute, audioPacketsReceived);\n this.addToMinuteWindow(this.connectionHealthData.fractionPacketsLostInboundInLastMinute, audiofractionPacketsLostInbound);\n // We use candidate pair bytes received as a proxy for packets received\n // since not all versions of all browsers have 'packetsReceived' for candidate pairs\n if (bytesReceived > 0) {\n this.hasSeenValidCandidatePairMetricsBefore = true;\n this.connectionHealthData.setConsecutiveStatsWithNoPackets(0);\n }\n else if (this.hasSeenValidCandidatePairMetricsBefore) {\n this.connectionHealthData.setConsecutiveStatsWithNoPackets(this.connectionHealthData.consecutiveStatsWithNoPackets + 1);\n }\n if (audioPacketsReceived === 0 || audiofractionPacketsLostInbound > 0) {\n this.connectionHealthData.setLastPacketLossInboundTimestampMs(Date.now());\n }\n if (typeof metricReport.audioPacketsSent === 'number') {\n this.updateAudioPacketsSentInConnectionHealth(metricReport.audioPacketsSent);\n }\n this.updateConnectionHealth();\n }\n updateAudioPacketsSentInConnectionHealth(audioPacketsSent) {\n if (audioPacketsSent > 0) {\n this.connectionHealthData.setConsecutiveStatsWithNoAudioPacketsSent(0);\n }\n else {\n this.connectionHealthData.setConsecutiveStatsWithNoAudioPacketsSent(this.connectionHealthData.consecutiveStatsWithNoAudioPacketsSent + 1);\n }\n }\n addToMinuteWindow(array, value) {\n array.unshift(value);\n if (array.length > 60) {\n array.pop();\n }\n }\n updateConnectionHealth() {\n this.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.connectionHealthDidChange).map(f => f.bind(observer)(this.connectionHealthData.clone()));\n });\n }\n}\nexports.default = SignalingAndMetricsConnectionMonitor;\n//# sourceMappingURL=SignalingAndMetricsConnectionMonitor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"./MeetingSessionStatusCode\"));\n/**\n * [[MeetingSessionStatus]] indicates a status received regarding the session.\n */\nclass MeetingSessionStatus {\n constructor(_statusCode) {\n this._statusCode = _statusCode;\n }\n statusCode() {\n return this._statusCode;\n }\n isFailure() {\n switch (this._statusCode) {\n case MeetingSessionStatusCode_1.default.AudioAuthenticationRejected:\n case MeetingSessionStatusCode_1.default.AudioCallAtCapacity:\n case MeetingSessionStatusCode_1.default.AudioInternalServerError:\n case MeetingSessionStatusCode_1.default.AudioServiceUnavailable:\n case MeetingSessionStatusCode_1.default.AudioDisconnected:\n case MeetingSessionStatusCode_1.default.VideoCallAtSourceCapacity:\n case MeetingSessionStatusCode_1.default.SignalingBadRequest:\n case MeetingSessionStatusCode_1.default.SignalingInternalServerError:\n case MeetingSessionStatusCode_1.default.SignalingRequestFailed:\n case MeetingSessionStatusCode_1.default.ICEGatheringTimeoutWorkaround:\n case MeetingSessionStatusCode_1.default.ConnectionHealthReconnect:\n case MeetingSessionStatusCode_1.default.RealtimeApiFailed:\n case MeetingSessionStatusCode_1.default.TaskFailed:\n case MeetingSessionStatusCode_1.default.NoAttendeePresent:\n return true;\n default:\n return false;\n }\n }\n isTerminal() {\n switch (this._statusCode) {\n case MeetingSessionStatusCode_1.default.Left:\n case MeetingSessionStatusCode_1.default.AudioJoinedFromAnotherDevice:\n case MeetingSessionStatusCode_1.default.AudioAuthenticationRejected:\n case MeetingSessionStatusCode_1.default.AudioCallAtCapacity:\n case MeetingSessionStatusCode_1.default.MeetingEnded:\n case MeetingSessionStatusCode_1.default.AudioDisconnected:\n case MeetingSessionStatusCode_1.default.TURNCredentialsForbidden:\n case MeetingSessionStatusCode_1.default.SignalingBadRequest:\n case MeetingSessionStatusCode_1.default.SignalingRequestFailed:\n case MeetingSessionStatusCode_1.default.VideoCallAtSourceCapacity:\n case MeetingSessionStatusCode_1.default.RealtimeApiFailed:\n case MeetingSessionStatusCode_1.default.AudioAttendeeRemoved:\n return true;\n default:\n return false;\n }\n }\n isAudioConnectionFailure() {\n switch (this._statusCode) {\n case MeetingSessionStatusCode_1.default.AudioAuthenticationRejected:\n case MeetingSessionStatusCode_1.default.AudioInternalServerError:\n case MeetingSessionStatusCode_1.default.AudioServiceUnavailable:\n case MeetingSessionStatusCode_1.default.ICEGatheringTimeoutWorkaround:\n case MeetingSessionStatusCode_1.default.SignalingBadRequest:\n case MeetingSessionStatusCode_1.default.SignalingInternalServerError:\n case MeetingSessionStatusCode_1.default.SignalingRequestFailed:\n case MeetingSessionStatusCode_1.default.RealtimeApiFailed:\n case MeetingSessionStatusCode_1.default.NoAttendeePresent:\n return true;\n default:\n return false;\n }\n }\n toString() {\n switch (this._statusCode) {\n case MeetingSessionStatusCode_1.default.OK:\n return 'Everything is OK so far.';\n case MeetingSessionStatusCode_1.default.Left:\n return 'The attendee left the meeting.';\n case MeetingSessionStatusCode_1.default.AudioJoinedFromAnotherDevice:\n return 'The attendee joined from another device.';\n case MeetingSessionStatusCode_1.default.AudioAuthenticationRejected:\n return 'The meeting rejected the attendee.';\n case MeetingSessionStatusCode_1.default.AudioCallAtCapacity:\n return \"The attendee couldn't join because the meeting was at capacity.\";\n case MeetingSessionStatusCode_1.default.MeetingEnded:\n return 'The meeting ended.';\n case MeetingSessionStatusCode_1.default.AudioInternalServerError:\n case MeetingSessionStatusCode_1.default.AudioServiceUnavailable:\n case MeetingSessionStatusCode_1.default.AudioDisconnected:\n return 'The audio connection failed.';\n case MeetingSessionStatusCode_1.default.VideoCallSwitchToViewOnly:\n return \"The attendee couldn't start the local video because the maximum video capacity was reached.\";\n case MeetingSessionStatusCode_1.default.VideoCallAtSourceCapacity:\n return 'The connection failed due to an internal server error.';\n case MeetingSessionStatusCode_1.default.SignalingBadRequest:\n case MeetingSessionStatusCode_1.default.SignalingInternalServerError:\n case MeetingSessionStatusCode_1.default.SignalingRequestFailed:\n return 'The signaling connection failed.';\n case MeetingSessionStatusCode_1.default.ICEGatheringTimeoutWorkaround:\n return 'Gathering ICE candidates timed out. In Chrome, this might indicate that the browser is in a bad state after reconnecting to VPN.';\n case MeetingSessionStatusCode_1.default.ConnectionHealthReconnect:\n return 'The meeting was reconnected.';\n case MeetingSessionStatusCode_1.default.RealtimeApiFailed:\n return 'The real-time API failed. This status code might indicate that the callback you passed to the real-time API threw an exception.';\n case MeetingSessionStatusCode_1.default.TaskFailed:\n return 'The connection failed. See the error message for more details.';\n case MeetingSessionStatusCode_1.default.IncompatibleSDP:\n return 'The connection failed due to incompatible SDP.';\n case MeetingSessionStatusCode_1.default.TURNCredentialsForbidden:\n return 'The meeting ended, or the attendee was removed.';\n case MeetingSessionStatusCode_1.default.NoAttendeePresent:\n return 'The attendee was not present.';\n case MeetingSessionStatusCode_1.default.AudioAttendeeRemoved:\n return 'The meeting ended because attendee removed.';\n case MeetingSessionStatusCode_1.default.AudioVideoWasRemovedFromPrimaryMeeting:\n return 'The Primary meeting credentials provided are no longer valid. chime::DeleteAttendee may have been called on them.';\n case MeetingSessionStatusCode_1.default.AudioDisconnectAudio:\n return 'The audio connection failed.';\n /* istanbul ignore next */\n default: {\n // You get a compile-time error if you do not handle any status code.\n const exhaustiveCheck = this._statusCode;\n throw new Error(`Unhandled case: ${exhaustiveCheck}`);\n }\n }\n }\n static fromSignalFrame(frame) {\n if (frame.error && frame.error.status) {\n return this.fromSignalingStatus(frame.error.status);\n }\n else if (frame.type === SignalingProtocol_js_1.SdkSignalFrame.Type.AUDIO_STATUS) {\n if (frame.audioStatus) {\n return this.fromAudioStatus(frame.audioStatus.audioStatus);\n }\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.SignalingRequestFailed);\n }\n else if (frame.type === SignalingProtocol_js_1.SdkSignalFrame.Type.PRIMARY_MEETING_LEAVE) {\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioVideoWasRemovedFromPrimaryMeeting);\n }\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.OK);\n }\n static fromAudioStatus(status) {\n // TODO: Add these numbers to proto definition and reference them here.\n switch (status) {\n case 200:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.OK);\n case 301:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioJoinedFromAnotherDevice);\n case 302:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioDisconnectAudio);\n case 403:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioAuthenticationRejected);\n case 409:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioCallAtCapacity);\n case 410:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.MeetingEnded);\n case 411:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioAttendeeRemoved);\n case 500:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioInternalServerError);\n case 503:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioServiceUnavailable);\n default:\n switch (Math.floor(status / 100)) {\n case 2:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.OK);\n default:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioDisconnected);\n }\n }\n }\n static fromSignalingStatus(status) {\n // TODO: Add these numbers to proto definition and reference them here.\n //\n // We don't bother adding additional codes with different prefixes, and we probably\n // shouldn't be prefixing all these errors (e.g. `AuthenticationRejected`) with the media type\n // since that doesn't make sense.\n switch (status) {\n case 206:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.VideoCallSwitchToViewOnly);\n case 509:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.VideoCallAtSourceCapacity);\n case 403:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioAuthenticationRejected);\n case 409:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.AudioCallAtCapacity);\n default:\n switch (Math.floor(status / 100)) {\n case 2:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.OK);\n case 4:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.SignalingBadRequest);\n case 5:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.SignalingInternalServerError);\n default:\n return new MeetingSessionStatus(MeetingSessionStatusCode_1.default.SignalingRequestFailed);\n }\n }\n }\n}\nexports.default = MeetingSessionStatus;\n//# sourceMappingURL=MeetingSessionStatus.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingSessionVideoAvailability]] contains the video availability information.\n */\nclass MeetingSessionVideoAvailability {\n constructor() {\n /**\n * Indicates whether one or more remote video streams\n * are available for streaming. This can be used to decide whether or not to\n * switch the connection type to include video.\n */\n this.remoteVideoAvailable = false;\n /**\n * Indicates whether the server has a slot available for\n * this client's local video tile. If the client is already sending a local\n * video tile, then this will be true. This property can be used to decide\n * whether to offer the option to start the local video tile.\n */\n this.canStartLocalVideo = false;\n }\n /**\n * Returns whether the fields are the same as that of another availability object.\n */\n equal(other) {\n return (this.remoteVideoAvailable === other.remoteVideoAvailable &&\n this.canStartLocalVideo === other.canStartLocalVideo);\n }\n /**\n * Returns a deep copy of this object.\n */\n clone() {\n const cloned = new MeetingSessionVideoAvailability();\n cloned.remoteVideoAvailable = this.remoteVideoAvailable;\n cloned.canStartLocalVideo = this.canStartLocalVideo;\n return cloned;\n }\n}\nexports.default = MeetingSessionVideoAvailability;\n//# sourceMappingURL=MeetingSessionVideoAvailability.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst Types_1 = require(\"../utils/Types\");\n/**\n * [[DefaultPingPong]] implements the PingPong and SignalingClientObserver interface.\n */\nclass DefaultPingPong {\n constructor(signalingClient, intervalMs, logger) {\n this.signalingClient = signalingClient;\n this.intervalMs = intervalMs;\n this.logger = logger;\n this.observerQueue = new Set();\n this.consecutivePongsUnaccountedFor = 0;\n this.intervalScheduler = new IntervalScheduler_1.default(this.intervalMs);\n this.pingId = 0;\n }\n addObserver(observer) {\n this.logger.info('adding a ping-pong observer');\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.logger.info('removing a ping-pong observer');\n this.observerQueue.delete(observer);\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n AsyncScheduler_1.default.nextTick(() => {\n if (this.observerQueue.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n start() {\n this.stop();\n this.signalingClient.registerObserver(this);\n if (this.signalingClient.ready()) {\n this.startPingInterval();\n }\n }\n stop() {\n this.stopPingInterval();\n this.signalingClient.removeObserver(this);\n }\n startPingInterval() {\n this.intervalScheduler.start(() => {\n this.ping();\n });\n this.ping();\n }\n stopPingInterval() {\n this.intervalScheduler.stop();\n this.pingId = 0;\n this.consecutivePongsUnaccountedFor = 0;\n }\n ping() {\n if (this.consecutivePongsUnaccountedFor > 0) {\n this.logger.warn(`missed pong ${this.consecutivePongsUnaccountedFor} time(s)`);\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.didMissPongs).map(f => f.bind(observer)(this.consecutivePongsUnaccountedFor));\n });\n }\n this.consecutivePongsUnaccountedFor += 1;\n this.pingId = (this.pingId + 1) & 0xffffffff;\n const ping = SignalingProtocol_js_1.SdkPingPongFrame.create();\n ping.pingId = this.pingId;\n ping.type = SignalingProtocol_js_1.SdkPingPongType.PING;\n this.pingTimestampLocalMs = this.signalingClient.pingPong(ping);\n this.logger.debug(() => {\n return `sent ping ${this.pingId}`;\n });\n }\n pong(pingId) {\n const pong = SignalingProtocol_js_1.SdkPingPongFrame.create();\n pong.pingId = pingId;\n pong.type = SignalingProtocol_js_1.SdkPingPongType.PONG;\n this.signalingClient.pingPong(pong);\n }\n handleSignalingClientEvent(event) {\n switch (event.type) {\n case SignalingClientEventType_1.default.WebSocketOpen:\n this.startPingInterval();\n break;\n case SignalingClientEventType_1.default.WebSocketFailed:\n case SignalingClientEventType_1.default.WebSocketError:\n this.logger.warn(`stopped pinging (${SignalingClientEventType_1.default[event.type]})`);\n this.stopPingInterval();\n break;\n case SignalingClientEventType_1.default.WebSocketClosing:\n case SignalingClientEventType_1.default.WebSocketClosed:\n this.logger.info(`stopped pinging (${SignalingClientEventType_1.default[event.type]})`);\n this.stopPingInterval();\n break;\n case SignalingClientEventType_1.default.ReceivedSignalFrame:\n if (event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.PING_PONG) {\n break;\n }\n if (event.message.pingPong.type === SignalingProtocol_js_1.SdkPingPongType.PONG) {\n const pingId = event.message.pingPong.pingId;\n if (pingId !== this.pingId) {\n this.logger.warn(`unexpected ping id ${pingId} (expected ${this.pingId})`);\n break;\n }\n this.consecutivePongsUnaccountedFor = 0;\n let pongTimestampRemoteMs;\n if (typeof event.message.timestampMs === 'number') {\n pongTimestampRemoteMs = event.message.timestampMs;\n }\n else {\n break;\n }\n this.logger.debug(() => {\n return `received pong ${pingId} with timestamp ${pongTimestampRemoteMs}`;\n });\n const pongTimestampLocalMs = event.timestampMs;\n const pingPongLocalIntervalMs = pongTimestampLocalMs - this.pingTimestampLocalMs;\n const estimatedPingTimestampRemoteMs = Math.round(pongTimestampRemoteMs - pingPongLocalIntervalMs / 2);\n const estimatedClockSkewMs = this.pingTimestampLocalMs - estimatedPingTimestampRemoteMs;\n this.logger.info(`local clock skew estimate=${estimatedClockSkewMs}ms from ping-pong time=${pingPongLocalIntervalMs}ms`);\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.didReceivePong).map(f => f.bind(observer)(pingId, estimatedClockSkewMs, pingPongLocalIntervalMs));\n });\n }\n else {\n this.pong(event.message.pingPong.pingId);\n }\n break;\n }\n }\n}\nexports.default = DefaultPingPong;\n//# sourceMappingURL=DefaultPingPong.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Transcript {\n}\nexports.default = Transcript;\n//# sourceMappingURL=Transcript.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass TranscriptionStatus {\n}\nexports.default = TranscriptionStatus;\n//# sourceMappingURL=TranscriptionStatus.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TranscriptionStatusType;\n(function (TranscriptionStatusType) {\n TranscriptionStatusType[\"STARTED\"] = \"started\";\n TranscriptionStatusType[\"INTERRUPTED\"] = \"interrupted\";\n TranscriptionStatusType[\"RESUMED\"] = \"resumed\";\n TranscriptionStatusType[\"STOPPED\"] = \"stopped\";\n TranscriptionStatusType[\"FAILED\"] = \"failed\";\n})(TranscriptionStatusType || (TranscriptionStatusType = {}));\nexports.default = TranscriptionStatusType;\n//# sourceMappingURL=TranscriptionStatusType.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar TranscriptItemType;\n(function (TranscriptItemType) {\n TranscriptItemType[\"PRONUNCIATION\"] = \"pronunciation\";\n TranscriptItemType[\"PUNCTUATION\"] = \"punctuation\";\n})(TranscriptItemType || (TranscriptItemType = {}));\nexports.default = TranscriptItemType;\n//# sourceMappingURL=TranscriptItemType.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TranscriptEventConverter = void 0;\nconst SignalingProtocol_1 = require(\"../signalingprotocol/SignalingProtocol\");\nconst Transcript_1 = __importDefault(require(\"./Transcript\"));\nconst TranscriptionStatus_1 = __importDefault(require(\"./TranscriptionStatus\"));\nconst TranscriptionStatusType_1 = __importDefault(require(\"./TranscriptionStatusType\"));\nconst TranscriptItemType_1 = __importDefault(require(\"./TranscriptItemType\"));\nconst TranscriptionStatusTypes = {\n [SignalingProtocol_1.SdkTranscriptionStatus.Type.STARTED]: TranscriptionStatusType_1.default.STARTED,\n [SignalingProtocol_1.SdkTranscriptionStatus.Type.INTERRUPTED]: TranscriptionStatusType_1.default.INTERRUPTED,\n [SignalingProtocol_1.SdkTranscriptionStatus.Type.RESUMED]: TranscriptionStatusType_1.default.RESUMED,\n [SignalingProtocol_1.SdkTranscriptionStatus.Type.STOPPED]: TranscriptionStatusType_1.default.STOPPED,\n [SignalingProtocol_1.SdkTranscriptionStatus.Type.FAILED]: TranscriptionStatusType_1.default.FAILED,\n};\nclass TranscriptEventConverter {\n /**\n * Decodes a list of TranscriptEvent from a data message.\n * @param dataMessage Data message to decode from\n * @returns List of TranscriptEvent\n * @throws {Error} If the data message payload cannot be decoded\n */\n static from(dataMessage) {\n let frame;\n try {\n frame = SignalingProtocol_1.SdkTranscriptFrame.decode(dataMessage.data);\n }\n catch (e) {\n throw new Error('Cannot decode transcript data message: ' + e);\n }\n const transcriptEvents = [];\n for (const sdkTranscriptEvent of frame.events) {\n if (sdkTranscriptEvent.status) {\n const transcriptionStatusType = TranscriptionStatusTypes[sdkTranscriptEvent.status.type];\n if (!transcriptionStatusType) {\n continue;\n }\n const transcriptionStatus = new TranscriptionStatus_1.default();\n transcriptionStatus.type = transcriptionStatusType;\n transcriptionStatus.eventTimeMs = sdkTranscriptEvent.status.eventTime;\n transcriptionStatus.transcriptionRegion = sdkTranscriptEvent.status.transcriptionRegion;\n transcriptionStatus.transcriptionConfiguration =\n sdkTranscriptEvent.status.transcriptionConfiguration;\n if (sdkTranscriptEvent.status.message) {\n transcriptionStatus.message = sdkTranscriptEvent.status.message;\n }\n transcriptEvents.push(transcriptionStatus);\n }\n else if (sdkTranscriptEvent.transcript) {\n const transcript = new Transcript_1.default();\n transcript.results = [];\n for (const result of sdkTranscriptEvent.transcript.results) {\n const transcriptResult = {\n channelId: result.channelId,\n isPartial: result.isPartial,\n resultId: result.resultId,\n startTimeMs: result.startTime,\n endTimeMs: result.endTime,\n alternatives: [],\n };\n if (result.languageCode) {\n transcriptResult.languageCode = result.languageCode;\n }\n if (result.languageIdentification && result.languageIdentification.length > 0) {\n transcriptResult.languageIdentification = [];\n for (const languageIdentification of result.languageIdentification) {\n const transcriptLanguageWithScore = {\n languageCode: languageIdentification.languageCode,\n score: languageIdentification.score,\n };\n transcriptResult.languageIdentification.push(transcriptLanguageWithScore);\n }\n }\n for (const alternative of result.alternatives) {\n const transcriptAlternative = {\n items: [],\n transcript: alternative.transcript,\n };\n for (const item of alternative.items) {\n const transcriptItem = {\n content: item.content,\n attendee: {\n attendeeId: item.speakerAttendeeId,\n externalUserId: item.speakerExternalUserId,\n },\n startTimeMs: item.startTime,\n endTimeMs: item.endTime,\n type: null,\n };\n if (item.vocabularyFilterMatch) {\n transcriptItem.vocabularyFilterMatch = item.vocabularyFilterMatch;\n }\n if (item.hasOwnProperty('stable')) {\n transcriptItem.stable = item.stable;\n }\n if (item.hasOwnProperty('confidence')) {\n transcriptItem.confidence = item.confidence;\n }\n switch (item.type) {\n case SignalingProtocol_1.SdkTranscriptItem.Type.PRONUNCIATION:\n transcriptItem.type = TranscriptItemType_1.default.PRONUNCIATION;\n break;\n case SignalingProtocol_1.SdkTranscriptItem.Type.PUNCTUATION:\n transcriptItem.type = TranscriptItemType_1.default.PUNCTUATION;\n break;\n }\n transcriptAlternative.items.push(transcriptItem);\n }\n for (const entity of alternative.entities) {\n if (!transcriptAlternative.entities) {\n transcriptAlternative.entities = [];\n }\n const transcriptEntity = {\n category: entity.category,\n confidence: entity.confidence,\n content: entity.content,\n startTimeMs: entity.startTime,\n endTimeMs: entity.endTime,\n };\n if (entity.type) {\n transcriptEntity.type = entity.type;\n }\n transcriptAlternative.entities.push(transcriptEntity);\n }\n transcriptResult.alternatives.push(transcriptAlternative);\n }\n transcript.results.push(transcriptResult);\n }\n transcriptEvents.push(transcript);\n }\n }\n return transcriptEvents;\n }\n}\nexports.TranscriptEventConverter = TranscriptEventConverter;\n//# sourceMappingURL=TranscriptEvent.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TRANSCRIPTION_DATA_MESSAGE_TOPIC = void 0;\nconst TranscriptEvent_1 = require(\"./TranscriptEvent\");\nexports.TRANSCRIPTION_DATA_MESSAGE_TOPIC = 'aws:chime:transcription';\nclass DefaultTranscriptionController {\n constructor(realtimeController) {\n this.realtimeController = realtimeController;\n this.transcriptEventCallbacks = new Set();\n }\n subscribeToTranscriptEvent(callback) {\n if (this.transcriptEventCallbacks.size === 0) {\n this.realtimeController.realtimeSubscribeToReceiveDataMessage(exports.TRANSCRIPTION_DATA_MESSAGE_TOPIC, (dataMessage) => {\n for (const transcriptEvent of TranscriptEvent_1.TranscriptEventConverter.from(dataMessage)) {\n for (const transcriptEventCallback of this.transcriptEventCallbacks) {\n transcriptEventCallback(transcriptEvent);\n }\n }\n });\n }\n this.transcriptEventCallbacks.add(callback);\n }\n unsubscribeFromTranscriptEvent(callback) {\n this.transcriptEventCallbacks.delete(callback);\n if (this.transcriptEventCallbacks.size === 0) {\n this.realtimeController.realtimeUnsubscribeFromReceiveDataMessage(exports.TRANSCRIPTION_DATA_MESSAGE_TOPIC);\n }\n }\n}\nexports.default = DefaultTranscriptionController;\n//# sourceMappingURL=DefaultTranscriptionController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[RealtimeState]] stores all realtime persistent state.\n */\nclass RealtimeState {\n constructor() {\n /**\n * Stores the attendee id of the current user\n */\n this.localAttendeeId = null;\n /**\n * Stores the external user id of the current user\n */\n this.localExternalUserId = null;\n /**\n * Callbacks to listen for attendee id changes\n */\n this.attendeeIdChangesCallbacks = [];\n /**\n * Stores whether the user can transition from muted to unmuted\n */\n this.canUnmute = true;\n /**\n * Callbacks to listen for changes to can-unmute local audio state\n */\n this.setCanUnmuteLocalAudioCallbacks = [];\n /**\n * Stores whether the user is presently muted\n */\n this.muted = false;\n /**\n * Callbacks to listen for local audio mutes and unmutes\n */\n this.muteAndUnmuteLocalAudioCallbacks = [];\n /**\n * Stores per-attendee id volume indicator state\n */\n this.volumeIndicatorState = {};\n /**\n * Stores attendee id to external user id mappings\n */\n this.attendeeIdToExternalUserId = {};\n /**\n * Stores per-attendee id callbacks called when volume indicators change\n */\n this.volumeIndicatorCallbacks = {};\n /**\n * Callbacks to listen for changes to local signal strength\n */\n this.localSignalStrengthChangeCallbacks = [];\n /**\n * Callbacks to listen for fatal errors\n */\n this.fatalErrorCallbacks = [];\n /**\n * Callbacks to trigger when sending message\n */\n this.sendDataMessageCallbacks = [];\n /**\n * Callbacks to listen for receiving message from data channel based on given topic\n */\n this.receiveDataMessageCallbacks = new Map();\n }\n}\nexports.default = RealtimeState;\n//# sourceMappingURL=RealtimeState.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[RealtimeVolumeIndicator]] stores the current volume, mute, and\n * signal strength for an attendee.\n */\nclass RealtimeVolumeIndicator {\n constructor() {\n this.volume = null;\n this.muted = null;\n this.signalStrength = null;\n }\n}\nexports.default = RealtimeVolumeIndicator;\n//# sourceMappingURL=RealtimeVolumeIndicator.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultTranscriptionController_1 = __importDefault(require(\"../transcript/DefaultTranscriptionController\"));\nconst RealtimeState_1 = __importDefault(require(\"./RealtimeState\"));\nconst RealtimeVolumeIndicator_1 = __importDefault(require(\"./RealtimeVolumeIndicator\"));\n/**\n * [[DefaultRealtimeController]] is written to adhere to the following tenets to\n * make privacy and performance bugs significantly less likely.\n *\n * 1. Any call to the object is guaranteed to succeed from the caller's\n * perspective to the maximum extent that this can be ensured. However, all\n * failures of the object are reported as fatal errors. For example, if local\n * mute fails, then that is a privacy issue and we must tear down the\n * connection and try starting over.\n *\n * 2. State is owned by the object and is considered authoritative at all times.\n * For example, if [[realtimeIsLocalAudioMuted]] is true then the user *is*\n * muted.\n *\n * 3. Callbacks are fired synchronously and do their work synchronously. Any\n * unnecessary asynchronous implementation only invites latency and\n * increases the surface error for potential errors.\n *\n * 4. Mutation only occurs when state changes. All state-changing functions are\n * idempotent.\n *\n * 5. Every conditional branch gets its own if statement and test coverage is\n * 100% for this object.\n *\n * 6. Function parameters and returns use primitives only (no classes or enums).\n * This minimizes the number of dependencies that consumers have to take on\n * and allows the object to be more easily wrapped. Values are normalized\n * where possible.\n *\n * 7. The object takes no other non-realtime dependencies.\n *\n * 8. Interface functions begin with `realtime` to make boundaries between the\n * RealtimeController interface and the UI or business logic explicit and\n * auditable.\n *\n * 9. Local state overrides remote state but not vice-versa. For example, if\n * locally muted with an active audio input and a remote state indicates the\n * same user is unmuted because the muted state has not yet propagated, then\n * the volume indicator update for the user would show the remote mute state\n * as muted. However, if locally muted without an active audio input and a\n * remote state indicates the user is unmuted (since they are dialed in), the\n * remote state persists but does not override the local state so\n * [[realtimeIsLocalAudioMuted]] still returns true.\n */\nclass DefaultRealtimeController {\n constructor(mediaStreamBroker, transcriptionController) {\n this.mediaStreamBroker = mediaStreamBroker;\n this.state = new RealtimeState_1.default();\n this._transcriptionController =\n transcriptionController || new DefaultTranscriptionController_1.default(this);\n }\n realtimeSetLocalAttendeeId(attendeeId, externalUserId) {\n this.state.localAttendeeId = attendeeId;\n this.state.localExternalUserId = externalUserId;\n }\n realtimeSetAttendeeIdPresence(attendeeId, present, externalUserId, dropped, posInFrame) {\n try {\n if (present) {\n this.state.attendeeIdToExternalUserId[attendeeId] = externalUserId;\n }\n for (const fn of this.state.attendeeIdChangesCallbacks) {\n fn(attendeeId, present, externalUserId, dropped, posInFrame);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSubscribeToAttendeeIdPresence(callback) {\n try {\n this.state.attendeeIdChangesCallbacks.push(callback);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeToAttendeeIdPresence(callback) {\n try {\n const index = this.state.attendeeIdChangesCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.attendeeIdChangesCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n // Muting\n realtimeSetCanUnmuteLocalAudio(canUnmute) {\n try {\n if (this.state.canUnmute === canUnmute) {\n return;\n }\n this.state.canUnmute = canUnmute;\n for (const fn of this.state.setCanUnmuteLocalAudioCallbacks) {\n fn(canUnmute);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSubscribeToSetCanUnmuteLocalAudio(callback) {\n try {\n this.state.setCanUnmuteLocalAudioCallbacks.push(callback);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeToSetCanUnmuteLocalAudio(callback) {\n try {\n const index = this.state.setCanUnmuteLocalAudioCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.setCanUnmuteLocalAudioCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeCanUnmuteLocalAudio() {\n return this.state.canUnmute;\n }\n realtimeMuteLocalAudio() {\n if (this.state.muted) {\n return;\n }\n try {\n this.setAudioInputEnabled(false);\n this.state.muted = true;\n this.realtimeUpdateVolumeIndicator(this.state.localAttendeeId, null, null, null, this.state.localExternalUserId);\n for (const fn of this.state.muteAndUnmuteLocalAudioCallbacks) {\n fn(true);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnmuteLocalAudio() {\n if (!this.state.muted) {\n return true;\n }\n if (!this.state.canUnmute) {\n return false;\n }\n try {\n this.setAudioInputEnabled(true);\n this.state.muted = false;\n this.realtimeUpdateVolumeIndicator(this.state.localAttendeeId, null, null, null, this.state.localExternalUserId);\n for (const fn of this.state.muteAndUnmuteLocalAudioCallbacks) {\n fn(false);\n }\n return true;\n }\n catch (e) {\n this.onError(e);\n return false;\n }\n }\n realtimeSubscribeToMuteAndUnmuteLocalAudio(callback) {\n try {\n this.state.muteAndUnmuteLocalAudioCallbacks.push(callback);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeToMuteAndUnmuteLocalAudio(callback) {\n try {\n const index = this.state.muteAndUnmuteLocalAudioCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.muteAndUnmuteLocalAudioCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeIsLocalAudioMuted() {\n return this.state.muted;\n }\n // Volume Indicators\n realtimeSubscribeToVolumeIndicator(attendeeId, callback) {\n try {\n if (!this.state.volumeIndicatorCallbacks.hasOwnProperty(attendeeId)) {\n this.state.volumeIndicatorCallbacks[attendeeId] = [];\n }\n this.state.volumeIndicatorCallbacks[attendeeId].push(callback);\n this.sendVolumeIndicatorChange(attendeeId, true, true, true, this.state.attendeeIdToExternalUserId[attendeeId]);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeFromVolumeIndicator(attendeeId, callback) {\n const callbacks = this.state.volumeIndicatorCallbacks[attendeeId];\n if (!callbacks) {\n return;\n }\n if (callback) {\n const index = this.state.volumeIndicatorCallbacks[attendeeId].indexOf(callback);\n if (index >= 0) {\n this.state.volumeIndicatorCallbacks[attendeeId].splice(index, 1);\n }\n }\n else {\n delete this.state.volumeIndicatorCallbacks[attendeeId];\n }\n }\n realtimeUpdateVolumeIndicator(attendeeId, volume, muted, signalStrength, externalUserId) {\n try {\n muted = this.applyLocalMuteOverride(attendeeId, muted);\n const state = this.getVolumeIndicatorState(attendeeId);\n let volumeUpdated = false;\n let mutedUpdated = false;\n let signalStrengthUpdated = false;\n if (muted !== null) {\n if (state.muted !== muted) {\n state.muted = muted;\n mutedUpdated = true;\n if (state.muted && state.volume !== 0.0) {\n state.volume = 0.0;\n volumeUpdated = true;\n }\n }\n }\n if (!state.muted && volume !== null) {\n if (state.volume !== volume) {\n state.volume = volume;\n volumeUpdated = true;\n }\n if (state.muted === null) {\n state.muted = false;\n mutedUpdated = true;\n }\n }\n if (signalStrength !== null) {\n if (state.signalStrength !== signalStrength) {\n state.signalStrength = signalStrength;\n signalStrengthUpdated = true;\n }\n }\n this.sendVolumeIndicatorChange(attendeeId, volumeUpdated, mutedUpdated, signalStrengthUpdated, externalUserId);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSubscribeToLocalSignalStrengthChange(callback) {\n try {\n this.state.localSignalStrengthChangeCallbacks.push(callback);\n if (this.state.localAttendeeId === null) {\n return;\n }\n this.sendLocalSignalStrengthChange(this.state.localAttendeeId, true);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeToLocalSignalStrengthChange(callback) {\n try {\n const index = this.state.localSignalStrengthChangeCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.localSignalStrengthChangeCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSubscribeToSendDataMessage(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback) {\n try {\n this.state.sendDataMessageCallbacks.push(callback);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeFromSendDataMessage(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n callback) {\n try {\n const index = this.state.sendDataMessageCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.sendDataMessageCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSendDataMessage(topic, data, // eslint-disable-line @typescript-eslint/no-explicit-any\n lifetimeMs) {\n try {\n for (const fn of this.state.sendDataMessageCallbacks) {\n fn(topic, data, lifetimeMs);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeSubscribeToReceiveDataMessage(topic, callback) {\n try {\n if (this.state.receiveDataMessageCallbacks.has(topic)) {\n this.state.receiveDataMessageCallbacks.get(topic).push(callback);\n }\n else {\n this.state.receiveDataMessageCallbacks.set(topic, [callback]);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeFromReceiveDataMessage(topic) {\n try {\n this.state.receiveDataMessageCallbacks.delete(topic);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeReceiveDataMessage(dataMessage) {\n try {\n if (this.state.receiveDataMessageCallbacks.has(dataMessage.topic)) {\n for (const fn of this.state.receiveDataMessageCallbacks.get(dataMessage.topic)) {\n fn(dataMessage);\n }\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n // Error Handling\n realtimeSubscribeToFatalError(callback) {\n try {\n this.state.fatalErrorCallbacks.push(callback);\n }\n catch (e) {\n this.onError(e);\n }\n }\n realtimeUnsubscribeToFatalError(callback) {\n try {\n const index = this.state.fatalErrorCallbacks.indexOf(callback);\n if (index !== -1) {\n this.state.fatalErrorCallbacks.splice(index, 1);\n }\n }\n catch (e) {\n this.onError(e);\n }\n }\n get transcriptionController() {\n return this._transcriptionController;\n }\n // Internals\n setAudioInputEnabled(enabled) {\n if (enabled) {\n this.mediaStreamBroker.unmuteLocalAudioInputStream();\n }\n else {\n this.mediaStreamBroker.muteLocalAudioInputStream();\n }\n }\n applyLocalMuteOverride(attendeeIdRemote, mutedRemote) {\n const attendeeIdLocal = this.state.localAttendeeId;\n const mutedLocal = this.state.muted;\n if (attendeeIdRemote !== attendeeIdLocal) {\n return mutedRemote;\n }\n // This is a workaround to check if no audio input then just use the remote value\n if (\n // @ts-ignore\n !('activeDevices' in this.mediaStreamBroker && this.mediaStreamBroker.activeDevices['audio'])) {\n return mutedRemote;\n }\n return mutedLocal;\n }\n sendVolumeIndicatorChange(attendeeId, volumeUpdated, mutedUpdated, signalStrengthUpdated, externalUserId) {\n this.sendLocalSignalStrengthChange(attendeeId, signalStrengthUpdated);\n if (!this.state.volumeIndicatorCallbacks.hasOwnProperty(attendeeId)) {\n return;\n }\n const state = this.getVolumeIndicatorState(attendeeId);\n const updateState = new RealtimeVolumeIndicator_1.default();\n if (volumeUpdated) {\n updateState.volume = state.volume;\n }\n if (mutedUpdated) {\n updateState.muted = state.muted;\n }\n if (signalStrengthUpdated) {\n updateState.signalStrength = state.signalStrength;\n }\n if (this.stateIsEmpty(updateState)) {\n return;\n }\n for (const fn of this.state.volumeIndicatorCallbacks[attendeeId]) {\n fn(attendeeId, updateState.volume, updateState.muted, updateState.signalStrength, externalUserId);\n }\n }\n sendLocalSignalStrengthChange(attendeeId, signalStrengthUpdated) {\n if (!signalStrengthUpdated) {\n return;\n }\n if (attendeeId !== this.state.localAttendeeId) {\n return;\n }\n const state = this.getVolumeIndicatorState(attendeeId);\n const signalStrength = state.signalStrength;\n if (signalStrength === null) {\n return;\n }\n for (const fn of this.state.localSignalStrengthChangeCallbacks) {\n fn(signalStrength);\n }\n }\n getVolumeIndicatorState(id) {\n if (!this.state.volumeIndicatorState.hasOwnProperty(id)) {\n this.state.volumeIndicatorState[id] = new RealtimeVolumeIndicator_1.default();\n }\n return this.state.volumeIndicatorState[id];\n }\n stateIsEmpty(state) {\n return state.volume === null && state.muted === null && state.signalStrength === null;\n }\n onError(error) {\n try {\n // 1) try the fatal error callbacks so that the issue is reported in\n // logs and to give the handler a chance to clean up and reset.\n for (const callback of this.state.fatalErrorCallbacks) {\n callback(error);\n }\n }\n catch (eventError) {\n try {\n // 2) if the error event fails, fall back to console.error so that\n // it at least prints out to the console before moving on.\n console.error(error);\n console.error(eventError);\n }\n catch (consoleError) {\n // 3) if all else fails, swallow the error and give up to guarantee\n // that the API call returns cleanly.\n }\n }\n }\n}\nexports.default = DefaultRealtimeController;\n//# sourceMappingURL=DefaultRealtimeController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionStateControllerAction = void 0;\n/**\n * [[SessionStateControllerAction]] is a state-changing action to perform.\n */\nvar SessionStateControllerAction;\n(function (SessionStateControllerAction) {\n SessionStateControllerAction[SessionStateControllerAction[\"Connect\"] = 0] = \"Connect\";\n SessionStateControllerAction[SessionStateControllerAction[\"FinishConnecting\"] = 1] = \"FinishConnecting\";\n SessionStateControllerAction[SessionStateControllerAction[\"Update\"] = 2] = \"Update\";\n SessionStateControllerAction[SessionStateControllerAction[\"FinishUpdating\"] = 3] = \"FinishUpdating\";\n SessionStateControllerAction[SessionStateControllerAction[\"Reconnect\"] = 4] = \"Reconnect\";\n SessionStateControllerAction[SessionStateControllerAction[\"Disconnect\"] = 5] = \"Disconnect\";\n SessionStateControllerAction[SessionStateControllerAction[\"Fail\"] = 6] = \"Fail\";\n SessionStateControllerAction[SessionStateControllerAction[\"FinishDisconnecting\"] = 7] = \"FinishDisconnecting\";\n})(SessionStateControllerAction = exports.SessionStateControllerAction || (exports.SessionStateControllerAction = {}));\nexports.default = SessionStateControllerAction;\n//# sourceMappingURL=SessionStateControllerAction.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionStateControllerDeferPriority = void 0;\n/**\n * [[SessionStateControllerDeferPriority]] indicates the priority level of the action\n * being deferred. For example, stop is more important than update so if forced\n * to pick between the two stop should be chosen.\n */\nvar SessionStateControllerDeferPriority;\n(function (SessionStateControllerDeferPriority) {\n SessionStateControllerDeferPriority[SessionStateControllerDeferPriority[\"DoNotDefer\"] = 0] = \"DoNotDefer\";\n SessionStateControllerDeferPriority[SessionStateControllerDeferPriority[\"Low\"] = 1] = \"Low\";\n SessionStateControllerDeferPriority[SessionStateControllerDeferPriority[\"Medium\"] = 2] = \"Medium\";\n SessionStateControllerDeferPriority[SessionStateControllerDeferPriority[\"High\"] = 3] = \"High\";\n SessionStateControllerDeferPriority[SessionStateControllerDeferPriority[\"VeryHigh\"] = 4] = \"VeryHigh\";\n})(SessionStateControllerDeferPriority = exports.SessionStateControllerDeferPriority || (exports.SessionStateControllerDeferPriority = {}));\nexports.default = SessionStateControllerDeferPriority;\n//# sourceMappingURL=SessionStateControllerDeferPriority.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionStateControllerState = void 0;\n/**\n * [[SessionStateControllerState]] reflects the current connection state of the session.\n */\nvar SessionStateControllerState;\n(function (SessionStateControllerState) {\n SessionStateControllerState[SessionStateControllerState[\"NotConnected\"] = 0] = \"NotConnected\";\n SessionStateControllerState[SessionStateControllerState[\"Connecting\"] = 1] = \"Connecting\";\n SessionStateControllerState[SessionStateControllerState[\"Connected\"] = 2] = \"Connected\";\n SessionStateControllerState[SessionStateControllerState[\"Updating\"] = 3] = \"Updating\";\n SessionStateControllerState[SessionStateControllerState[\"Disconnecting\"] = 4] = \"Disconnecting\";\n})(SessionStateControllerState = exports.SessionStateControllerState || (exports.SessionStateControllerState = {}));\nexports.default = SessionStateControllerState;\n//# sourceMappingURL=SessionStateControllerState.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SessionStateControllerTransitionResult = void 0;\n/**\n * Indicates the result of an attempted state transition.\n */\nvar SessionStateControllerTransitionResult;\n(function (SessionStateControllerTransitionResult) {\n /**\n * The transition was successful.\n */\n SessionStateControllerTransitionResult[SessionStateControllerTransitionResult[\"Transitioned\"] = 0] = \"Transitioned\";\n /**\n * No transition is available from the current state using that action.\n */\n SessionStateControllerTransitionResult[SessionStateControllerTransitionResult[\"NoTransitionAvailable\"] = 1] = \"NoTransitionAvailable\";\n /**\n * The transition will be tried on the next state.\n */\n SessionStateControllerTransitionResult[SessionStateControllerTransitionResult[\"DeferredTransition\"] = 2] = \"DeferredTransition\";\n /**\n * An unexpected error occurred while transitioning to the next state.\n */\n SessionStateControllerTransitionResult[SessionStateControllerTransitionResult[\"TransitionFailed\"] = 3] = \"TransitionFailed\";\n})(SessionStateControllerTransitionResult = exports.SessionStateControllerTransitionResult || (exports.SessionStateControllerTransitionResult = {}));\nexports.default = SessionStateControllerTransitionResult;\n//# sourceMappingURL=SessionStateControllerTransitionResult.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SessionStateControllerAction_1 = require(\"./SessionStateControllerAction\");\nconst SessionStateControllerDeferPriority_1 = require(\"./SessionStateControllerDeferPriority\");\nconst SessionStateControllerState_1 = require(\"./SessionStateControllerState\");\nconst SessionStateControllerTransitionResult_1 = require(\"./SessionStateControllerTransitionResult\");\nclass DefaultSessionStateController {\n constructor(logger) {\n this.logger = logger;\n this.currentState = SessionStateControllerState_1.SessionStateControllerState.NotConnected;\n this.deferredAction = null;\n this.deferredWork = null;\n }\n perform(action, work) {\n const state = this.currentState;\n if (state === SessionStateControllerState_1.SessionStateControllerState.NotConnected &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Connect) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Connecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connecting &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Fail) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Disconnecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connecting &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.FinishConnecting) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Connected, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connected &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Disconnect) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Disconnecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connected &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Reconnect) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Connecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connected &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Fail) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Disconnecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Connected &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Update) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Updating, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Updating &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.Fail) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Disconnecting, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Updating &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.FinishUpdating) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.Connected, action);\n }\n else if (state === SessionStateControllerState_1.SessionStateControllerState.Disconnecting &&\n action === SessionStateControllerAction_1.SessionStateControllerAction.FinishDisconnecting) {\n this.transition(SessionStateControllerState_1.SessionStateControllerState.NotConnected, action);\n }\n else if (this.canDefer(action)) {\n this.logger.info(`deferring transition from ${SessionStateControllerState_1.SessionStateControllerState[this.currentState]} with ${SessionStateControllerAction_1.SessionStateControllerAction[action]}`);\n this.deferAction(action, work);\n return SessionStateControllerTransitionResult_1.SessionStateControllerTransitionResult.DeferredTransition;\n }\n else {\n this.logger.warn(`no transition found from ${SessionStateControllerState_1.SessionStateControllerState[this.currentState]} with ${SessionStateControllerAction_1.SessionStateControllerAction[action]}`);\n return SessionStateControllerTransitionResult_1.SessionStateControllerTransitionResult.NoTransitionAvailable;\n }\n try {\n work();\n }\n catch (e) {\n this.logger.error(`error during state ${SessionStateControllerState_1.SessionStateControllerState[this.currentState]} with action ${SessionStateControllerAction_1.SessionStateControllerAction[action]}: ${e}`);\n this.logger.info(`rolling back transition to ${SessionStateControllerState_1.SessionStateControllerState[state]}`);\n this.currentState = state;\n return SessionStateControllerTransitionResult_1.SessionStateControllerTransitionResult.TransitionFailed;\n }\n this.performDeferredAction();\n return SessionStateControllerTransitionResult_1.SessionStateControllerTransitionResult.Transitioned;\n }\n state() {\n return this.currentState;\n }\n transition(newState, action) {\n this.logger.info(`transitioning from ${SessionStateControllerState_1.SessionStateControllerState[this.currentState]} to ${SessionStateControllerState_1.SessionStateControllerState[newState]} with ${SessionStateControllerAction_1.SessionStateControllerAction[action]}`);\n this.currentState = newState;\n }\n deferPriority(action) {\n switch (action) {\n case SessionStateControllerAction_1.SessionStateControllerAction.Disconnect:\n return SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.VeryHigh;\n case SessionStateControllerAction_1.SessionStateControllerAction.Fail:\n return SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.High;\n case SessionStateControllerAction_1.SessionStateControllerAction.Reconnect:\n return SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.Medium;\n case SessionStateControllerAction_1.SessionStateControllerAction.Update:\n return SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.Low;\n default:\n return SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.DoNotDefer;\n }\n }\n deferAction(action, work) {\n if (this.deferredAction !== null &&\n this.deferPriority(this.deferredAction) > this.deferPriority(action)) {\n return;\n }\n this.deferredAction = action;\n this.deferredWork = work;\n }\n canDefer(action) {\n return (this.deferPriority(action) !== SessionStateControllerDeferPriority_1.SessionStateControllerDeferPriority.DoNotDefer &&\n (this.currentState === SessionStateControllerState_1.SessionStateControllerState.Connecting ||\n this.currentState === SessionStateControllerState_1.SessionStateControllerState.Updating));\n }\n performDeferredAction() {\n if (!this.deferredAction) {\n return;\n }\n const deferredAction = this.deferredAction;\n const deferredWork = this.deferredWork;\n this.deferredAction = null;\n this.deferredWork = null;\n this.logger.info(`performing deferred action ${SessionStateControllerAction_1.SessionStateControllerAction[deferredAction]}`);\n if (this.perform(deferredAction, deferredWork) !==\n SessionStateControllerTransitionResult_1.SessionStateControllerTransitionResult.Transitioned) {\n this.logger.info(`unable to perform deferred action ${SessionStateControllerAction_1.SessionStateControllerAction[deferredAction]} in state ${SessionStateControllerState_1.SessionStateControllerState[this.currentState]}`);\n }\n }\n}\nexports.default = DefaultSessionStateController;\n//# sourceMappingURL=DefaultSessionStateController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRandomValues = exports.getFormattedOffset = exports.getDefaultAssetSpec = exports.toLowerCasePropertyNames = exports.isIFramed = exports.wait = void 0;\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nfunction wait(waitTimeMs) {\n return new Promise(resolve => setTimeout(resolve, waitTimeMs));\n}\nexports.wait = wait;\n// This is impossible to adequately test in Node, so Istanbul ignore.\n/* istanbul ignore next */\nfunction isIFramed() {\n var _a;\n // Same-origin iframes can check `nodeName`.\n // We can also check whether the parent window and the top window are the same.\n // Cross-origin iframes will throw on the `parent` check, so catch here.\n try {\n return ((_a = window.frameElement) === null || _a === void 0 ? void 0 : _a.nodeName) === 'IFRAME' || parent !== top;\n }\n catch (e) {\n // Very likely to be a cross-origin iframe.\n return true;\n }\n}\nexports.isIFramed = isIFramed;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toLowerCasePropertyNames(input) {\n if (input === null) {\n return null;\n }\n else if (typeof input !== 'object') {\n return input;\n }\n else if (Array.isArray(input)) {\n return input.map(toLowerCasePropertyNames);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Object.keys(input).reduce((result, key) => {\n const value = input[key];\n const newValue = typeof value === 'object' ? toLowerCasePropertyNames(value) : value;\n result[key.toLowerCase()] = newValue;\n return result;\n }, {});\n}\nexports.toLowerCasePropertyNames = toLowerCasePropertyNames;\n/**\n * Based on the SDK version, return an asset group.\n *\n * @returns the default asset spec, based on the SDK version.\n */\nfunction getDefaultAssetSpec() {\n const version = Versioning_1.default.sdkVersionSemVer;\n return {\n assetGroup: `sdk-${version.major}.${version.minor}`,\n };\n}\nexports.getDefaultAssetSpec = getDefaultAssetSpec;\n/**\n * Get UTC offset in (+|-)HH:mm format\n * E.g. For Asia/Calcutta timezone, +05:30 UTC offset value is returned\n */\nfunction getFormattedOffset(utcOffset) {\n const offset = Math.abs(utcOffset);\n const offsetOperator = utcOffset <= 0 ? '+' : '-';\n const offsetHours = Math.floor(offset / 60)\n .toString()\n .padStart(2, '0');\n const offsetMinutes = Math.floor(offset % 60)\n .toString()\n .padStart(2, '0');\n return `${offsetOperator}${offsetHours}:${offsetMinutes}`;\n}\nexports.getFormattedOffset = getFormattedOffset;\nfunction getRandomValues(buffer) {\n try {\n // Browser environment\n window.crypto.getRandomValues(buffer);\n }\n catch (error) {\n // Node environment for unit test\n const view = new DataView(buffer.buffer);\n view.setUint32(0, Math.trunc(Math.random() * Math.pow(2, 32)), true);\n }\n}\nexports.getRandomValues = getRandomValues;\n//# sourceMappingURL=Utils.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VideoQualityAdaptationPreference = void 0;\n/**\n * [[VideoQualityAdaptationPreference]] represents options in how to degrade/reduce quality when end-users\n * encounter network constraints that limit the bandwidth available to the SDK. Different resolutions and\n * framerates have different but sometimes similar bitrates (e.g. a 480p/30fps stream may have similar bitrate\n * to 720p/15fps), so the prefence selected will impact the visual experience of end-users on impairment and recovery,\n * as not all resolution/framerate combinations will be used.\n *\n * The SDK will follow the same path of resolution/framerate choices in recovery as it will during constraint.\n *\n * This preference will have no effect unless the sender is encoding in a way such that there\n * are both variable framerate and resolution options available. See the\n * [Priority based downlink policy guide](https://aws.github.io/amazon-chime-sdk-js/modules/prioritybased_downlink_policy.html)\n * for more detailed information and diagrams.\n */\nvar VideoQualityAdaptationPreference;\n(function (VideoQualityAdaptationPreference) {\n /**\n * Compromises between reducing resolution and framerate, with a slight preference towards framerate\n * as framerate changes may be possible without a keyframe request to the sender. This value\n * should be used in most use cases.\n */\n VideoQualityAdaptationPreference[VideoQualityAdaptationPreference[\"Balanced\"] = 0] = \"Balanced\";\n /**\n * Give preference to framerate under network constraint. This can be used, e.g.\n * if the receiver is known to be displaying the video at a low resolution.\n */\n VideoQualityAdaptationPreference[VideoQualityAdaptationPreference[\"MaintainFramerate\"] = 1] = \"MaintainFramerate\";\n /**\n * Give preference to resolution under network constraint. This can be used, e.g.\n * for screen share, or camera feed from a conference room or class room, that\n * is displayed on a large screen\n */\n VideoQualityAdaptationPreference[VideoQualityAdaptationPreference[\"MaintainResolution\"] = 2] = \"MaintainResolution\";\n})(VideoQualityAdaptationPreference = exports.VideoQualityAdaptationPreference || (exports.VideoQualityAdaptationPreference = {}));\nexports.default = VideoQualityAdaptationPreference;\n//# sourceMappingURL=VideoQualityAdaptationPreference.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebSocketReadyState = void 0;\nvar WebSocketReadyState;\n(function (WebSocketReadyState) {\n WebSocketReadyState[WebSocketReadyState[\"None\"] = 0] = \"None\";\n WebSocketReadyState[WebSocketReadyState[\"Connecting\"] = 1] = \"Connecting\";\n WebSocketReadyState[WebSocketReadyState[\"Open\"] = 2] = \"Open\";\n WebSocketReadyState[WebSocketReadyState[\"Closing\"] = 3] = \"Closing\";\n WebSocketReadyState[WebSocketReadyState[\"Closed\"] = 4] = \"Closed\";\n})(WebSocketReadyState = exports.WebSocketReadyState || (exports.WebSocketReadyState = {}));\nexports.default = WebSocketReadyState;\n//# sourceMappingURL=WebSocketReadyState.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertServerSideNetworkAdaptionEnumToSignaled = exports.convertServerSideNetworkAdaptionEnumFromSignaled = exports.serverSideNetworkAdaptionIsNoneOrDefault = exports.ServerSideNetworkAdaption = void 0;\nconst SignalingProtocol_1 = require(\"../signalingprotocol/SignalingProtocol\");\n/**\n * [[ServerSideNetworkAdaption]] represents additional server side features that can be enabled for network adaption.\n */\nvar ServerSideNetworkAdaption;\n(function (ServerSideNetworkAdaption) {\n /**\n * No features enabled, but this value may switch to 'BandwidthProbingAndRemoteVideoQualityAdaption' in a later release.\n */\n ServerSideNetworkAdaption[ServerSideNetworkAdaption[\"Default\"] = 0] = \"Default\";\n /**\n * @deprecated: Please switch to 'BandwidthProbingAndRemoteVideoQualityAdaption'\n */\n ServerSideNetworkAdaption[ServerSideNetworkAdaption[\"None\"] = 1] = \"None\";\n /**\n * @deprecated: Please switch to 'BandwidthProbingAndRemoteVideoQualityAdaption'.\n */\n ServerSideNetworkAdaption[ServerSideNetworkAdaption[\"BandwidthProbing\"] = 2] = \"BandwidthProbing\";\n /**\n * Disable internal policy behavior and proxy priorities to server to automatically\n * switch, pause, or resume streams based on server calculated network constraints. This will\n * significantly improve response times when network constraints occur. This will also support the\n * features covered in `BandwidthProbing` though possibly with different implementation details.\n *\n * End users should overall see reduced video freezes, reduced broken audio, and reduced packet loss.\n * The value impacts response to network events and may lead to remote video pauses/downgrades\n * that did not occur before.\n */\n ServerSideNetworkAdaption[ServerSideNetworkAdaption[\"BandwidthProbingAndRemoteVideoQualityAdaption\"] = 3] = \"BandwidthProbingAndRemoteVideoQualityAdaption\";\n})(ServerSideNetworkAdaption = exports.ServerSideNetworkAdaption || (exports.ServerSideNetworkAdaption = {}));\nexports.default = ServerSideNetworkAdaption;\nfunction serverSideNetworkAdaptionIsNoneOrDefault(adaption) {\n return (adaption === ServerSideNetworkAdaption.None || adaption === ServerSideNetworkAdaption.Default);\n}\nexports.serverSideNetworkAdaptionIsNoneOrDefault = serverSideNetworkAdaptionIsNoneOrDefault;\nfunction convertServerSideNetworkAdaptionEnumFromSignaled(adaption) {\n switch (adaption) {\n case SignalingProtocol_1.SdkServerSideNetworkAdaption.DEFAULT:\n return ServerSideNetworkAdaption.Default;\n case SignalingProtocol_1.SdkServerSideNetworkAdaption.NONE:\n return ServerSideNetworkAdaption.None;\n case SignalingProtocol_1.SdkServerSideNetworkAdaption.BANDWIDTH_PROBING:\n return ServerSideNetworkAdaption.BandwidthProbing;\n case SignalingProtocol_1.SdkServerSideNetworkAdaption.BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION:\n return ServerSideNetworkAdaption.BandwidthProbingAndRemoteVideoQualityAdaption;\n }\n}\nexports.convertServerSideNetworkAdaptionEnumFromSignaled = convertServerSideNetworkAdaptionEnumFromSignaled;\nfunction convertServerSideNetworkAdaptionEnumToSignaled(adaption) {\n switch (adaption) {\n case ServerSideNetworkAdaption.Default:\n return SignalingProtocol_1.SdkServerSideNetworkAdaption.DEFAULT;\n case ServerSideNetworkAdaption.None:\n return SignalingProtocol_1.SdkServerSideNetworkAdaption.NONE;\n case ServerSideNetworkAdaption.BandwidthProbing:\n return SignalingProtocol_1.SdkServerSideNetworkAdaption.BANDWIDTH_PROBING;\n case ServerSideNetworkAdaption.BandwidthProbingAndRemoteVideoQualityAdaption:\n return SignalingProtocol_1.SdkServerSideNetworkAdaption.BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION;\n }\n}\nexports.convertServerSideNetworkAdaptionEnumToSignaled = convertServerSideNetworkAdaptionEnumToSignaled;\n//# sourceMappingURL=ServerSideNetworkAdaption.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientEventType_1 = __importDefault(require(\"./SignalingClientEventType\"));\n/*\n * [[SignalingClientEvent]] stores an event that can be sent to observers of the SignalingClient.\n */\nclass SignalingClientEvent {\n /** Initializes a SignalingClientEvent with the given SignalingClientEventType.\n *\n * @param client Indicates the SignalingClient associated with the event.\n * @param type Indicates the kind of event.\n * @param message SdkSignalFrame if type is ReceivedSignalFrame\n */\n constructor(client, type, message, closeCode, closeReason) {\n this.client = client;\n this.type = type;\n this.message = message;\n this.closeCode = closeCode;\n this.closeReason = closeReason;\n this.timestampMs = Date.now();\n }\n isConnectionTerminated() {\n switch (this.type) {\n case SignalingClientEventType_1.default.WebSocketFailed:\n case SignalingClientEventType_1.default.WebSocketError:\n case SignalingClientEventType_1.default.WebSocketClosing:\n case SignalingClientEventType_1.default.WebSocketClosed:\n return true;\n default:\n return false;\n }\n }\n}\nexports.default = SignalingClientEvent;\n//# sourceMappingURL=SignalingClientEvent.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst TimeoutScheduler_1 = __importDefault(require(\"../scheduler/TimeoutScheduler\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst Utils_1 = require(\"../utils/Utils\");\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nconst VideoQualityAdaptationPreference_1 = __importDefault(require(\"../videodownlinkbandwidthpolicy/VideoQualityAdaptationPreference\"));\nconst WebSocketReadyState_1 = __importDefault(require(\"../websocketadapter/WebSocketReadyState\"));\nconst ServerSideNetworkAdaption_1 = require(\"./ServerSideNetworkAdaption\");\nconst SignalingClientEvent_1 = __importDefault(require(\"./SignalingClientEvent\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"./SignalingClientEventType\"));\n/**\n * [[DefaultSignalingClient]] implements the SignalingClient interface.\n */\nclass DefaultSignalingClient {\n constructor(webSocket, logger) {\n this.webSocket = webSocket;\n this.logger = logger;\n this.unloadHandler = null;\n this.closeEventHandler = (event) => {\n this.deactivatePageUnloadHandler();\n this.resetConnection();\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketClosed, null, event.code, event.reason));\n this.serviceConnectionRequestQueue();\n };\n this.observerQueue = new Set();\n this.connectionRequestQueue = [];\n this.resetConnection();\n this.logger.debug(() => 'signaling client init');\n this.audioSessionId = this.generateNewAudioSessionId();\n }\n registerObserver(observer) {\n this.logger.debug(() => 'registering signaling client observer');\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.logger.debug(() => 'removing signaling client observer');\n this.observerQueue.delete(observer);\n }\n openConnection(request) {\n this.logger.info('adding connection request to queue: ' + request.url());\n this.connectionRequestQueue.push(request);\n this.closeConnection();\n }\n pingPong(pingPongFrame) {\n this.logger.debug(() => 'sending ping');\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.PING_PONG;\n message.pingPong = pingPongFrame;\n this.sendMessage(message);\n return message.timestampMs;\n }\n join(settings) {\n this.logger.info('sending join');\n const joinFrame = SignalingProtocol_js_1.SdkJoinFrame.create();\n joinFrame.protocolVersion = 2;\n joinFrame.flags = SignalingProtocol_js_1.SdkJoinFlags.HAS_STREAM_UPDATE;\n const browserBehavior = new DefaultBrowserBehavior_1.default();\n const sdkClientDetails = {\n platformName: browserBehavior.name(),\n platformVersion: browserBehavior.version(),\n clientSource: Versioning_1.default.sdkName,\n chimeSdkVersion: Versioning_1.default.sdkVersion,\n clientUtcOffset: Utils_1.getFormattedOffset(new Date().getTimezoneOffset()),\n };\n if (settings.applicationMetadata) {\n const { appName, appVersion } = settings.applicationMetadata;\n sdkClientDetails.appName = appName;\n sdkClientDetails.appVersion = appVersion;\n }\n joinFrame.clientDetails = SignalingProtocol_js_1.SdkClientDetails.create(sdkClientDetails);\n joinFrame.audioSessionId = this.audioSessionId;\n joinFrame.wantsCompressedSdp = DefaultSignalingClient.CLIENT_SUPPORTS_COMPRESSION;\n joinFrame.disablePeriodicKeyframeRequestOnContentSender =\n settings.disablePeriodicKeyframeRequestOnContentSender;\n joinFrame.serverSideNetworkAdaption = ServerSideNetworkAdaption_1.convertServerSideNetworkAdaptionEnumToSignaled(settings.serverSideNetworkAdaption);\n joinFrame.supportedServerSideNetworkAdaptions = settings.supportedServerSideNetworkAdaptions.map(ServerSideNetworkAdaption_1.convertServerSideNetworkAdaptionEnumToSignaled);\n joinFrame.wantsAllTemporalLayersInIndex = settings.wantsAllTemporalLayersInIndex;\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.JOIN;\n message.join = joinFrame;\n this.sendMessage(message);\n }\n subscribe(settings) {\n const subscribeFrame = SignalingProtocol_js_1.SdkSubscribeFrame.create();\n subscribeFrame.sendStreams = [];\n subscribeFrame.sdpOffer = settings.sdpOffer;\n if (settings.connectionTypeHasVideo) {\n subscribeFrame.receiveStreamIds = settings.receiveStreamIds;\n }\n if (settings.audioHost) {\n subscribeFrame.audioCheckin = settings.audioCheckin;\n subscribeFrame.audioHost = settings.audioHost;\n subscribeFrame.audioMuted = settings.audioMuted;\n if (!settings.audioCheckin) {\n const audioStream = SignalingProtocol_js_1.SdkStreamDescriptor.create();\n audioStream.mediaType = SignalingProtocol_js_1.SdkStreamMediaType.AUDIO;\n audioStream.trackLabel = 'AmazonChimeExpressAudio';\n audioStream.attendeeId = settings.attendeeId;\n audioStream.streamId = 1;\n audioStream.groupId = 1;\n audioStream.framerate = 15;\n audioStream.maxBitrateKbps = 600;\n audioStream.avgBitrateBps = 400000;\n subscribeFrame.sendStreams.push(audioStream);\n }\n }\n subscribeFrame.compressedSdpOffer = settings.compressedSdpOffer;\n subscribeFrame.duplex = SignalingProtocol_js_1.SdkStreamServiceType.RX;\n if (settings.localVideoEnabled) {\n subscribeFrame.duplex = SignalingProtocol_js_1.SdkStreamServiceType.DUPLEX;\n for (let i = 0; i < settings.videoStreamDescriptions.length; i++) {\n // Non-simulcast use DefaultVideoStreamIndex.localStreamDescriptions\n // which is the exact old behavior\n const streamDescription = settings.videoStreamDescriptions[i].clone();\n streamDescription.attendeeId = settings.attendeeId;\n subscribeFrame.sendStreams.push(streamDescription.toStreamDescriptor());\n }\n }\n if (settings.videoSubscriptionConfiguration.length > 0) {\n subscribeFrame.videoSubscriptionConfiguration = settings.videoSubscriptionConfiguration.map(this.convertSignalingClientVideoSubscriptionConfiguration);\n }\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.SUBSCRIBE;\n message.sub = subscribeFrame;\n this.sendMessage(message);\n }\n remoteVideoUpdate(addedOrUpdated, removed) {\n const remoteVideoUpdate = SignalingProtocol_js_1.SdkRemoteVideoUpdateFrame.create();\n remoteVideoUpdate.addedOrUpdatedVideoSubscriptions = addedOrUpdated.map(this.convertSignalingClientVideoSubscriptionConfiguration);\n remoteVideoUpdate.removedVideoSubscriptionMids = removed;\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.REMOTE_VIDEO_UPDATE;\n message.remoteVideoUpdate = remoteVideoUpdate;\n this.sendMessage(message);\n }\n convertSignalingClientVideoSubscriptionConfiguration(config) {\n const signalConfig = new SignalingProtocol_js_1.SdkVideoSubscriptionConfiguration();\n signalConfig.mid = config.mid;\n signalConfig.attendeeId = config.attendeeId;\n signalConfig.streamId = config.streamId;\n signalConfig.groupId = config.groupId;\n signalConfig.priority = config.priority;\n signalConfig.targetBitrateKbps = config.targetBitrateKbps;\n switch (config.qualityAdaptationPreference) {\n case VideoQualityAdaptationPreference_1.default.Balanced:\n signalConfig.qualityAdaptationPreference = SignalingProtocol_js_1.SdkVideoQualityAdaptationPreference.BALANCED;\n break;\n case VideoQualityAdaptationPreference_1.default.MaintainFramerate:\n signalConfig.qualityAdaptationPreference =\n SignalingProtocol_js_1.SdkVideoQualityAdaptationPreference.MAINTAIN_FRAMERATE;\n break;\n case VideoQualityAdaptationPreference_1.default.MaintainResolution:\n signalConfig.qualityAdaptationPreference =\n SignalingProtocol_js_1.SdkVideoQualityAdaptationPreference.MAINTAIN_RESOLUTION;\n break;\n default:\n signalConfig.qualityAdaptationPreference = SignalingProtocol_js_1.SdkVideoQualityAdaptationPreference.BALANCED;\n }\n return signalConfig;\n }\n leave() {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.LEAVE;\n message.leave = SignalingProtocol_js_1.SdkLeaveFrame.create();\n this.sendMessage(message);\n this.logger.debug(() => {\n return 'sent leave';\n });\n }\n sendClientMetrics(clientMetricFrame) {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.CLIENT_METRIC;\n message.clientMetric = clientMetricFrame;\n this.sendMessage(message);\n }\n sendDataMessage(messageFrame) {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.DATA_MESSAGE;\n message.dataMessage = messageFrame;\n this.sendMessage(message);\n }\n closeConnection() {\n var _a, _b;\n if (this.webSocket.readyState() !== WebSocketReadyState_1.default.None &&\n this.webSocket.readyState() !== WebSocketReadyState_1.default.Closed) {\n this.isClosing = true;\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketClosing, null));\n // Continue resetting the connection even if SDK does not receive the \"close\" event.\n const scheduler = new TimeoutScheduler_1.default(DefaultSignalingClient.CLOSE_EVENT_TIMEOUT_MS);\n const handler = (event) => {\n var _a, _b;\n /* istanbul ignore next */\n (_b = (_a = this.webSocket).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'close', handler);\n scheduler.stop();\n this.closeEventHandler(event);\n };\n // Remove the existing close handler to prevent SDK from opening a new connection.\n /* istanbul ignore next */\n (_b = (_a = this.webSocket).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'close', this.closeEventHandler);\n this.webSocket.addEventListener('close', handler);\n scheduler.start(() => {\n // SDK has not received the \"close\" event on WebSocket for two seconds.\n // Handle a fake close event with 1006 to indicate that the client abnormally closed the connection.\n handler(new CloseEvent('close', { wasClean: false, code: 1006, reason: '', bubbles: false }));\n });\n this.webSocket.close();\n this.deactivatePageUnloadHandler();\n }\n else {\n this.logger.info('no existing signaling client connection needs closing');\n this.serviceConnectionRequestQueue();\n }\n }\n ready() {\n return (this.webSocket.readyState() === WebSocketReadyState_1.default.Open && !this.isClosing && this.wasOpened);\n }\n mute(muted) {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.AUDIO_CONTROL;\n const audioControl = SignalingProtocol_js_1.SdkAudioControlFrame.create();\n audioControl.muted = muted;\n message.audioControl = audioControl;\n this.sendMessage(message);\n }\n pause(streamIds) {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.PAUSE;\n message.pause = SignalingProtocol_js_1.SdkPauseResumeFrame.create();\n message.pause.streamIds = streamIds;\n this.sendMessage(message);\n }\n resume(streamIds) {\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.RESUME;\n message.pause = SignalingProtocol_js_1.SdkPauseResumeFrame.create();\n message.pause.streamIds = streamIds;\n this.sendMessage(message);\n }\n resetConnection() {\n this.webSocket.destroy();\n this.wasOpened = false;\n }\n sendMessage(message) {\n message.timestampMs = Date.now();\n this.logger.debug(() => `sending: ${JSON.stringify(message)}`);\n const buffer = this.prependWithFrameTypeRTC(SignalingProtocol_js_1.SdkSignalFrame.encode(message).finish());\n if (this.ready()) {\n if (!this.webSocket.send(buffer)) {\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketSendMessageFailure, null));\n return;\n }\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketSentMessage, null));\n }\n else {\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketSkippedMessage, null));\n }\n }\n receiveMessage(inBuffer) {\n let message;\n try {\n message = SignalingProtocol_js_1.SdkSignalFrame.decode(inBuffer);\n }\n catch (e) {\n this.logger.info(`failed to decode: ${inBuffer}`);\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.ProtocolDecodeFailure, null));\n return;\n }\n this.logger.debug(() => `received: ${JSON.stringify(message)}`);\n if (this.webSocket.readyState() === WebSocketReadyState_1.default.Open) {\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.ReceivedSignalFrame, message));\n }\n else {\n this.logger.info(`skipping notification of message since WebSocket is not open: ${JSON.stringify(message)}`);\n }\n }\n stripFrameTypeRTC(inBuffer) {\n const frameType = inBuffer[0];\n // TODO: change server frame type to send 0x05\n if (frameType !== DefaultSignalingClient.FRAME_TYPE_RTC && frameType !== 0x02) {\n this.logger.warn(`expected FrameTypeRTC for message but got ${frameType}`);\n }\n return inBuffer.slice(1);\n }\n prependWithFrameTypeRTC(inBuffer) {\n const outBuffer = new Uint8Array(inBuffer.length + 1);\n outBuffer[0] = DefaultSignalingClient.FRAME_TYPE_RTC;\n outBuffer.set(inBuffer, 1);\n return outBuffer;\n }\n serviceConnectionRequestQueue() {\n if (this.connectionRequestQueue.length === 0) {\n this.logger.info('no connection requests to service');\n return;\n }\n const request = this.connectionRequestQueue.shift();\n this.logger.info(`opening connection to ${request.url()}`);\n this.isClosing = false;\n this.webSocket.create(request.url(), request.protocols());\n this.setUpEventListeners();\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketConnecting, null));\n }\n sendEvent(event) {\n switch (event.type) {\n case SignalingClientEventType_1.default.WebSocketMessage:\n case SignalingClientEventType_1.default.ReceivedSignalFrame:\n case SignalingClientEventType_1.default.WebSocketSentMessage:\n this.logger.debug(() => `notifying event: ${SignalingClientEventType_1.default[event.type]}`);\n break;\n case SignalingClientEventType_1.default.WebSocketSkippedMessage:\n this.logger.debug(() => `notifying event: ${SignalingClientEventType_1.default[event.type]}, websocket state=${WebSocketReadyState_1.default[this.webSocket.readyState()]}`);\n break;\n default:\n this.logger.info(`notifying event: ${SignalingClientEventType_1.default[event.type]}`);\n break;\n }\n for (const observer of this.observerQueue) {\n observer.handleSignalingClientEvent(event);\n }\n }\n setUpEventListeners() {\n this.webSocket.addEventListener('open', () => {\n this.activatePageUnloadHandler();\n this.wasOpened = true;\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketOpen, null));\n });\n this.webSocket.addEventListener('message', (event) => {\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketMessage, null));\n this.receiveMessage(this.stripFrameTypeRTC(new Uint8Array(event.data)));\n });\n this.webSocket.addEventListener('close', this.closeEventHandler);\n this.webSocket.addEventListener('error', () => {\n if (this.isClosing && !this.wasOpened) {\n this.logger.info('ignoring error closing signaling while connecting');\n return;\n }\n if (this.wasOpened) {\n this.logger.error('received error while connected');\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketError, null));\n }\n else {\n this.logger.error('failed to connect');\n this.sendEvent(new SignalingClientEvent_1.default(this, SignalingClientEventType_1.default.WebSocketFailed, null));\n }\n });\n }\n activatePageUnloadHandler() {\n this.unloadHandler = () => {\n this.leave();\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const GlobalAny = global;\n GlobalAny['window'] &&\n GlobalAny['window']['addEventListener'] &&\n window.addEventListener('unload', this.unloadHandler);\n }\n deactivatePageUnloadHandler() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const GlobalAny = global;\n GlobalAny['window'] &&\n GlobalAny['window']['removeEventListener'] &&\n window.removeEventListener('unload', this.unloadHandler);\n this.unloadHandler = null;\n }\n generateNewAudioSessionId() {\n const num = new Uint32Array(1);\n Utils_1.getRandomValues(num);\n return num[0];\n }\n promoteToPrimaryMeeting(credentials) {\n const signaledCredentials = SignalingProtocol_js_1.SdkMeetingSessionCredentials.create();\n signaledCredentials.attendeeId = credentials.attendeeId;\n signaledCredentials.externalUserId = credentials.externalUserId;\n signaledCredentials.joinToken = credentials.joinToken;\n const primaryMeetingJoin = SignalingProtocol_js_1.SdkPrimaryMeetingJoinFrame.create();\n primaryMeetingJoin.credentials = signaledCredentials;\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.PRIMARY_MEETING_JOIN;\n message.primaryMeetingJoin = primaryMeetingJoin;\n this.sendMessage(message);\n }\n demoteFromPrimaryMeeting() {\n const primaryMeetingLeave = SignalingProtocol_js_1.SdkPrimaryMeetingLeaveFrame.create();\n const message = SignalingProtocol_js_1.SdkSignalFrame.create();\n message.type = SignalingProtocol_js_1.SdkSignalFrame.Type.PRIMARY_MEETING_LEAVE;\n message.primaryMeetingLeave = primaryMeetingLeave;\n this.sendMessage(message);\n }\n}\nexports.default = DefaultSignalingClient;\nDefaultSignalingClient.FRAME_TYPE_RTC = 0x5;\nDefaultSignalingClient.CLOSE_EVENT_TIMEOUT_MS = 2000;\nDefaultSignalingClient.CLIENT_SUPPORTS_COMPRESSION = true;\n//# sourceMappingURL=DefaultSignalingClient.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[SignalingClientVideoSubscriptionConfiguration]] is an internal representation of\n * `SignalingProtocol.videoSubscriptionConfiguration`\n */\nclass SignalingClientVideoSubscriptionConfiguration {\n equals(other) {\n return (other !== undefined &&\n this.mid === other.mid &&\n this.attendeeId === other.attendeeId &&\n this.streamId === other.streamId &&\n this.groupId === other.groupId &&\n this.priority === other.priority &&\n this.targetBitrateKbps === other.targetBitrateKbps &&\n this.qualityAdaptationPreference === other.qualityAdaptationPreference);\n }\n}\nexports.default = SignalingClientVideoSubscriptionConfiguration;\n//# sourceMappingURL=SignalingClientVideoSubscriptionConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[RedundantAudioRecoveryMetricReport]] will contain metrics reported\n * by the [[RedundantAudioEncoder]]\n */\nclass RedundantAudioRecoveryMetricReport {\n constructor() {\n this.currentTimestampMs = 0;\n this.ssrc = 0;\n this.totalAudioPacketsLost = 0;\n this.totalAudioPacketsExpected = 0;\n this.totalAudioPacketsRecoveredRed = 0;\n this.totalAudioPacketsRecoveredFec = 0;\n }\n}\nexports.default = RedundantAudioRecoveryMetricReport;\n//# sourceMappingURL=RedundantAudioRecoveryMetricReport.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass StreamMetricReport {\n constructor() {\n this.previousMetrics = {};\n this.currentMetrics = {};\n // As metric values do not necessarily be number, this is a workaround in case metric value is string\n this.currentStringMetrics = {};\n this.previousObjectMetrics = {};\n this.currentObjectMetrics = {};\n }\n}\nexports.default = StreamMetricReport;\n//# sourceMappingURL=StreamMetricReport.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeetingSessionLifecycleEvent = void 0;\n/**\n * [[MeetingSessionLifecycleEvent]] indicates the lifecycle status.\n * Add new enums to the bottom. We depend on these numbers for analytics.\n */\nvar MeetingSessionLifecycleEvent;\n(function (MeetingSessionLifecycleEvent) {\n /**\n * The session is connecting, either to start a new call, or reconnect to an existing one.\n */\n MeetingSessionLifecycleEvent[MeetingSessionLifecycleEvent[\"Connecting\"] = 0] = \"Connecting\";\n /**\n * The session successfully arrived in the started state either for the first time or\n * due to a change in connection type.\n */\n MeetingSessionLifecycleEvent[MeetingSessionLifecycleEvent[\"Started\"] = 1] = \"Started\";\n /**\n * The session came to a stop, either from leaving or due to a failure.\n */\n MeetingSessionLifecycleEvent[MeetingSessionLifecycleEvent[\"Stopped\"] = 2] = \"Stopped\";\n})(MeetingSessionLifecycleEvent = exports.MeetingSessionLifecycleEvent || (exports.MeetingSessionLifecycleEvent = {}));\nexports.default = MeetingSessionLifecycleEvent;\n//# sourceMappingURL=MeetingSessionLifecycleEvent.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeetingSessionLifecycleEventCondition = void 0;\n/**\n * [[MeetingSessionLifecycleEventCondition]] indicates the lifecycle event condition.\n * Add new enums to the bottom. We depend on these numbers for analytics.\n */\nvar MeetingSessionLifecycleEventCondition;\n(function (MeetingSessionLifecycleEventCondition) {\n /**\n * The session is connecting for the first time.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"ConnectingNew\"] = 0] = \"ConnectingNew\";\n /**\n * The session was connected before and is now reconnecting.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"ReconnectingExisting\"] = 1] = \"ReconnectingExisting\";\n /**\n * The session successfully arrived in the started state for the first time.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"StartedNew\"] = 2] = \"StartedNew\";\n /**\n * The session successfully arrived in the started state but was connected before.\n * This can happen, for example, when the connection type changes.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"StartedExisting\"] = 3] = \"StartedExisting\";\n /**\n * The session successfully arrived in the started state following a reconnect.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"StartedAfterReconnect\"] = 4] = \"StartedAfterReconnect\";\n /**\n * The session stopped cleanly, probably due to leaving the call.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"StoppedCleanly\"] = 5] = \"StoppedCleanly\";\n /**\n * The session stopped due to a failure. A status code will indicate the cause of\n * the failure.\n */\n MeetingSessionLifecycleEventCondition[MeetingSessionLifecycleEventCondition[\"StoppedWithFailure\"] = 6] = \"StoppedWithFailure\";\n})(MeetingSessionLifecycleEventCondition = exports.MeetingSessionLifecycleEventCondition || (exports.MeetingSessionLifecycleEventCondition = {}));\nexports.default = MeetingSessionLifecycleEventCondition;\n//# sourceMappingURL=MeetingSessionLifecycleEventCondition.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ClientMetricReport_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReport\"));\nconst ClientMetricReportDirection_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportDirection\"));\nconst ClientMetricReportMediaType_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportMediaType\"));\nconst RedundantAudioRecoveryMetricReport_1 = __importDefault(require(\"../clientmetricreport/RedundantAudioRecoveryMetricReport\"));\nconst StreamMetricReport_1 = __importDefault(require(\"../clientmetricreport/StreamMetricReport\"));\nconst MeetingSessionLifecycleEvent_1 = __importDefault(require(\"../meetingsession/MeetingSessionLifecycleEvent\"));\nconst MeetingSessionLifecycleEventCondition_1 = __importDefault(require(\"../meetingsession/MeetingSessionLifecycleEventCondition\"));\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst Types_1 = require(\"../utils/Types\");\nconst AudioLogEvent_1 = __importDefault(require(\"./AudioLogEvent\"));\nconst VideoLogEvent_1 = __importDefault(require(\"./VideoLogEvent\"));\n/**\n * [[StatsCollector]] gathers statistics and sends metrics.\n */\nclass StatsCollector {\n constructor(audioVideoController, logger, interval = StatsCollector.INTERVAL_MS) {\n this.audioVideoController = audioVideoController;\n this.logger = logger;\n this.interval = interval;\n this.intervalScheduler = null;\n this.redRecoveryMetricReport = new RedundantAudioRecoveryMetricReport_1.default();\n this.lastRedRecoveryMetricReportConsumedTimestampMs = 0;\n // TODO: Implement metricsAddTime() and metricsLogEvent().\n this.metricsAddTime = (_name, _duration, _attributes) => { };\n this.metricsLogEvent = (_name, _attributes) => { };\n }\n // TODO: Update toAttribute() and toSuffix() methods to convert raw data to a required type.\n /**\n * Converts string to attribute format.\n */\n toAttribute(str) {\n return this.toSuffix(str).substring(1);\n }\n /**\n * Converts string to suffix format.\n */\n toSuffix(str) {\n if (str.toLowerCase() === str) {\n // e.g. lower_case -> _lower_case\n return `_${str}`;\n }\n else if (str.toUpperCase() === str) {\n // e.g. UPPER_CASE -> _upper_case\n return `_${str.toLowerCase()}`;\n }\n else {\n // e.g. CamelCaseWithCAPS -> _camel_case_with_caps\n return str\n .replace(/([A-Z][a-z]+)/g, function ($1) {\n return `_${$1}`;\n })\n .replace(/([A-Z][A-Z]+)/g, function ($1) {\n return `_${$1}`;\n })\n .toLowerCase();\n }\n }\n /**\n * Logs the latency.\n */\n logLatency(eventName, timeMs, attributes) {\n const event = this.toSuffix(eventName);\n this.logEventTime('meeting' + event, timeMs, attributes);\n }\n /**\n * Logs the state timeout.\n */\n logStateTimeout(stateName, attributes) {\n const state = this.toSuffix(stateName);\n this.logEvent('meeting_session_state_timeout', Object.assign(Object.assign({}, attributes), { state: `state${state}` }));\n }\n /**\n * Logs the audio event.\n */\n logAudioEvent(eventName, attributes) {\n const event = 'audio' + this.toSuffix(AudioLogEvent_1.default[eventName]);\n this.logEvent(event, attributes);\n }\n /**\n * Logs the video event.\n */\n logVideoEvent(eventName, attributes) {\n const event = 'video' + this.toSuffix(VideoLogEvent_1.default[eventName]);\n this.logEvent(event, attributes);\n }\n logEventTime(eventName, timeMs, attributes = {}) {\n const finalAttributes = Object.assign(Object.assign({}, attributes), { call_id: this.audioVideoController.configuration.meetingId, client_type: StatsCollector.CLIENT_TYPE, metric_type: 'latency' });\n this.logger.debug(() => {\n return `[StatsCollector] ${eventName}: ${JSON.stringify(finalAttributes)}`;\n });\n this.metricsAddTime(eventName, timeMs, finalAttributes);\n }\n /**\n * Logs the session status.\n */\n logMeetingSessionStatus(status) {\n // TODO: Generate the status event name given the status code.\n const statusEventName = `${status.statusCode()}`;\n this.logEvent(statusEventName);\n const statusAttribute = {\n status: statusEventName,\n status_code: `${status.statusCode()}`,\n };\n this.logEvent('meeting_session_status', statusAttribute);\n if (status.isTerminal()) {\n this.logEvent('meeting_session_stopped', statusAttribute);\n }\n if (status.isAudioConnectionFailure()) {\n this.logEvent('meeting_session_audio_failed', statusAttribute);\n }\n if (status.isFailure()) {\n this.logEvent('meeting_session_failed', statusAttribute);\n }\n }\n /**\n * Logs the lifecycle event.\n */\n logLifecycleEvent(lifecycleEvent, condition) {\n const attributes = {\n lifecycle_event: `lifecycle${this.toSuffix(MeetingSessionLifecycleEvent_1.default[lifecycleEvent])}`,\n lifecycle_event_code: `${lifecycleEvent}`,\n lifecycle_event_condition: `condition${this.toSuffix(MeetingSessionLifecycleEventCondition_1.default[condition])}`,\n lifecycle_event_condition_code: `${condition}`,\n };\n this.logEvent('meeting_session_lifecycle', attributes);\n }\n /**\n * Logs the events.\n */\n logEvent(eventName, attributes = {}) {\n const finalAttributes = Object.assign(Object.assign({}, attributes), { call_id: this.audioVideoController.configuration.meetingId, client_type: StatsCollector.CLIENT_TYPE });\n this.logger.debug(() => {\n return `[StatsCollector] ${eventName}: ${JSON.stringify(finalAttributes)}`;\n });\n this.metricsLogEvent(eventName, finalAttributes);\n }\n /**\n * Starts collecting statistics.\n */\n start(signalingClient, videoStreamIndex) {\n if (this.intervalScheduler) {\n return false;\n }\n this.logger.info('Starting StatsCollector');\n this.signalingClient = signalingClient;\n this.videoStreamIndex = videoStreamIndex;\n this.clientMetricReport = new ClientMetricReport_1.default(this.logger, this.videoStreamIndex, this.audioVideoController.configuration.credentials.attendeeId);\n this.intervalScheduler = new IntervalScheduler_1.default(this.interval);\n this.intervalScheduler.start(() => __awaiter(this, void 0, void 0, function* () {\n yield this.getStatsWrapper();\n }));\n return true;\n }\n /*\n * Stops the stats collector.\n */\n stop() {\n this.logger.info('Stopping StatsCollector');\n if (this.intervalScheduler) {\n this.intervalScheduler.stop();\n }\n this.intervalScheduler = null;\n }\n /**\n * Convert raw metrics to client metric report.\n */\n updateMetricValues(rawMetricReport, isStream) {\n const metricReport = isStream\n ? this.clientMetricReport.streamMetricReports[Number(rawMetricReport.ssrc)]\n : this.clientMetricReport.globalMetricReport;\n let metricMap;\n if (isStream) {\n metricMap = this.clientMetricReport.getMetricMap(metricReport.mediaType, metricReport.direction);\n }\n else {\n metricMap = this.clientMetricReport.getMetricMap();\n }\n for (const rawMetric in rawMetricReport) {\n if (rawMetric in metricMap) {\n if (typeof rawMetricReport[rawMetric] === 'number') {\n metricReport.previousMetrics[rawMetric] = metricReport.currentMetrics[rawMetric];\n metricReport.currentMetrics[rawMetric] = rawMetricReport[rawMetric];\n }\n else if (typeof rawMetricReport[rawMetric] === 'string') {\n metricReport.currentStringMetrics[rawMetric] = rawMetricReport[rawMetric];\n }\n else if (typeof rawMetricReport[rawMetric] === 'object') {\n metricReport.previousObjectMetrics[rawMetric] =\n metricReport.currentObjectMetrics[rawMetric] === undefined\n ? rawMetricReport[rawMetric]\n : metricReport.currentObjectMetrics[rawMetric];\n metricReport.currentObjectMetrics[rawMetric] = rawMetricReport[rawMetric];\n }\n else {\n this.logger.error(`Unknown metric value type ${typeof rawMetricReport[rawMetric]} for metric ${rawMetric}`);\n }\n }\n }\n }\n /**\n * Converts RawMetricReport to StreamMetricReport and GlobalMetricReport and stores them as clientMetricReport.\n */\n processRawMetricReports(rawMetricReports) {\n this.clientMetricReport.currentSsrcs = {};\n const timeStamp = Date.now();\n for (const rawMetricReport of rawMetricReports) {\n const isStream = this.isStreamRawMetricReport(rawMetricReport.type);\n if (isStream) {\n const existingStreamMetricReport = this.clientMetricReport.streamMetricReports[Number(rawMetricReport.ssrc)];\n if (!existingStreamMetricReport) {\n const streamMetricReport = new StreamMetricReport_1.default();\n streamMetricReport.mediaType = this.getMediaType(rawMetricReport);\n streamMetricReport.direction = this.getDirectionType(rawMetricReport);\n if (streamMetricReport.mediaType === ClientMetricReportMediaType_1.default.VIDEO &&\n streamMetricReport.direction === ClientMetricReportDirection_1.default.UPSTREAM) {\n streamMetricReport.streamId = this.videoStreamIndex.sendVideoStreamIdFromRid(rawMetricReport.rid);\n }\n else if (!this.videoStreamIndex.allStreams().empty()) {\n streamMetricReport.streamId = this.videoStreamIndex.streamIdForSSRC(Number(rawMetricReport.ssrc));\n /* istanbul ignore else */\n if (this.videoStreamIndex.groupIdForSSRC !== undefined) {\n streamMetricReport.groupId = this.videoStreamIndex.groupIdForSSRC(Number(rawMetricReport.ssrc));\n }\n }\n this.clientMetricReport.streamMetricReports[Number(rawMetricReport.ssrc)] = streamMetricReport;\n }\n else {\n // Update stream ID in case we have overridden it locally in the case of remote video\n // updates completed without a negotiation\n if (existingStreamMetricReport.mediaType === ClientMetricReportMediaType_1.default.VIDEO &&\n existingStreamMetricReport.direction === ClientMetricReportDirection_1.default.UPSTREAM) {\n existingStreamMetricReport.streamId = this.videoStreamIndex.sendVideoStreamIdFromRid(rawMetricReport.rid);\n }\n else {\n existingStreamMetricReport.streamId = this.videoStreamIndex.streamIdForSSRC(Number(rawMetricReport.ssrc));\n }\n }\n this.clientMetricReport.currentSsrcs[Number(rawMetricReport.ssrc)] = 1;\n }\n this.updateMetricValues(rawMetricReport, isStream);\n }\n this.clientMetricReport.removeDestroyedSsrcs();\n this.clientMetricReport.previousTimestampMs = this.clientMetricReport.currentTimestampMs;\n this.clientMetricReport.currentTimestampMs = timeStamp;\n this.clientMetricReport.print();\n }\n /**\n * Add stream metric dimension frames derived from metrics\n */\n addStreamMetricDimensionFrames(streamMetricFrame, streamMetricReport) {\n const streamDimensionMap = this.clientMetricReport.getStreamDimensionMap();\n for (const metricName in streamMetricReport.currentStringMetrics) {\n if (metricName in streamDimensionMap) {\n const dimensionFrame = SignalingProtocol_js_1.SdkStreamDimension.create();\n dimensionFrame.type = streamDimensionMap[metricName];\n const dimensionValue = SignalingProtocol_js_1.SdkDimensionValue.create();\n dimensionValue.stringValue = streamMetricReport.currentStringMetrics[metricName];\n dimensionFrame.value = dimensionValue;\n streamMetricFrame.dimensions.push(dimensionFrame);\n }\n }\n }\n /**\n * Packages a metric into the MetricFrame.\n */\n addMetricFrame(metricName, clientMetricFrame, metricSpec, ssrc) {\n const type = metricSpec.type;\n const transform = metricSpec.transform;\n const sourceMetric = metricSpec.source;\n const streamMetricFramesLength = clientMetricFrame.streamMetricFrames.length;\n const latestStreamMetricFrame = clientMetricFrame.streamMetricFrames[streamMetricFramesLength - 1];\n if (type) {\n const metricFrame = SignalingProtocol_js_1.SdkMetric.create();\n metricFrame.type = type;\n metricFrame.value = sourceMetric\n ? transform(sourceMetric, ssrc)\n : transform(metricName, ssrc);\n ssrc\n ? latestStreamMetricFrame.metrics.push(metricFrame)\n : clientMetricFrame.globalMetrics.push(metricFrame);\n }\n }\n /**\n * Packages metrics in GlobalMetricReport into the MetricFrame.\n */\n addGlobalMetricsToProtobuf(clientMetricFrame) {\n const metricMap = this.clientMetricReport.getMetricMap();\n for (const metricName in this.clientMetricReport.globalMetricReport.currentMetrics) {\n this.addMetricFrame(metricName, clientMetricFrame, metricMap[metricName]);\n }\n }\n /**\n * Packages metrics in StreamMetricReport into the MetricFrame.\n */\n addStreamMetricsToProtobuf(clientMetricFrame) {\n for (const ssrc in this.clientMetricReport.streamMetricReports) {\n const streamMetricReport = this.clientMetricReport.streamMetricReports[ssrc];\n const streamMetricFrame = SignalingProtocol_js_1.SdkStreamMetricFrame.create();\n streamMetricFrame.streamId = streamMetricReport.streamId;\n streamMetricFrame.metrics = [];\n this.addStreamMetricDimensionFrames(streamMetricFrame, streamMetricReport);\n clientMetricFrame.streamMetricFrames.push(streamMetricFrame);\n const metricMap = this.clientMetricReport.getMetricMap(streamMetricReport.mediaType, streamMetricReport.direction);\n for (const metricName in streamMetricReport.currentMetrics) {\n this.addMetricFrame(metricName, clientMetricFrame, metricMap[metricName], Number(ssrc));\n }\n for (const metricName in streamMetricReport.currentStringMetrics) {\n this.addMetricFrame(metricName, clientMetricFrame, metricMap[metricName], Number(ssrc));\n }\n for (const metricName in streamMetricReport.currentObjectMetrics) {\n this.addMetricFrame(metricName, clientMetricFrame, metricMap[metricName], Number(ssrc));\n }\n }\n }\n /**\n * Packages all metrics into the MetricFrame.\n */\n makeClientMetricProtobuf() {\n const clientMetricFrame = SignalingProtocol_js_1.SdkClientMetricFrame.create();\n clientMetricFrame.globalMetrics = [];\n clientMetricFrame.streamMetricFrames = [];\n this.addGlobalMetricsToProtobuf(clientMetricFrame);\n this.addStreamMetricsToProtobuf(clientMetricFrame);\n return clientMetricFrame;\n }\n /**\n * Sends the MetricFrame to Tincan via ProtoBuf.\n */\n sendClientMetricProtobuf(clientMetricFrame) {\n this.signalingClient.sendClientMetrics(clientMetricFrame);\n }\n /**\n * Checks if the type of RawMetricReport is stream related.\n */\n isStreamRawMetricReport(type) {\n return [\n 'inbound-rtp',\n 'inbound-rtp-red',\n 'outbound-rtp',\n 'remote-inbound-rtp',\n 'remote-outbound-rtp',\n ].includes(type);\n }\n /**\n * Returns the MediaType for a RawMetricReport.\n */\n getMediaType(rawMetricReport) {\n return rawMetricReport.kind === 'audio' ? ClientMetricReportMediaType_1.default.AUDIO : ClientMetricReportMediaType_1.default.VIDEO;\n }\n /**\n * Returns the Direction for a RawMetricReport.\n */\n getDirectionType(rawMetricReport) {\n const { type } = rawMetricReport;\n return type === 'inbound-rtp' || type === 'remote-outbound-rtp' || type === 'inbound-rtp-red'\n ? ClientMetricReportDirection_1.default.DOWNSTREAM\n : ClientMetricReportDirection_1.default.UPSTREAM;\n }\n /**\n * Checks if a RawMetricReport belongs to certain types.\n */\n isValidStandardRawMetric(rawMetricReport) {\n return (rawMetricReport.type === 'inbound-rtp' ||\n rawMetricReport.type === 'inbound-rtp-red' ||\n rawMetricReport.type === 'outbound-rtp' ||\n rawMetricReport.type === 'remote-inbound-rtp' ||\n rawMetricReport.type === 'remote-outbound-rtp' ||\n (rawMetricReport.type === 'candidate-pair' && rawMetricReport.state === 'succeeded') ||\n (rawMetricReport.type === 'media-source' && rawMetricReport.kind === 'audio'));\n }\n /**\n * Checks if a RawMetricReport is stream related.\n */\n isValidSsrc(rawMetricReport) {\n let validSsrc = true;\n if (this.isStreamRawMetricReport(rawMetricReport.type) &&\n this.getDirectionType(rawMetricReport) === ClientMetricReportDirection_1.default.DOWNSTREAM &&\n this.getMediaType(rawMetricReport) === ClientMetricReportMediaType_1.default.VIDEO) {\n validSsrc = this.videoStreamIndex.streamIdForSSRC(Number(rawMetricReport.ssrc)) > 0;\n }\n return validSsrc;\n }\n /**\n * Checks if a RawMetricReport is valid.\n */\n isValidRawMetricReport(rawMetricReport) {\n return this.isValidStandardRawMetric(rawMetricReport) && this.isValidSsrc(rawMetricReport);\n }\n /**\n * Filters RawMetricReports and keeps the required parts.\n */\n filterRawMetricReports(rawMetricReports) {\n const filteredRawMetricReports = [];\n for (const rawMetricReport of rawMetricReports) {\n if (this.isValidRawMetricReport(rawMetricReport)) {\n filteredRawMetricReports.push(rawMetricReport);\n }\n }\n return filteredRawMetricReports;\n }\n /**\n * Performs a series operation on RawMetricReport.\n */\n handleRawMetricReports(rawMetricReports) {\n const filteredRawMetricReports = this.filterRawMetricReports(rawMetricReports);\n this.logger.debug(() => {\n return `Filtered raw metrics : ${JSON.stringify(filteredRawMetricReports)}`;\n });\n // Add custom stats for reporting.\n const customStatsReports = [];\n this.maybeAddRedRecoveryMetrics(customStatsReports);\n this.clientMetricReport.customStatsReports = customStatsReports;\n filteredRawMetricReports.push(...customStatsReports);\n this.processRawMetricReports(filteredRawMetricReports);\n const clientMetricFrame = this.makeClientMetricProtobuf();\n this.sendClientMetricProtobuf(clientMetricFrame);\n this.audioVideoController.forEachObserver(observer => {\n Types_1.Maybe.of(observer.metricsDidReceive).map(f => f.bind(observer)(this.clientMetricReport.clone()));\n });\n }\n /**\n * Gets raw WebRTC metrics.\n */\n getStatsWrapper() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.audioVideoController.rtcPeerConnection) {\n return;\n }\n const rawMetricReports = [];\n // @ts-ignore\n try {\n const report = yield this.audioVideoController.rtcPeerConnection.getStats();\n this.clientMetricReport.rtcStatsReport = report;\n report.forEach((item) => {\n rawMetricReports.push(item);\n });\n this.handleRawMetricReports(rawMetricReports);\n }\n catch (error) {\n this.logger.error(error.message);\n }\n });\n }\n overrideObservableMetric(name, value) {\n this.clientMetricReport.overrideObservableMetric(name, value);\n }\n /**\n * Receives the red recovery metrics from DefaultTransceiver.\n */\n recoveryMetricsDidReceive(metricReport) {\n this.redRecoveryMetricReport = metricReport;\n }\n /**\n * Adds RED recovery metrics to the raw webrtc stats report.\n */\n maybeAddRedRecoveryMetrics(customStatsReports) {\n if (this.redRecoveryMetricReport.currentTimestampMs ===\n this.lastRedRecoveryMetricReportConsumedTimestampMs) {\n // We have already sent the latest RED metrics.\n return;\n }\n // @ts-ignore\n customStatsReports.push({\n kind: 'audio',\n type: 'inbound-rtp-red',\n ssrc: this.redRecoveryMetricReport.ssrc,\n timestamp: this.redRecoveryMetricReport.currentTimestampMs,\n totalAudioPacketsLost: this.redRecoveryMetricReport.totalAudioPacketsLost,\n totalAudioPacketsExpected: this.redRecoveryMetricReport.totalAudioPacketsExpected,\n totalAudioPacketsRecoveredRed: this.redRecoveryMetricReport.totalAudioPacketsRecoveredRed,\n totalAudioPacketsRecoveredFec: this.redRecoveryMetricReport.totalAudioPacketsRecoveredFec,\n });\n this.lastRedRecoveryMetricReportConsumedTimestampMs = this.redRecoveryMetricReport.currentTimestampMs;\n }\n}\nexports.default = StatsCollector;\nStatsCollector.INTERVAL_MS = 1000;\nStatsCollector.CLIENT_TYPE = 'amazon-chime-sdk-js';\n//# sourceMappingURL=StatsCollector.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst SDP_1 = __importDefault(require(\"../sdp/SDP\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[FinishGatheringICECandidatesTask]] add ice-candidate event handler on peer connection to\n * collect ice candidates and wait for peer connection ice gathering state to complete\n */\nclass FinishGatheringICECandidatesTask extends BaseTask_1.default {\n constructor(context, chromeVpnTimeoutMs = FinishGatheringICECandidatesTask.CHROME_VPN_TIMEOUT_MS) {\n super(context.logger);\n this.context = context;\n this.chromeVpnTimeoutMs = chromeVpnTimeoutMs;\n this.taskName = 'FinishGatheringICECandidatesTask';\n }\n removeEventListener() {\n if (this.context.peer) {\n this.context.peer.removeEventListener('icecandidate', this.context.iceCandidateHandler);\n if (!this.context.turnCredentials) {\n this.context.peer.removeEventListener('icegatheringstatechange', this.context.iceGatheringStateEventHandler);\n }\n }\n }\n cancel() {\n let error;\n // TODO: Remove when the Chrome VPN reconnect bug is fixed.\n // In Chrome, SDK may fail to establish TURN session after VPN reconnect.\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=9097\n if (this.context.browserBehavior.requiresIceCandidateGatheringTimeoutWorkaround()) {\n if (this.chromeVpnTimeoutMs < this.context.meetingSessionConfiguration.connectionTimeoutMs) {\n const duration = Date.now() - this.startTimestampMs;\n if (duration > this.chromeVpnTimeoutMs) {\n error = new Error(`canceling ${this.name()} due to the meeting status code: ${MeetingSessionStatusCode_1.default.ICEGatheringTimeoutWorkaround}`);\n }\n }\n }\n // Just in case. The baseCancel behavior should prevent this.\n /* istanbul ignore else */\n if (this.cancelPromise) {\n error = error || new Error(`canceling ${this.name()}`);\n this.cancelPromise(error);\n delete this.cancelPromise;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.context.peer) {\n this.logAndThrow(`session does not have peer connection; bypass ice gathering`);\n }\n if (this.context.browserBehavior.requiresCheckForSdpConnectionAttributes()) {\n if (new SDP_1.default(this.context.peer.localDescription.sdp).hasCandidatesForAllMLines()) {\n this.context.logger.info(`ice gathering already complete; bypass gathering, current local description ${this.context.peer.localDescription.sdp}`);\n return;\n }\n }\n else {\n this.context.logger.info(`iOS device does not require checking for connection attributes in SDP, current local description ${this.context.peer.localDescription.sdp}`);\n }\n /*\n * To bypass waiting for events, it is required that \"icegatheringstate\" to be complete and sdp to have candidate\n * For Firefox, it takes long for iceGatheringState === 'complete'\n * Ref: https://github.com/aws/amazon-chime-sdk-js/issues/609\n */\n if ((this.context.browserBehavior.hasFirefoxWebRTC() ||\n this.context.peer.iceGatheringState === 'complete') &&\n new SDP_1.default(this.context.peer.localDescription.sdp).hasCandidates()) {\n this.context.logger.info('ice gathering state is complete and candidates are in SDP; bypass gathering');\n return;\n }\n try {\n yield new Promise((resolve, reject) => {\n this.cancelPromise = (error) => {\n this.removeEventListener();\n reject(error);\n };\n if (!this.context.turnCredentials) {\n // if one day, we found a case where a FinishGatheringICECandidate did not resolve but ice gathering state is complete and SDP answer has ice candidates\n // we may need to enable this\n this.context.iceGatheringStateEventHandler = () => {\n if (this.context.peer.iceGatheringState === 'complete') {\n this.removeEventListener();\n resolve();\n delete this.cancelPromise;\n return;\n }\n };\n this.context.peer.addEventListener('icegatheringstatechange', this.context.iceGatheringStateEventHandler);\n }\n this.context.iceCandidateHandler = (event) => {\n this.context.logger.info(`ice candidate: ${event.candidate ? event.candidate.candidate : '(null)'} state: ${this.context.peer.iceGatheringState}`);\n // Ice candidate arrives, do not need to wait anymore.\n // https://webrtcglossary.com/trickle-ice/\n if (event.candidate) {\n if (SDP_1.default.isRTPCandidate(event.candidate.candidate)) {\n this.context.iceCandidates.push(event.candidate);\n }\n // Could there be a case the candidate is not written to SDP ?\n if (this.context.turnCredentials && this.context.iceCandidates.length >= 1) {\n this.context.logger.info('gathered at least one relay candidate');\n this.removeEventListener();\n resolve();\n delete this.cancelPromise;\n return;\n }\n }\n // Ice candidate gathering is complete, additional barrier to make sure sdp contain an ice candidate.\n // TODO: Could there be a race where iceGatheringState is flipped after this task is run ? This could only be handled if ice state is monitored persistently.\n if (this.context.peer.iceGatheringState === 'complete') {\n this.context.logger.info('done gathering ice candidates');\n this.removeEventListener();\n if (!new SDP_1.default(this.context.peer.localDescription.sdp).hasCandidates() ||\n this.context.iceCandidates.length === 0) {\n reject(new Error('no ice candidates were gathered'));\n delete this.cancelPromise;\n }\n else {\n resolve();\n delete this.cancelPromise;\n }\n }\n };\n // SDK does not catch candidate itself and send to sever. Rather, WebRTC handles candidate events and writes candidate to SDP.\n this.context.peer.addEventListener('icecandidate', this.context.iceCandidateHandler);\n this.startTimestampMs = Date.now();\n });\n }\n catch (error) {\n throw error;\n }\n finally {\n /* istanbul ignore else */\n if (this.startTimestampMs) {\n this.context.iceGatheringDurationMs = Math.round(Date.now() - this.startTimestampMs);\n }\n }\n });\n }\n}\nexports.default = FinishGatheringICECandidatesTask;\nFinishGatheringICECandidatesTask.CHROME_VPN_TIMEOUT_MS = 5000;\n//# sourceMappingURL=FinishGatheringICECandidatesTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingSessionTURNCredentials]] contains TURN credentials from the TURN server.\n */\nclass MeetingSessionTURNCredentials {\n constructor() {\n this.username = null;\n this.password = null;\n this.ttl = null;\n this.uris = null;\n }\n}\nexports.default = MeetingSessionTURNCredentials;\n//# sourceMappingURL=MeetingSessionTURNCredentials.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ServerSideNetworkAdaption_1 = __importDefault(require(\"./ServerSideNetworkAdaption\"));\n/**\n * [[SignalingClientJoin]] contains settings for the Join SignalFrame.\n */\nclass SignalingClientJoin {\n /**\n * Initializes a SignalingClientJoin with the given properties.\n * @param applicationMetadata [[ApplicationMetadata]].\n */\n constructor(applicationMetadata) {\n this.applicationMetadata = applicationMetadata;\n this.serverSideNetworkAdaption = ServerSideNetworkAdaption_1.default.Default;\n this.supportedServerSideNetworkAdaptions = [];\n this.wantsAllTemporalLayersInIndex = false;\n this.disablePeriodicKeyframeRequestOnContentSender = false;\n }\n}\nexports.default = SignalingClientJoin;\n//# sourceMappingURL=SignalingClientJoin.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionStatus_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatus\"));\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst MeetingSessionTURNCredentials_1 = __importDefault(require(\"../meetingsession/MeetingSessionTURNCredentials\"));\nconst ServerSideNetworkAdaption_1 = __importStar(require(\"../signalingclient/ServerSideNetworkAdaption\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingClientJoin_1 = __importDefault(require(\"../signalingclient/SignalingClientJoin\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[JoinAndReceiveIndexTask]] sends the JoinFrame and asynchronously waits for the server to send the [[SdkIndexFrame]].\n * It should run with the [[TimeoutTask]] as the subtask so it can get canceled after timeout.\n */\nclass JoinAndReceiveIndexTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'JoinAndReceiveIndexTask';\n this.taskCanceler = null;\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const indexFrame = yield new Promise((resolve, reject) => {\n const context = this.context;\n context.turnCredentials = null;\n class IndexFrameInterceptor {\n constructor(signalingClient) {\n this.signalingClient = signalingClient;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n reject(new Error(`JoinAndReceiveIndexTask got canceled while waiting for SdkIndexFrame`));\n }\n handleSignalingClientEvent(event) {\n if (event.type === SignalingClientEventType_1.default.WebSocketClosed) {\n let message = `The signaling connection was closed with code ${event.closeCode} and reason: ${event.closeReason}`;\n context.logger.warn(message);\n let statusCode = MeetingSessionStatusCode_1.default.SignalingBadRequest;\n if (event.closeCode === 4410) {\n message = 'The meeting already ended.';\n context.logger.warn(message);\n statusCode = MeetingSessionStatusCode_1.default.MeetingEnded;\n }\n else if (event.closeCode >= 4500 && event.closeCode < 4600) {\n statusCode = MeetingSessionStatusCode_1.default.SignalingInternalServerError;\n }\n context.audioVideoController.handleMeetingSessionStatus(new MeetingSessionStatus_1.default(statusCode), new Error(message));\n return;\n }\n if (event.type !== SignalingClientEventType_1.default.ReceivedSignalFrame) {\n return;\n }\n if (event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.JOIN_ACK) {\n // @ts-ignore: force cast to SdkJoinAckFrame\n const joinAckFrame = event.message.joinack;\n if (!joinAckFrame) {\n // This should realistically never happen\n context.audioVideoController.handleMeetingSessionStatus(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.SignalingRequestFailed), new Error(`Join ACK message did not include expected frame`));\n return;\n }\n if (joinAckFrame.videoSubscriptionLimit) {\n context.videoSubscriptionLimit = joinAckFrame.videoSubscriptionLimit;\n }\n context.serverSupportsCompression = joinAckFrame.wantsCompressedSdp;\n if (joinAckFrame.defaultServerSideNetworkAdaption !== undefined &&\n joinAckFrame.defaultServerSideNetworkAdaption !== ServerSideNetworkAdaption_1.default.Default &&\n context.videoDownlinkBandwidthPolicy.setServerSideNetworkAdaption !== undefined) {\n const defaultServerSideNetworkAdaption = joinAckFrame.defaultServerSideNetworkAdaption;\n context.logger.info(`Overriding server side network adaption value to ${defaultServerSideNetworkAdaption}`);\n context.videoDownlinkBandwidthPolicy.setServerSideNetworkAdaption(ServerSideNetworkAdaption_1.convertServerSideNetworkAdaptionEnumFromSignaled(defaultServerSideNetworkAdaption));\n }\n if (joinAckFrame && joinAckFrame.turnCredentials) {\n context.turnCredentials = new MeetingSessionTURNCredentials_1.default();\n context.turnCredentials.username = joinAckFrame.turnCredentials.username;\n context.turnCredentials.password = joinAckFrame.turnCredentials.password;\n context.turnCredentials.ttl = joinAckFrame.turnCredentials.ttl;\n context.turnCredentials.uris = joinAckFrame.turnCredentials.uris\n .map((uri) => {\n return context.meetingSessionConfiguration.urls.urlRewriter(uri);\n })\n .filter((uri) => {\n return !!uri;\n });\n }\n else {\n context.logger.error('missing TURN credentials in JoinAckFrame');\n }\n return;\n }\n if (event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.INDEX) {\n return;\n }\n this.signalingClient.removeObserver(this);\n // @ts-ignore: force cast to SdkIndexFrame\n const indexFrame = event.message.index;\n resolve(indexFrame);\n }\n }\n const interceptor = new IndexFrameInterceptor(this.context.signalingClient);\n this.context.signalingClient.registerObserver(interceptor);\n this.taskCanceler = interceptor;\n // reset SDP compression state\n this.context.previousSdpAnswerAsString = '';\n this.context.previousSdpOffer = null;\n this.context.serverSupportsCompression = false;\n const join = new SignalingClientJoin_1.default(this.context.meetingSessionConfiguration.applicationMetadata);\n if (this.context.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption !== undefined &&\n this.context.videoDownlinkBandwidthPolicy.supportedServerSideNetworkAdaptions !== undefined) {\n join.serverSideNetworkAdaption = this.context.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption();\n join.supportedServerSideNetworkAdaptions = this.context.videoDownlinkBandwidthPolicy.supportedServerSideNetworkAdaptions();\n }\n if (this.context.videoDownlinkBandwidthPolicy.wantsAllTemporalLayersInIndex !== undefined) {\n join.wantsAllTemporalLayersInIndex = this.context.videoDownlinkBandwidthPolicy.wantsAllTemporalLayersInIndex();\n }\n join.disablePeriodicKeyframeRequestOnContentSender = this.context.meetingSessionConfiguration.disablePeriodicKeyframeRequestOnContentSender;\n this.context.signalingClient.join(join);\n });\n this.context.logger.info(`received first index ${JSON.stringify(indexFrame)}`);\n // We currently don't bother ingesting this into the same places as `ReceiveVideoStreamIndexTask` as we synchronously attempt a first subscribe\n // after this task completes and the state isn't quite in the right place to make it work without some refactoring. However that\n // means that we will always have an initial subscribe without any received videos.\n this.context.indexFrame = indexFrame;\n });\n }\n}\nexports.default = JoinAndReceiveIndexTask;\n//# sourceMappingURL=JoinAndReceiveIndexTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[LeaveAndReceiveLeaveAckTask]] sends a Leave frame and waits for a LeaveAck.\n */\nclass LeaveAndReceiveLeaveAckTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'LeaveAndReceiveLeaveAckTask';\n this.taskCanceler = null;\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.context.signalingClient.ready()) {\n this.context.signalingClient.leave();\n this.context.logger.info('sent leave');\n yield this.receiveLeaveAck();\n }\n });\n }\n receiveLeaveAck() {\n return new Promise((resolve, reject) => {\n class Interceptor {\n constructor(signalingClient, logger) {\n this.signalingClient = signalingClient;\n this.logger = logger;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n reject(new Error(`LeaveAndReceiveLeaveAckTask got canceled while waiting for IndexFrame`));\n }\n handleSignalingClientEvent(event) {\n if (event.isConnectionTerminated()) {\n this.signalingClient.removeObserver(this);\n this.logger.info('LeaveAndReceiveLeaveAckTask connection terminated');\n // don't treat this as an error\n resolve();\n return;\n }\n if (event.type === SignalingClientEventType_1.default.ReceivedSignalFrame &&\n event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.LEAVE_ACK) {\n this.signalingClient.removeObserver(this);\n this.logger.info('got leave ack');\n resolve();\n }\n }\n }\n const interceptor = new Interceptor(this.context.signalingClient, this.context.logger);\n this.taskCanceler = interceptor;\n this.context.signalingClient.registerObserver(interceptor);\n });\n }\n}\nexports.default = LeaveAndReceiveLeaveAckTask;\n//# sourceMappingURL=LeaveAndReceiveLeaveAckTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\nclass ListenForVolumeIndicatorsTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'ListenForVolumeIndicatorsTask';\n this.realtimeMuteAndUnmuteHandler = (muted) => {\n this.context.signalingClient.mute(muted);\n };\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.removableObservers.push(this);\n this.context.signalingClient.registerObserver(this);\n this.context.realtimeController.realtimeSubscribeToMuteAndUnmuteLocalAudio(this.realtimeMuteAndUnmuteHandler);\n });\n }\n removeObserver() {\n this.context.realtimeController.realtimeUnsubscribeToMuteAndUnmuteLocalAudio(this.realtimeMuteAndUnmuteHandler);\n this.context.signalingClient.removeObserver(this);\n }\n handleSignalingClientEvent(event) {\n if (event.type !== SignalingClientEventType_1.default.ReceivedSignalFrame) {\n return;\n }\n if (event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.AUDIO_STREAM_ID_INFO) {\n // @ts-ignore\n const audioStreamIdInfo = event.message.audioStreamIdInfo;\n this.context.volumeIndicatorAdapter.sendRealtimeUpdatesForAudioStreamIdInfo(audioStreamIdInfo);\n }\n else if (event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.AUDIO_METADATA) {\n // @ts-ignore\n const audioMetadata = event.message.audioMetadata;\n this.context.volumeIndicatorAdapter.sendRealtimeUpdatesForAudioMetadata(audioMetadata);\n }\n }\n}\nexports.default = ListenForVolumeIndicatorsTask;\n//# sourceMappingURL=ListenForVolumeIndicatorsTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseConnectionHealthPolicy_1 = __importDefault(require(\"./BaseConnectionHealthPolicy\"));\nclass ReconnectionHealthPolicy extends BaseConnectionHealthPolicy_1.default {\n constructor(logger, configuration, data) {\n super(configuration, data, 'Reconnection Health');\n this.logger = logger;\n this.audioDelayPointsOverMaximum = 0;\n ReconnectionHealthPolicy.CONNECTION_UNHEALTHY_THRESHOLD =\n configuration.connectionUnhealthyThreshold;\n ReconnectionHealthPolicy.CONNECTION_WAIT_TIME_MS = configuration.connectionWaitTimeMs;\n ReconnectionHealthPolicy.MISSED_PONGS_THRESHOLD = configuration.missedPongsUpperThreshold;\n ReconnectionHealthPolicy.MAXIMUM_AUDIO_DELAY_MS = configuration.maximumAudioDelayMs;\n ReconnectionHealthPolicy.MAXIMUM_AUDIO_DELAY_DATA_POINTS =\n configuration.maximumAudioDelayDataPoints;\n }\n health() {\n const connectionStartedRecently = this.currentData.isConnectionStartRecent(ReconnectionHealthPolicy.CONNECTION_WAIT_TIME_MS);\n if (connectionStartedRecently) {\n return 1;\n }\n const noPacketsReceivedRecently = this.currentData.consecutiveStatsWithNoPackets >=\n ReconnectionHealthPolicy.CONNECTION_UNHEALTHY_THRESHOLD;\n const missedPongsRecently = this.currentData.consecutiveMissedPongs >= ReconnectionHealthPolicy.MISSED_PONGS_THRESHOLD;\n if (this.currentData.audioSpeakerDelayMs > ReconnectionHealthPolicy.MAXIMUM_AUDIO_DELAY_MS) {\n this.audioDelayPointsOverMaximum += 1;\n }\n else {\n this.audioDelayPointsOverMaximum = 0;\n }\n const hasBadAudioDelay = this.audioDelayPointsOverMaximum > ReconnectionHealthPolicy.MAXIMUM_AUDIO_DELAY_DATA_POINTS;\n if (hasBadAudioDelay) {\n this.audioDelayPointsOverMaximum = 0;\n }\n const needsReconnect = noPacketsReceivedRecently || missedPongsRecently || hasBadAudioDelay;\n if (needsReconnect) {\n this.logger.warn(`reconnection recommended due to: no packets received: ${noPacketsReceivedRecently}, missed pongs: ${missedPongsRecently}, bad audio delay: ${hasBadAudioDelay}`);\n return 0;\n }\n return 1;\n }\n}\nexports.default = ReconnectionHealthPolicy;\n//# sourceMappingURL=ReconnectionHealthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseConnectionHealthPolicy_1 = __importDefault(require(\"./BaseConnectionHealthPolicy\"));\nclass SendingAudioFailureConnectionHealthPolicy extends BaseConnectionHealthPolicy_1.default {\n constructor(logger, configuration, data) {\n super(configuration, data, 'Sending Audio Health');\n this.logger = logger;\n this.sendingAudioFailureSamplesToConsider =\n configuration.sendingAudioFailureSamplesToConsider > 0\n ? configuration.sendingAudioFailureSamplesToConsider\n : 1;\n this.sendingAudioFailureInitialWaitTimeMs = configuration.sendingAudioFailureInitialWaitTimeMs;\n this.maximumTimesToWarn = configuration.maximumTimesToWarn;\n this.coolDownTimeMs = configuration.cooldownTimeMs;\n this.lastWarnTimestampMs = 0;\n this.warnCount = 0;\n }\n isSendingAudioUnhealthy() {\n const hasEnoughTimeElapsedToEvaluateStatus = !this.currentData.isConnectionStartRecent(this.sendingAudioFailureInitialWaitTimeMs);\n const areAudioPacketsNotBeingSent = this.currentData.consecutiveStatsWithNoAudioPacketsSent >=\n this.sendingAudioFailureSamplesToConsider;\n return hasEnoughTimeElapsedToEvaluateStatus && areAudioPacketsNotBeingSent;\n }\n health() {\n if (this.isSendingAudioUnhealthy()) {\n const didWarnRecently = Date.now() - this.lastWarnTimestampMs < this.coolDownTimeMs;\n if (this.currentHealth > this.minimumHealth() && !didWarnRecently) {\n this.logger.warn(`Sending Audio is unhealthy for ${this.sendingAudioFailureSamplesToConsider} seconds consecutively.`);\n this.warnCount++;\n if (this.warnCount > this.maximumTimesToWarn) {\n this.logger.warn('SendingAudioFailure health policy maximum warnings breached. Falling back to reporting healthy.');\n return this.maximumHealth();\n }\n this.lastWarnTimestampMs = Date.now();\n return this.minimumHealth();\n }\n else {\n return this.currentHealth;\n }\n }\n return this.maximumHealth();\n }\n}\nexports.default = SendingAudioFailureConnectionHealthPolicy;\n//# sourceMappingURL=SendingAudioFailureConnectionHealthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseConnectionHealthPolicy_1 = __importDefault(require(\"./BaseConnectionHealthPolicy\"));\nclass UnusableAudioWarningConnectionHealthPolicy extends BaseConnectionHealthPolicy_1.default {\n constructor(configuration, data) {\n super(configuration, data, 'Unusable Audio Warning');\n this.coolDownTimeMs = configuration.cooldownTimeMs;\n this.pastSamplesToConsider = configuration.pastSamplesToConsider;\n this.fractionalLoss = configuration.fractionalLoss;\n this.packetsExpected = configuration.packetsExpected;\n this.maximumTimesToWarn = configuration.maximumTimesToWarn;\n this.lastWarnTimestampMs = 0;\n this.warnCount = 0;\n }\n calculateFractionalLoss() {\n if (this.currentData.packetsReceivedInLastMinute.length < this.pastSamplesToConsider) {\n return 0;\n }\n const samplesToConsider = this.pastSamplesToConsider;\n const totalPacketsExpected = samplesToConsider * this.packetsExpected;\n let totalPacketsReceived = 0;\n for (let i = 0; i < samplesToConsider; i++) {\n totalPacketsReceived += this.currentData.packetsReceivedInLastMinute[i];\n }\n return Math.min(Math.max(1 - totalPacketsReceived / totalPacketsExpected, 0), 1);\n }\n health() {\n const warnedRecently = Date.now() - this.lastWarnTimestampMs < this.coolDownTimeMs;\n if (warnedRecently) {\n return this.currentHealth;\n }\n const hasHadHighPacketLoss = this.calculateFractionalLoss() >= this.fractionalLoss;\n if (hasHadHighPacketLoss) {\n if (this.currentHealth !== 0) {\n this.lastWarnTimestampMs = Date.now();\n this.warnCount++;\n if (this.warnCount > this.maximumTimesToWarn) {\n return 1;\n }\n }\n return 0;\n }\n return 1;\n }\n}\nexports.default = UnusableAudioWarningConnectionHealthPolicy;\n//# sourceMappingURL=UnusableAudioWarningConnectionHealthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ClientMetricReportDirection_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportDirection\"));\nconst ClientMetricReportMediaType_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportMediaType\"));\nconst ReconnectionHealthPolicy_1 = __importDefault(require(\"../connectionhealthpolicy/ReconnectionHealthPolicy\"));\nconst SendingAudioFailureConnectionHealthPolicy_1 = __importDefault(require(\"../connectionhealthpolicy/SendingAudioFailureConnectionHealthPolicy\"));\nconst UnusableAudioWarningConnectionHealthPolicy_1 = __importDefault(require(\"../connectionhealthpolicy/UnusableAudioWarningConnectionHealthPolicy\"));\nconst MeetingSessionStatus_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatus\"));\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_1 = require(\"../signalingprotocol/SignalingProtocol\");\nconst AudioLogEvent_1 = __importDefault(require(\"../statscollector/AudioLogEvent\"));\nconst Types_1 = require(\"../utils/Types\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[MonitorTask]] monitors connections using SignalingAndMetricsConnectionMonitor.\n */\nclass MonitorTask extends BaseTask_1.default {\n constructor(context, connectionHealthPolicyConfiguration, initialConnectionHealthData) {\n super(context.logger);\n this.context = context;\n this.initialConnectionHealthData = initialConnectionHealthData;\n this.taskName = 'MonitorTask';\n this.prevSignalStrength = 1;\n this.currentAvailableStreamAvgBitrates = null;\n this.hasSignalingError = false;\n this.presenceHandlerCalled = false;\n // See comment above invocation of `pauseResubscribeCheck` in `DefaultAudioVideoController`\n // for explanation.\n this.isResubscribeCheckPaused = false;\n this.pendingMetricsReport = undefined;\n this.isMeetingConnected = false;\n this.checkAndSendWeakSignalEvent = (signalStrength) => {\n const isCurrentSignalBad = signalStrength < 1;\n const isPrevSignalBad = this.prevSignalStrength < 1;\n const signalStrengthEventType = isCurrentSignalBad\n ? !isPrevSignalBad\n ? AudioLogEvent_1.default.RedmicStartLoss\n : null\n : isPrevSignalBad\n ? AudioLogEvent_1.default.RedmicEndLoss\n : null;\n if (signalStrengthEventType) {\n this.context.statsCollector.logAudioEvent(signalStrengthEventType);\n }\n this.prevSignalStrength = signalStrength;\n };\n this.realtimeFatalErrorCallback = (error) => {\n this.logger.error(`realtime error: ${error}: ${error.stack}`);\n this.context.audioVideoController.handleMeetingSessionStatus(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.RealtimeApiFailed), error);\n };\n this.realtimeAttendeeIdPresenceHandler = (presentAttendeeId, present) => {\n var _a;\n const attendeeId = this.context.meetingSessionConfiguration.credentials.attendeeId;\n this.logger.info(`attendeePresenceReceived: ${attendeeId}`);\n if (attendeeId === presentAttendeeId && present && !this.presenceHandlerCalled) {\n this.presenceHandlerCalled = true;\n this.context.attendeePresenceDurationMs = Date.now() - this.context.startAudioVideoTimestamp;\n (_a = this.context.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('attendeePresenceReceived', {\n attendeePresenceDurationMs: this.context.attendeePresenceDurationMs,\n });\n }\n };\n this.generateBaseAudioVideoEventAttributes = () => {\n const { signalingOpenDurationMs, startTimeMs, iceGatheringDurationMs, attendeePresenceDurationMs, meetingStartDurationMs, } = this.context;\n return {\n meetingDurationMs: startTimeMs === null ? 0 : Math.round(Date.now() - startTimeMs),\n signalingOpenDurationMs,\n iceGatheringDurationMs,\n attendeePresenceDurationMs,\n meetingStartDurationMs,\n };\n };\n this.generateAudioVideoEventAttributesForReceivingAudioDropped = () => {\n const baseAttributes = this.generateBaseAudioVideoEventAttributes();\n return Object.assign(Object.assign({}, baseAttributes), { maxVideoTileCount: this.context.maxVideoTileCount, poorConnectionCount: this.context.poorConnectionCount });\n };\n this.reconnectionHealthPolicy = new ReconnectionHealthPolicy_1.default(context.logger, Object.assign({}, connectionHealthPolicyConfiguration), this.initialConnectionHealthData.clone());\n this.unusableAudioWarningHealthPolicy = new UnusableAudioWarningConnectionHealthPolicy_1.default(Object.assign({}, connectionHealthPolicyConfiguration), this.initialConnectionHealthData.clone());\n this.sendingAudioFailureHealthPolicy = new SendingAudioFailureConnectionHealthPolicy_1.default(context.logger, Object.assign({}, connectionHealthPolicyConfiguration), this.initialConnectionHealthData.clone());\n }\n removeObserver() {\n this.context.audioVideoController.removeObserver(this);\n this.context.realtimeController.realtimeUnsubscribeToFatalError(this.realtimeFatalErrorCallback);\n this.context.realtimeController.realtimeUnsubscribeToLocalSignalStrengthChange(this.checkAndSendWeakSignalEvent);\n this.context.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(this.realtimeAttendeeIdPresenceHandler);\n this.context.signalingClient.removeObserver(this);\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.removableObservers.push(this);\n this.context.audioVideoController.addObserver(this);\n this.context.realtimeController.realtimeSubscribeToFatalError(this.realtimeFatalErrorCallback);\n this.context.realtimeController.realtimeSubscribeToLocalSignalStrengthChange(this.checkAndSendWeakSignalEvent);\n this.context.realtimeController.realtimeSubscribeToAttendeeIdPresence(this.realtimeAttendeeIdPresenceHandler);\n this.context.connectionMonitor.start();\n this.context.statsCollector.start(this.context.signalingClient, this.context.videoStreamIndex);\n this.context.signalingClient.registerObserver(this);\n });\n }\n pauseResubscribeCheck() {\n this.isResubscribeCheckPaused = true;\n }\n resumeResubscribeCheck() {\n if (!this.isResubscribeCheckPaused) {\n // Do not recheck subcribe if it wasn't paused to begin with.\n return;\n }\n this.isResubscribeCheckPaused = false;\n if (this.pendingMetricsReport) {\n this.context.logger.info('Resuming resubscribe check with pending metrics report');\n if (this.checkResubscribe(this.pendingMetricsReport)) {\n this.context.audioVideoController.update({ needsRenegotiation: false });\n }\n }\n }\n videoTileDidUpdate(_tileState) {\n this.context.maxVideoTileCount = Math.max(this.context.maxVideoTileCount, this.context.videoTileController.getAllVideoTiles().length);\n }\n checkResubscribe(clientMetricReport) {\n if (this.isResubscribeCheckPaused) {\n this.context.logger.info('Resubscribe check is paused, setting incoming client metric report as pending');\n this.pendingMetricsReport = clientMetricReport;\n return;\n }\n else {\n this.pendingMetricsReport = undefined;\n }\n const metricReport = clientMetricReport.getObservableMetrics();\n const availableSendBandwidth = metricReport.availableOutgoingBitrate;\n const nackCountPerSecond = metricReport.nackCountReceivedPerSecond;\n let needResubscribe = false;\n this.context.videoDownlinkBandwidthPolicy.updateMetrics(clientMetricReport);\n const resubscribeForDownlink = this.context.videoDownlinkBandwidthPolicy.wantsResubscribe();\n needResubscribe = needResubscribe || resubscribeForDownlink;\n if (resubscribeForDownlink) {\n const videoSubscriptionIdSet = this.context.videoDownlinkBandwidthPolicy.chooseSubscriptions();\n // Same logic as in `ReceiveVideoStreamIndexTask`, immediately truncating rather then truncating on subscribe\n // avoids any issues with components (e.g. transceiver controller) along the way.\n this.context.videosToReceive = videoSubscriptionIdSet.truncate(this.context.videoSubscriptionLimit);\n if (videoSubscriptionIdSet.size() > this.context.videosToReceive.size()) {\n this.logger.warn(`Video receive limit exceeded. Limiting the videos to ${this.context.videosToReceive.size()}. Please consider using AllHighestVideoBandwidthPolicy or VideoPriorityBasedPolicy along with chooseRemoteVideoSources api to select the video sources to be displayed.`);\n }\n this.logger.info(`trigger resubscribe for down=${resubscribeForDownlink}; videosToReceive=[${this.context.videosToReceive.array()}]`);\n }\n if (this.context.videoTileController.hasStartedLocalVideoTile()) {\n this.context.videoUplinkBandwidthPolicy.updateConnectionMetric({\n uplinkKbps: availableSendBandwidth / 1000,\n nackCountPerSecond: nackCountPerSecond,\n });\n const resubscribeForUplink = this.context.videoUplinkBandwidthPolicy.wantsResubscribe();\n needResubscribe = needResubscribe || resubscribeForUplink;\n if (resubscribeForUplink) {\n this.logger.info(`trigger resubscribe for up=${resubscribeForUplink}; videosToReceive=[${this.context.videosToReceive.array()}]`);\n this.context.videoUplinkBandwidthPolicy.chooseEncodingParameters();\n }\n }\n return needResubscribe;\n }\n metricsDidReceive(clientMetricReport) {\n if (this.checkResubscribe(clientMetricReport)) {\n this.context.audioVideoController.update({ needsRenegotiation: false });\n }\n if (!this.currentAvailableStreamAvgBitrates) {\n return;\n }\n const streamMetricReport = clientMetricReport.streamMetricReports;\n const downlinkVideoStream = new Map();\n // TODO: move those logic to stats collector.\n for (const ssrc in streamMetricReport) {\n if (streamMetricReport[ssrc].mediaType === ClientMetricReportMediaType_1.default.VIDEO &&\n streamMetricReport[ssrc].direction === ClientMetricReportDirection_1.default.DOWNSTREAM) {\n downlinkVideoStream.set(streamMetricReport[ssrc].streamId, streamMetricReport[ssrc]);\n }\n }\n }\n connectionHealthDidChange(connectionHealthData) {\n if (connectionHealthData.consecutiveMissedPongs === 0) {\n if (this.context.reconnectController) {\n this.context.reconnectController.setLastActiveTimestampMs(Date.now());\n }\n }\n this.applyHealthPolicy(this.reconnectionHealthPolicy, connectionHealthData, () => {\n this.context.audioVideoController.handleMeetingSessionStatus(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.ConnectionHealthReconnect), null);\n });\n this.applyHealthPolicy(this.unusableAudioWarningHealthPolicy, connectionHealthData, () => {\n var _a;\n this.context.poorConnectionCount += 1;\n const attributes = this.generateAudioVideoEventAttributesForReceivingAudioDropped();\n (_a = this.context.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('receivingAudioDropped', attributes);\n if (this.context.videoTileController.haveVideoTilesWithStreams()) {\n this.context.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.connectionDidSuggestStopVideo).map(f => f.bind(observer)());\n });\n }\n else {\n this.context.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.connectionDidBecomePoor).map(f => f.bind(observer)());\n });\n }\n }, () => {\n this.context.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.connectionDidBecomeGood).map(f => f.bind(observer)());\n });\n });\n if (this.isMeetingConnected) {\n this.applyHealthPolicy(this.sendingAudioFailureHealthPolicy, connectionHealthData, () => {\n var _a;\n const attributes = this.generateBaseAudioVideoEventAttributes();\n (_a = this.context.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('sendingAudioFailed', attributes);\n }, () => {\n var _a;\n const attributes = this.generateBaseAudioVideoEventAttributes();\n (_a = this.context.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('sendingAudioRecovered', attributes);\n });\n }\n }\n audioVideoDidStart() {\n this.isMeetingConnected = true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n audioVideoDidStartConnecting(reconnecting) {\n // The expectation here is that the flag will be set to true again when audioVideoDidStart() is eventually called.\n this.isMeetingConnected = false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n audioVideoDidStop(sessionStatus) {\n this.isMeetingConnected = false;\n }\n applyHealthPolicy(healthPolicy, connectionHealthData, unhealthyCallback, healthyCallback) {\n healthPolicy.update(connectionHealthData);\n const healthValue = healthPolicy.healthIfChanged();\n if (healthValue !== null) {\n this.logger.info(`${healthPolicy.name} value is now ${healthValue}`);\n if (healthValue <= healthPolicy.minimumHealth()) {\n Types_1.Maybe.of(unhealthyCallback).map(f => f.bind(this)());\n }\n else {\n Types_1.Maybe.of(healthyCallback).map(f => f.bind(this)());\n }\n }\n }\n handleBitrateFrame(bitrates) {\n this.currentAvailableStreamAvgBitrates = bitrates;\n if (bitrates.serverAvailableOutgoingBitrate > 0) {\n this.logger.info(`Received server side estimation of available incoming bitrate ${bitrates.serverAvailableOutgoingBitrate}kbps`);\n // This value will be included in the 'Bitrates' signaling message if we are using\n // server side remote video quality adaption, since if that is the case we will\n // be using TWCC and will therefore not likely have an estimate on the client\n // for available incoming bitrate\n this.context.statsCollector.overrideObservableMetric('availableIncomingBitrate', bitrates.serverAvailableOutgoingBitrate * 1000);\n }\n }\n handleSignalingClientEvent(event) {\n var _a;\n // Don't add two or more consecutive \"signalingDropped\" states.\n if ((event.type === SignalingClientEventType_1.default.WebSocketClosed &&\n (event.closeCode === 4410 || (event.closeCode >= 4500 && event.closeCode < 4600))) ||\n event.type === SignalingClientEventType_1.default.WebSocketError ||\n event.type === SignalingClientEventType_1.default.WebSocketFailed) {\n if (!this.hasSignalingError) {\n const attributes = this.generateAudioVideoEventAttributesForReceivingAudioDropped();\n (_a = this.context.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('signalingDropped', attributes);\n this.hasSignalingError = true;\n }\n }\n else if (event.type === SignalingClientEventType_1.default.WebSocketOpen) {\n this.hasSignalingError = false;\n }\n if (event.type === SignalingClientEventType_1.default.ReceivedSignalFrame) {\n if (event.message.type === SignalingProtocol_1.SdkSignalFrame.Type.NOTIFICATION) {\n switch (event.message.notification.level) {\n case SignalingProtocol_1.SdkNotificationFrame.NotificationLevel.INFO:\n this.logger.info(`Received notification from server: ${event.message.notification.message}`);\n break;\n case SignalingProtocol_1.SdkNotificationFrame.NotificationLevel.WARNING:\n this.logger.warn(`Received warning from server: ${event.message.notification.message}`);\n break;\n case SignalingProtocol_1.SdkNotificationFrame.NotificationLevel.ERROR:\n this.logger.error(`Received error from server: ${event.message.notification.message}`);\n break;\n default:\n this.logger.error(`Received notification from server with unknown level ${event.message.notification.level}: ${event.message.notification.message}`);\n break;\n }\n return;\n }\n if (!!event.message.bitrates) {\n const bitrateFrame = event.message.bitrates;\n this.context.videoStreamIndex.integrateBitratesFrame(bitrateFrame);\n this.context.videoDownlinkBandwidthPolicy.updateIndex(this.context.videoStreamIndex);\n this.handleBitrateFrame(event.message.bitrates);\n }\n const status = MeetingSessionStatus_1.default.fromSignalFrame(event.message);\n // Primary meeting join ack status will be handled by `PromoteToPrimaryMeetingTask`\n if (event.message.type !== SignalingProtocol_1.SdkSignalFrame.Type.PRIMARY_MEETING_JOIN_ACK &&\n status.statusCode() !== MeetingSessionStatusCode_1.default.OK) {\n this.context.audioVideoController.handleMeetingSessionStatus(status, null);\n }\n }\n }\n}\nexports.default = MonitorTask;\n//# sourceMappingURL=MonitorTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n * [[SignalingClientConnectionRequest]] represents an connection request.\n */\nclass SignalingClientConnectionRequest {\n /** Creates a request with the given URL, conference id, and join token.\n *\n * @param signalingURL The URL of the signaling proxy.\n * @param joinToken The join token that will authenticate the connection.\n */\n constructor(signalingURL, joinToken) {\n this.signalingURL = signalingURL;\n this.joinToken = joinToken;\n }\n /** Gets the signaling URL representing this request.*/\n url() {\n return (this.signalingURL + '?X-Chime-Control-Protocol-Version=3&X-Amzn-Chime-Send-Close-On-Error=1');\n }\n /** Gets the protocols associated with this request.*/\n protocols() {\n return ['_aws_wt_session', this.joinToken];\n }\n}\nexports.default = SignalingClientConnectionRequest;\n//# sourceMappingURL=SignalingClientConnectionRequest.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientConnectionRequest_1 = __importDefault(require(\"../signalingclient/SignalingClientConnectionRequest\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\nclass OpenSignalingConnectionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'OpenSignalingConnectionTask';\n this.taskCanceler = null;\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const configuration = this.context.meetingSessionConfiguration;\n this.context.signalingClient.openConnection(new SignalingClientConnectionRequest_1.default(configuration.urls.signalingURL, configuration.credentials.joinToken));\n const startTimeMs = Date.now();\n try {\n yield new Promise((resolve, reject) => {\n class WebSocketOpenInterceptor {\n constructor(signalingClient) {\n this.signalingClient = signalingClient;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n reject(new Error(`OpenSignalingConnectionTask got canceled while waiting to open signaling connection`));\n }\n handleSignalingClientEvent(event) {\n switch (event.type) {\n case SignalingClientEventType_1.default.WebSocketOpen:\n this.signalingClient.removeObserver(this);\n resolve();\n break;\n case SignalingClientEventType_1.default.WebSocketFailed:\n this.signalingClient.removeObserver(this);\n reject(new Error('WebSocket connection failed'));\n break;\n }\n }\n }\n const interceptor = new WebSocketOpenInterceptor(this.context.signalingClient);\n this.context.signalingClient.registerObserver(interceptor);\n this.taskCanceler = interceptor;\n });\n }\n catch (error) {\n throw error;\n }\n finally {\n this.context.signalingOpenDurationMs = Math.round(Date.now() - startTimeMs);\n this.logger.info(`Opening signaling connection took ${this.context.signalingOpenDurationMs} ms`);\n }\n });\n }\n}\nexports.default = OpenSignalingConnectionTask;\n//# sourceMappingURL=OpenSignalingConnectionTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[ParallelGroupTask]] runs a set of tasks in parallel. When canceled, it\n * stops any currently running tasks.\n */\nclass ParallelGroupTask extends BaseTask_1.default {\n constructor(logger, taskName, tasksToRunParallel) {\n super(logger);\n this.taskName = taskName;\n this.tasksToRunParallel = tasksToRunParallel;\n for (const task of tasksToRunParallel) {\n task.setParent(this);\n }\n }\n cancel() {\n for (const task of this.tasksToRunParallel) {\n this.logger.info(`canceling parallel group task ${this.name()} subtask ${task.name()}`);\n task.cancel();\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const taskResults = [];\n for (const task of this.tasksToRunParallel) {\n this.logger.info(`parallel group task ${this.name()} running subtask ${task.name()}`);\n taskResults.push(task.run());\n }\n const failures = [];\n for (let i = 0; i < taskResults.length; i++) {\n try {\n yield taskResults[i];\n }\n catch (err) {\n failures.push(`task ${this.tasksToRunParallel[i].name()} failed: ${err.message}`);\n }\n this.logger.info(`parallel group task ${this.name()} completed subtask ${this.tasksToRunParallel[i].name()}`);\n }\n if (failures.length > 0) {\n const failureMessage = failures.join(', ');\n this.logAndThrow(`parallel group task ${this.name()} failed for tasks: ${failureMessage}`);\n }\n this.logger.info(`parallel group task ${this.name()} completed`);\n });\n }\n}\nexports.default = ParallelGroupTask;\n//# sourceMappingURL=ParallelGroupTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst __1 = require(\"..\");\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[PromoteToPrimaryMeetingTask]] sends a `SdkSignalFrame.PrimaryMeetingJoin` and waits for\n * a `SdkSignalFrame.PrimaryMeetingJoinAck` frame.\n */\nclass PromoteToPrimaryMeetingTask extends BaseTask_1.default {\n constructor(context, credentials, completionCallback) {\n super(context.logger);\n this.context = context;\n this.credentials = credentials;\n this.completionCallback = completionCallback;\n this.taskName = 'PromoteToPrimaryMeetingTask';\n this.taskCanceler = null;\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.context.signalingClient.ready()) {\n this.context.signalingClient.promoteToPrimaryMeeting(this.credentials);\n this.context.logger.info('Sent request to join primary meeting');\n yield this.receivePrimaryMeetingJoinAck();\n }\n else {\n this.completionCallback(new __1.MeetingSessionStatus(__1.MeetingSessionStatusCode.SignalingRequestFailed));\n }\n });\n }\n receivePrimaryMeetingJoinAck() {\n return new Promise((resolve, _) => {\n class Interceptor {\n constructor(signalingClient, completionCallback, logger) {\n this.signalingClient = signalingClient;\n this.completionCallback = completionCallback;\n this.logger = logger;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n // Currently only cancel would come from timeout. Should\n // be rare enough (ignoring bugs) that we don't need to bother\n // retrying.\n this.completionCallback(new __1.MeetingSessionStatus(__1.MeetingSessionStatusCode.SignalingRequestFailed));\n resolve();\n }\n handleSignalingClientEvent(event) {\n if (event.isConnectionTerminated()) {\n this.signalingClient.removeObserver(this);\n this.logger.info('PromoteToPrimaryMeetingTask connection terminated');\n // This would happen either in happy or unhappy disconnections. The\n // timing here is rare enough (ignoring bugs) that we don't need to bother\n // retrying the unhappy case.\n this.completionCallback(new __1.MeetingSessionStatus(__1.MeetingSessionStatusCode.SignalingRequestFailed));\n resolve();\n }\n if (event.type === SignalingClientEventType_1.default.ReceivedSignalFrame &&\n event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.PRIMARY_MEETING_JOIN_ACK) {\n this.signalingClient.removeObserver(this);\n this.logger.info('Got a primary meeting join ACK');\n this.completionCallback(__1.MeetingSessionStatus.fromSignalFrame(event.message));\n resolve();\n }\n }\n }\n const interceptor = new Interceptor(this.context.signalingClient, this.completionCallback, this.context.logger);\n this.taskCanceler = interceptor;\n this.context.signalingClient.registerObserver(interceptor);\n });\n }\n}\nexports.default = PromoteToPrimaryMeetingTask;\n//# sourceMappingURL=PromoteToPrimaryMeetingTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[ReceiveAudioInputTask]] acquires an audio input.\n */\nclass ReceiveAudioInputTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'ReceiveAudioInputTask';\n }\n run() {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n if (!((_b = (_a = this.context.meetingSessionConfiguration) === null || _a === void 0 ? void 0 : _a.urls) === null || _b === void 0 ? void 0 : _b.audioHostURL)) {\n this.context.logger.info('No audio connection: not acquiring audio input');\n return;\n }\n if (this.context.activeAudioInput) {\n this.context.logger.info('an active audio input exists');\n return;\n }\n let audioInput;\n try {\n audioInput = yield this.context.mediaStreamBroker.acquireAudioInputStream();\n }\n catch (error) {\n this.context.logger.warn('could not acquire audio input from current device');\n }\n if (audioInput) {\n this.context.activeAudioInput = audioInput;\n }\n else {\n this.context.logger.warn('an audio input is not available');\n }\n });\n }\n}\nexports.default = ReceiveAudioInputTask;\n//# sourceMappingURL=ReceiveAudioInputTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[ReceiveRemoteVideoPauseResume]] receives [[SdkPauseFrame]] from the server side (only if\n * `VideoDownlinkBandwidthPolicy.getServerSideNetworkAdaption()` == `BandwidthProbingAndRemoteVideoQualityAdaption`)\n * which indicates remote video sources that have been paused or resumed and updates [[VideoDownlinkBandwidthPolicy]]\n * and [[VideoTileController]]\n */\nclass ReceiveRemoteVideoPauseResume extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'ReceiveRemoteVideoPauseResume';\n this.serverPausedVideoTileIds = new Set();\n }\n removeObserver() {\n this.context.signalingClient.removeObserver(this);\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.signalingClient.registerObserver(this);\n this.context.removableObservers.push(this);\n });\n }\n handleSignalingClientEvent(event) {\n if (event.type !== SignalingClientEventType_1.default.ReceivedSignalFrame ||\n (event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.PAUSE &&\n event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.RESUME)) {\n return;\n }\n // @ts-ignore: force cast to SdkPauseFrame\n const pauseResumeFrame = event.message.pause;\n const messageType = event.message.type;\n this.context.logger.info(`received new ${messageType === SignalingProtocol_js_1.SdkSignalFrame.Type.PAUSE ? 'pause' : 'resume'} frame: ${JSON.stringify(pauseResumeFrame)}`);\n if (!pauseResumeFrame ||\n this.context.videoTileController.getVideoTileForAttendeeId === undefined ||\n this.context.videoDownlinkBandwidthPolicy.forEachObserver === undefined ||\n this.context.videoStreamIndex.attendeeIdForGroupId === undefined) {\n return;\n }\n const tiles = pauseResumeFrame.groupIds.map((groupId) => {\n const attendeeId = this.context.videoStreamIndex.attendeeIdForGroupId(groupId);\n return this.context.videoTileController.getVideoTileForAttendeeId(attendeeId);\n });\n for (const tile of tiles) {\n if (tile === undefined) {\n continue;\n }\n if (messageType === SignalingProtocol_js_1.SdkSignalFrame.Type.PAUSE) {\n if (!tile.state().paused) {\n this.serverPausedVideoTileIds.add(tile.id());\n this.context.videoDownlinkBandwidthPolicy.forEachObserver((observer) => {\n observer.tileWillBePausedByDownlinkPolicy(tile.id());\n });\n // This circumvents the tile controller so it will not send\n // any signaling messages to server side.\n tile.pause();\n }\n }\n else {\n if (tile.state().paused && this.serverPausedVideoTileIds.has(tile.id())) {\n this.serverPausedVideoTileIds.delete(tile.id());\n this.context.videoDownlinkBandwidthPolicy.forEachObserver((observer) => {\n observer.tileWillBeUnpausedByDownlinkPolicy(tile.id());\n });\n // See comment above.\n tile.unpause();\n }\n }\n }\n }\n}\nexports.default = ReceiveRemoteVideoPauseResume;\n//# sourceMappingURL=ReceiveRemoteVideoPauseResumeTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[ReceiveVideoInputTask]] acquires a video input from [[DeviceController]].\n */\nclass ReceiveVideoInputTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'ReceiveVideoInputTask';\n }\n checkAndApplyVideoConstraint(isContentAttendee, mediaStreamTrack, width, height, frameRate) {\n return __awaiter(this, void 0, void 0, function* () {\n const trackSettings = mediaStreamTrack.getSettings();\n let videoQualitySettings;\n if (isContentAttendee) {\n videoQualitySettings = this.context.meetingSessionConfiguration.meetingFeatures\n .contentMaxResolution;\n }\n else {\n videoQualitySettings = this.context.meetingSessionConfiguration.meetingFeatures\n .videoMaxResolution;\n }\n if (width > videoQualitySettings.videoWidth ||\n height > videoQualitySettings.videoHeight ||\n frameRate > videoQualitySettings.videoFrameRate) {\n const constraint = {\n width: { ideal: videoQualitySettings.videoWidth },\n height: { ideal: videoQualitySettings.videoHeight },\n frameRate: { ideal: videoQualitySettings.videoFrameRate },\n };\n this.context.logger.warn(`Video track (content = ${isContentAttendee}) will be constrained to: ${JSON.stringify(constraint)} to remain below configured video quality settings, trackSettings: ${JSON.stringify(trackSettings)}`);\n try {\n yield mediaStreamTrack.applyConstraints(constraint);\n }\n catch (error) {\n this.context.logger.info(`Could not apply constraint for video track (content = ${isContentAttendee})`);\n }\n }\n });\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n // TODO: move videoDuplexMode and videoCaptureAndEncodeParameters to video tile controller\n const receiveEnabled = this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.RX ||\n this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.DUPLEX;\n if (this.context.videoTileController.hasStartedLocalVideoTile()) {\n this.context.videoDuplexMode = receiveEnabled\n ? SignalingProtocol_js_1.SdkStreamServiceType.DUPLEX\n : SignalingProtocol_js_1.SdkStreamServiceType.TX;\n }\n else {\n this.context.videoDuplexMode = receiveEnabled ? SignalingProtocol_js_1.SdkStreamServiceType.RX : 0;\n }\n this.context.videoCaptureAndEncodeParameter = this.context.videoUplinkBandwidthPolicy.chooseCaptureAndEncodeParameters();\n if (!this.context.videoTileController.hasStartedLocalVideoTile()) {\n this.context.logger.info('has not started local video tile');\n if (this.context.activeVideoInput) {\n this.context.activeVideoInput = undefined;\n // Indicate to the stream index that we are no longer sending video. We will\n // no longer be tracking irrelevant local sending bitrates sent via received Bitrate message, nor will\n // we track any spurious allocated stream IDs from the backend.\n this.context.videoStreamIndex.integrateUplinkPolicyDecision([]);\n }\n return;\n }\n // TODO: bind after ICE connection started in case of a failure to resubscribe\n // or perform error handling to unbind video stream.\n const localTile = this.context.videoTileController.getLocalVideoTile();\n let videoInput = undefined;\n try {\n videoInput = yield this.context.mediaStreamBroker.acquireVideoInputStream();\n }\n catch (error) {\n this.context.logger.warn('could not acquire video input from current device');\n this.context.videoTileController.stopLocalVideoTile();\n }\n if (this.context.enableSimulcast) {\n const encodingParams = this.context.videoUplinkBandwidthPolicy.chooseEncodingParameters();\n this.context.videoStreamIndex.integrateUplinkPolicyDecision(Array.from(encodingParams.values()));\n }\n this.context.activeVideoInput = videoInput;\n if (videoInput) {\n const videoTracks = videoInput.getVideoTracks();\n // There can be a race condition when there are several audioVideo.update calls (e.g., calling\n // startLocalVideoTile and stopLocalVideoTile at the same time)\n // that causes the video stream to not contain any video track.\n // This should recovers in the next update call.\n if (!videoTracks || videoTracks.length === 0) {\n return;\n }\n const attendeeId = this.context.meetingSessionConfiguration.credentials.attendeeId;\n const isContentAttendee = new DefaultModality_1.default(attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT);\n const trackSettings = videoTracks[0].getSettings();\n this.checkAndApplyVideoConstraint(isContentAttendee, videoTracks[0], trackSettings.width, trackSettings.height, trackSettings.frameRate);\n const externalUserId = this.context.audioVideoController.configuration.credentials\n .externalUserId;\n localTile.bindVideoStream(attendeeId, true, videoInput, trackSettings.width, trackSettings.height, null, externalUserId);\n for (const track of videoTracks) {\n this.logger.info(`Using video device label=${track.label} id=${track.id}`);\n this.context.videoDeviceInformation['current_camera_name'] = track.label;\n this.context.videoDeviceInformation['current_camera_id'] = track.id;\n }\n }\n });\n }\n}\nexports.default = ReceiveVideoInputTask;\n//# sourceMappingURL=ReceiveVideoInputTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionVideoAvailability_1 = __importDefault(require(\"../meetingsession/MeetingSessionVideoAvailability\"));\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst VideoCodecCapability_1 = __importDefault(require(\"../sdp/VideoCodecCapability\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst Types_1 = require(\"../utils/Types\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[ReceiveVideoStreamIndexTask]] receives [[SdkIndexFrame]] and updates [[VideoUplinkBandwidthPolicy]] and [[VideoDownlinkBandwidthPolicy]].\n */\nclass ReceiveVideoStreamIndexTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'ReceiveVideoStreamIndexTask';\n // See comment above invocation of `pauseIngestion` in `DefaultAudioVideoController`\n // for explanation.\n this.isIngestionPaused = false;\n this.pendingIndex = null;\n }\n removeObserver() {\n this.context.signalingClient.removeObserver(this);\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.handleIndexFrame(this.context.indexFrame);\n this.context.signalingClient.registerObserver(this);\n this.context.removableObservers.push(this);\n });\n }\n handleSignalingClientEvent(event) {\n if (event.type !== SignalingClientEventType_1.default.ReceivedSignalFrame ||\n event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.INDEX) {\n return;\n }\n // @ts-ignore: force cast to SdkIndexFrame\n const indexFrame = event.message.index;\n this.context.logger.info(`received new index ${JSON.stringify(indexFrame)}`);\n this.handleIndexFrame(indexFrame);\n }\n pauseIngestion() {\n this.isIngestionPaused = true;\n }\n resumeIngestion() {\n if (!this.isIngestionPaused) {\n // Do not recheck subcribe if it wasn't paused to begin with.\n return;\n }\n this.isIngestionPaused = false;\n if (this.pendingIndex) {\n this.context.logger.info('Resuming index ingestion with pending index');\n this.handleIndexFrame(this.pendingIndex);\n }\n }\n handleIndexFrame(indexFrame) {\n if (!indexFrame) {\n return;\n }\n if (this.isIngestionPaused) {\n this.context.logger.info(`Index ingestion is paused, setting most recent index as pending`);\n this.pendingIndex = indexFrame;\n return;\n }\n else {\n this.pendingIndex = null;\n }\n // Filter out self content share video\n const selfAttendeeId = this.context.audioVideoController.configuration.credentials.attendeeId;\n indexFrame.sources = indexFrame.sources.filter(source => {\n const modality = new DefaultModality_1.default(source.attendeeId);\n return !(modality.base() === selfAttendeeId && modality.hasModality(DefaultModality_1.default.MODALITY_CONTENT));\n });\n const { videoStreamIndex, videoDownlinkBandwidthPolicy, videoUplinkBandwidthPolicy, } = this.context;\n const oldVideoSources = videoStreamIndex.allVideoSendingSourcesExcludingSelf(selfAttendeeId);\n videoStreamIndex.integrateIndexFrame(indexFrame);\n videoDownlinkBandwidthPolicy.updateIndex(videoStreamIndex);\n videoUplinkBandwidthPolicy.updateIndex(videoStreamIndex);\n this.resubscribe(videoDownlinkBandwidthPolicy, videoUplinkBandwidthPolicy);\n this.updateVideoAvailability(indexFrame);\n this.handleIndexVideosPausedAtSource();\n if (indexFrame.supportedReceiveCodecIntersection.length > 0) {\n this.handleSupportedVideoReceiveCodecIntersection(indexFrame);\n }\n // `forEachObserver`is asynchronous anyways so it doesn't matter (for better or worse) whether we\n // trigger it before or after the policy update + possible resubscribe kickoff\n const newVideoSources = videoStreamIndex.allVideoSendingSourcesExcludingSelf(selfAttendeeId);\n if (!this.areVideoSourcesEqual(oldVideoSources, newVideoSources)) {\n this.context.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.remoteVideoSourcesDidChange).map(f => f.bind(observer)(newVideoSources));\n });\n }\n }\n areVideoSourcesEqual(oldVideoSources, newVideoSources) {\n if (oldVideoSources.length !== newVideoSources.length) {\n return false;\n }\n const compare = (videoSourceA, videoSourceB) => videoSourceA.attendee.attendeeId.localeCompare(videoSourceB.attendee.attendeeId);\n const sortedOldVideoSources = [...oldVideoSources].sort(compare);\n const sortedNewVideoSources = [...newVideoSources].sort(compare);\n for (let i = 0; i < sortedOldVideoSources.length; i++) {\n if (sortedOldVideoSources[i].attendee.attendeeId !==\n sortedNewVideoSources[i].attendee.attendeeId) {\n return false;\n }\n }\n return true;\n }\n resubscribe(videoDownlinkBandwidthPolicy, videoUplinkBandwidthPolicy) {\n const resubscribeForDownlink = videoDownlinkBandwidthPolicy.wantsResubscribe();\n const resubscribeForUplink = (this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.TX ||\n this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.DUPLEX) &&\n videoUplinkBandwidthPolicy.wantsResubscribe();\n const shouldResubscribe = resubscribeForDownlink || resubscribeForUplink;\n this.logger.info(`should resubscribe: ${shouldResubscribe} (downlink: ${resubscribeForDownlink} uplink: ${resubscribeForUplink})`);\n if (!shouldResubscribe) {\n return;\n }\n const videoSubscriptionIdSet = videoDownlinkBandwidthPolicy.chooseSubscriptions();\n this.context.videosToReceive = videoSubscriptionIdSet.truncate(this.context.videoSubscriptionLimit);\n if (videoSubscriptionIdSet.size() > this.context.videosToReceive.size()) {\n this.logger.warn(`Video receive limit exceeded. Limiting the videos to ${this.context.videosToReceive.size()}. Please consider using AllHighestVideoBandwidthPolicy or VideoPriorityBasedPolicy along with chooseRemoteVideoSources api to select the video sources to be displayed.`);\n }\n this.context.videoCaptureAndEncodeParameter = videoUplinkBandwidthPolicy.chooseCaptureAndEncodeParameters();\n this.logger.info(`trigger resubscribe for up=${resubscribeForUplink} down=${resubscribeForDownlink}; videosToReceive=[${this.context.videosToReceive.array()}] captureParams=${JSON.stringify(this.context.videoCaptureAndEncodeParameter)}`);\n this.context.audioVideoController.update({ needsRenegotiation: false });\n }\n updateVideoAvailability(indexFrame) {\n if (!this.context.videosToReceive) {\n this.logger.error('videosToReceive must be set in the meeting context.');\n return;\n }\n const videoAvailability = new MeetingSessionVideoAvailability_1.default();\n videoAvailability.remoteVideoAvailable = !this.context.videosToReceive.empty();\n videoAvailability.canStartLocalVideo = !indexFrame.atCapacity;\n if (!this.context.lastKnownVideoAvailability ||\n !this.context.lastKnownVideoAvailability.equal(videoAvailability)) {\n this.context.lastKnownVideoAvailability = videoAvailability.clone();\n this.context.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.videoAvailabilityDidChange).map(f => f.bind(observer)(videoAvailability.clone()));\n });\n }\n }\n handleSupportedVideoReceiveCodecIntersection(index) {\n if (this.context.videoSendCodecPreferences === undefined) {\n return;\n }\n // The following list contains the configured send codec preferences filtered to\n // only what is supported by the meeting\n const newMeetingSupportedVideoSendCodecPreferences = [];\n // Will be set to true if we need to force a negotiation to change the codec\n let willNeedUpdate = false;\n // Intersect `this.context.videoSendCodecPreferences` with `index.supportedReceiveCodecIntersection`\n for (const capability of this.context.videoSendCodecPreferences) {\n for (const signaledCapability of index.supportedReceiveCodecIntersection) {\n if (capability.equals(VideoCodecCapability_1.default.fromSignaled(signaledCapability))) {\n newMeetingSupportedVideoSendCodecPreferences.push(capability);\n break;\n }\n }\n }\n if (newMeetingSupportedVideoSendCodecPreferences.length > 0) {\n // We need to renegotiate if we are currently sending a codec that is no longer supported in the call, or if we can\n // start sending a higher preference codec again (due to a constrained remote attendee leaving)\n // First we find the first codec from our send preferences that has already been intersected with the\n // codecs supported by the meeting, that we know we can support. This is what we want to send.\n const firstMatchingCodecPreference = newMeetingSupportedVideoSendCodecPreferences.find(capability => this.context.prioritizedSendVideoCodecCapabilities.some(prioritizedCapability => capability.equals(prioritizedCapability)));\n // If that codec is not what we are sending, trigger an update\n if (this.context.currentVideoSendCodec !== undefined &&\n (firstMatchingCodecPreference === undefined ||\n !this.context.currentVideoSendCodec.equals(firstMatchingCodecPreference))) {\n willNeedUpdate = true;\n }\n this.context.meetingSupportedVideoSendCodecPreferences = newMeetingSupportedVideoSendCodecPreferences;\n }\n else {\n this.logger.warn('Interesection of meeting receive codec support and send codec preferences has no overlap, falling back to just values provided in `setVideoCodecSendPreferences`');\n this.context.meetingSupportedVideoSendCodecPreferences = undefined;\n }\n if (this.context.videoUplinkBandwidthPolicy.setMeetingSupportedVideoSendCodecs) {\n this.context.videoUplinkBandwidthPolicy.setMeetingSupportedVideoSendCodecs(this.context.meetingSupportedVideoSendCodecPreferences, this.context.videoSendCodecPreferences);\n }\n if (willNeedUpdate) {\n this.context.audioVideoController.update({ needsRenegotiation: true });\n }\n }\n handleIndexVideosPausedAtSource() {\n const streamsPausedAtSource = this.context.videoStreamIndex.streamsPausedAtSource();\n for (const tile of this.context.videoTileController.getAllVideoTiles()) {\n const tileState = tile.state();\n if (streamsPausedAtSource.contain(tileState.streamId)) {\n if (tile.markPoorConnection()) {\n this.logger.info(`marks the tile ${tileState.tileId} as having a poor connection`);\n }\n }\n else {\n if (tile.unmarkPoorConnection()) {\n this.logger.info(`unmarks the tile ${tileState.tileId} as having a poor connection`);\n }\n }\n }\n }\n}\nexports.default = ReceiveVideoStreamIndexTask;\n//# sourceMappingURL=ReceiveVideoStreamIndexTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DataMessage_1 = __importDefault(require(\"../datamessage/DataMessage\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\nclass SendAndReceiveDataMessagesTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'SendAndReceiveDataMessagesTask';\n this.sendDataMessageHandler = (topic, data, // eslint-disable-line @typescript-eslint/no-explicit-any\n lifetimeMs) => {\n if (this.context.signalingClient.ready()) {\n let uint8Data;\n if (data instanceof Uint8Array) {\n uint8Data = data;\n }\n else if (typeof data === 'string') {\n uint8Data = new TextEncoder().encode(data);\n }\n else {\n uint8Data = new TextEncoder().encode(JSON.stringify(data));\n }\n this.validateDataMessage(topic, uint8Data, lifetimeMs);\n const message = SignalingProtocol_js_1.SdkDataMessagePayload.create();\n message.topic = topic;\n message.lifetimeMs = lifetimeMs;\n message.data = uint8Data;\n const messageFrame = SignalingProtocol_js_1.SdkDataMessageFrame.create();\n messageFrame.messages = [message];\n this.context.signalingClient.sendDataMessage(messageFrame);\n }\n else {\n this.context.logger.error('Signaling client is not ready');\n }\n };\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this.context.removableObservers.push(this);\n this.context.signalingClient.registerObserver(this);\n this.context.realtimeController.realtimeSubscribeToSendDataMessage(this.sendDataMessageHandler);\n });\n }\n removeObserver() {\n this.context.realtimeController.realtimeUnsubscribeFromSendDataMessage(this.sendDataMessageHandler);\n this.context.signalingClient.removeObserver(this);\n }\n handleSignalingClientEvent(event) {\n if (event.type === SignalingClientEventType_1.default.ReceivedSignalFrame &&\n event.message.type === SignalingProtocol_js_1.SdkSignalFrame.Type.DATA_MESSAGE) {\n for (const message of event.message.dataMessage.messages) {\n const dataMessage = new DataMessage_1.default(message.ingestTimeNs / 1000000, message.topic, message.data, message.senderAttendeeId, message.senderExternalUserId, message.ingestTimeNs === 0);\n this.context.realtimeController.realtimeReceiveDataMessage(dataMessage);\n }\n }\n }\n validateDataMessage(topic, data, lifetimeMs) {\n if (!SendAndReceiveDataMessagesTask.TOPIC_REGEX.test(topic)) {\n throw new Error('Invalid topic');\n }\n if (data.length > SendAndReceiveDataMessagesTask.DATA_SIZE) {\n throw new Error('Data size has to be less than 2048 bytes');\n }\n if (lifetimeMs && lifetimeMs < 0) {\n throw new Error('The life time of the message has to be non negative');\n }\n }\n}\nexports.default = SendAndReceiveDataMessagesTask;\nSendAndReceiveDataMessagesTask.TOPIC_REGEX = new RegExp(/^[a-zA-Z0-9_-]{1,36}$/);\nSendAndReceiveDataMessagesTask.DATA_SIZE = 2048;\n//# sourceMappingURL=SendAndReceiveDataMessagesTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\nconst TaskStatus_1 = __importDefault(require(\"./TaskStatus\"));\n/**\n * [[SerialGroupTask]] runs a set of tasks in series. When canceled, it stops\n * any currently running task and runs no further tasks in the group.\n */\nclass SerialGroupTask extends BaseTask_1.default {\n constructor(logger, taskName, tasksToRunSerially) {\n super(logger);\n this.taskName = taskName;\n this.tasksToRunSerially = tasksToRunSerially;\n this.currentTask = null;\n for (const task of tasksToRunSerially) {\n task.setParent(this);\n }\n }\n cancel() {\n if (this.currentTask) {\n this.logger.info(`canceling serial group task ${this.name()} subtask ${this.currentTask.name()}`);\n this.currentTask.cancel();\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n for (const task of this.tasksToRunSerially) {\n if (this.getStatus() === TaskStatus_1.default.CANCELED) {\n this.logAndThrow(`serial group task ${this.name()} was canceled`);\n }\n try {\n this.logger.info(`serial group task ${this.name()} running subtask ${task.name()}`);\n this.currentTask = task;\n yield task.run();\n this.logger.info(`serial group task ${this.name()} completed subtask ${task.name()}`);\n }\n catch (err) {\n this.logAndThrow(`serial group task ${this.name()} was canceled due to subtask ` +\n `${this.currentTask.name()} error: ${err.message}`);\n }\n finally {\n this.currentTask = null;\n }\n }\n this.logger.info(`serial group task ${this.name()} completed`);\n });\n }\n}\nexports.default = SerialGroupTask;\n//# sourceMappingURL=SerialGroupTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst SDP_1 = __importDefault(require(\"../sdp/SDP\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[SetLocalDescriptionTask]] asynchronously calls [[setLocalDescription]] on peer connection.\n */\nclass SetLocalDescriptionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'SetLocalDescriptionTask';\n }\n cancel() {\n // Just in case. The baseCancel behavior should prevent this.\n /* istanbul ignore else */\n if (this.cancelPromise) {\n const error = new Error(`canceling ${this.name()}`);\n this.cancelPromise(error);\n delete this.cancelPromise;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const peer = this.context.peer;\n const sdpOfferInit = this.context.sdpOfferInit;\n let sdp = sdpOfferInit.sdp;\n if (this.context.browserBehavior.supportsVideoLayersAllocationRtpHeaderExtension()) {\n // This will be negotiatiated with backend, and we will only use it to skip resubscribes\n // if we confirm support/negotiation via `RTCRtpTranceiver.sender.getParams`\n sdp = new SDP_1.default(sdp).withVideoLayersAllocationRtpHeaderExtension(this.context.previousSdpOffer)\n .sdp;\n }\n // We will remove the dependency descriptor RTP header extension after set if this branch is not hit, as\n // browsers will not remove it from the send section. We don't do it here, so that we don't lose track of\n // the header extension IDs being used when we store `this.context.previousSdpOffer`.\n if (this.context.browserBehavior.supportsDependencyDescriptorRtpHeaderExtension() &&\n this.context.videoUplinkBandwidthPolicy.wantsVideoDependencyDescriptorRtpHeaderExtension !==\n undefined &&\n this.context.videoUplinkBandwidthPolicy.wantsVideoDependencyDescriptorRtpHeaderExtension()) {\n sdp = new SDP_1.default(sdp).withDependencyDescriptorRtpHeaderExtension(this.context.previousSdpOffer)\n .sdp;\n }\n if (new DefaultBrowserBehavior_1.default().requiresDisablingH264Encoding()) {\n sdp = new SDP_1.default(sdp).removeH264SupportFromSendSection().sdp;\n }\n // We set content hint to `motion` as a workaround for the issue Chrome cannot enable temporal\n // scalability for screen share https://bugs.chromium.org/p/chromium/issues/detail?id=1433486\n // As a side effect, content share may start at a low resolution and take a long time to adapt,\n // especially when there is limited motion on screen. To mitigate the problem, we set a starting\n // bitrate of 100 kbps for content share with SVC enabled.\n const attendeeId = this.context.audioVideoController.configuration.credentials.attendeeId;\n const isContent = new DefaultModality_1.default(attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT);\n if (isContent && this.context.audioVideoController.configuration.enableSVC) {\n sdp = new SDP_1.default(sdp).withStartingVideoSendBitrate(100).sdp;\n }\n if (this.context.videoSendCodecPreferences !== undefined &&\n this.context.videoSendCodecPreferences.length > 0) {\n sdp = new SDP_1.default(sdp).withVideoSendCodecPreferences(this.context.meetingSupportedVideoSendCodecPreferences !== undefined\n ? this.context.meetingSupportedVideoSendCodecPreferences\n : this.context.videoSendCodecPreferences).sdp;\n }\n if (this.context.audioProfile) {\n sdp = new SDP_1.default(sdp).withAudioMaxAverageBitrate(this.context.audioProfile.audioBitrateBps).sdp;\n if (this.context.audioProfile.isStereo()) {\n sdp = new SDP_1.default(sdp).withStereoAudio().sdp;\n }\n if (this.context.audioProfile.hasRedundancyEnabled()) {\n const audioPayloadMap = new SDP_1.default(sdp).getAudioPayloadTypes();\n /* istanbul ignore else */\n if (this.context.transceiverController &&\n this.context.transceiverController.setAudioPayloadTypes) {\n this.context.transceiverController.setAudioPayloadTypes(audioPayloadMap);\n }\n }\n }\n this.logger.debug(() => {\n return `local description is >>>${sdp}<<<`;\n });\n const sdpOffer = {\n type: 'offer',\n sdp: sdp,\n toJSON: null,\n };\n yield new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n this.cancelPromise = (error) => {\n reject(error);\n };\n try {\n yield peer.setLocalDescription(sdpOffer);\n resolve();\n }\n catch (error) {\n reject(error);\n }\n finally {\n delete this.cancelPromise;\n }\n }));\n this.context.logger.info('set local description');\n });\n }\n}\nexports.default = SetLocalDescriptionTask;\n//# sourceMappingURL=SetLocalDescriptionTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst SDP_1 = __importDefault(require(\"../sdp/SDP\"));\nconst VideoCodecCapability_1 = __importDefault(require(\"../sdp/VideoCodecCapability\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[SetRemoteDescriptionTask]] asynchronously calls [[setRemoteDescription]] on the\n * peer connection and then waits for the tracks to be added and for the ICE connection\n * to complete.\n */\nclass SetRemoteDescriptionTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'SetRemoteDescriptionTask';\n }\n cancel() {\n if (this.cancelICEPromise) {\n this.cancelICEPromise();\n }\n }\n run() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const peer = this.context.peer;\n if (!peer) {\n this.logAndThrow('session does not have peer connection; bypass set remote description');\n }\n let sdp = this.context.sdpAnswer;\n sdp = new SDP_1.default(sdp).withoutServerReflexiveCandidates().sdp;\n if (this.context.audioProfile) {\n sdp = new SDP_1.default(sdp).withAudioMaxAverageBitrate(this.context.audioProfile.audioBitrateBps).sdp;\n if (this.context.audioProfile.isStereo()) {\n sdp = new SDP_1.default(sdp).withStereoAudio().sdp;\n }\n }\n if (this.context.videoSendCodecPreferences !== undefined &&\n this.context.videoSendCodecPreferences.length > 0) {\n sdp = new SDP_1.default(sdp).withVideoSendCodecPreferences(this.context.meetingSupportedVideoSendCodecPreferences !== undefined\n ? this.context.meetingSupportedVideoSendCodecPreferences\n : this.context.videoSendCodecPreferences).sdp;\n }\n this.context.prioritizedSendVideoCodecCapabilities = new SDP_1.default(sdp).prioritizedSendVideoCodecCapabilities();\n this.context.currentVideoSendCodec =\n this.context.prioritizedSendVideoCodecCapabilities.length > 0\n ? this.context.prioritizedSendVideoCodecCapabilities[0]\n : undefined;\n const mediaStream = this.context.activeVideoInput;\n if (mediaStream !== undefined) {\n const attendeeId = this.context.audioVideoController.configuration.credentials.attendeeId;\n const isContent = new DefaultModality_1.default(attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT);\n const videoTrack = mediaStream.getVideoTracks()[0];\n if (isContent) {\n if (((_a = this.context.currentVideoSendCodec) === null || _a === void 0 ? void 0 : _a.codecName) === VideoCodecCapability_1.default.av1Main().codecName) {\n // Based on our experiments: \"text\" contentHint gives good coding performance for content share using AV1\n // @ts-ignore\n videoTrack.contentHint = 'text';\n this.logger.info(`Setting content hint to text for AV1, attendee: ${attendeeId}`);\n }\n else if (this.context.audioVideoController.configuration.enableSVC) {\n // Set content hint to `motion` as a workaround for the issue Chrome cannot enable\n // temporal scalability for screen share\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1433486\n // @ts-ignore\n videoTrack.contentHint = 'motion';\n this.logger.info(`Setting content hint to motion to enable SVC, attendee: ${attendeeId}`);\n }\n }\n }\n this.logger.info(`processed remote description is >>>${sdp}<<<`);\n const remoteDescription = {\n type: 'answer',\n sdp: sdp,\n toJSON: null,\n };\n try {\n yield this.createICEConnectionCompletedPromise(remoteDescription);\n }\n catch (err) {\n throw err;\n }\n });\n }\n createICEConnectionCompletedPromise(remoteDescription) {\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n const checkConnectionCompleted = () => {\n if (this.context.peer.iceConnectionState === 'connected' ||\n this.context.peer.iceConnectionState === 'completed') {\n this.context.peer.removeEventListener('iceconnectionstatechange', checkConnectionCompleted);\n resolve();\n }\n };\n this.cancelICEPromise = () => {\n if (this.context.peer) {\n this.context.peer.removeEventListener('iceconnectionstatechange', checkConnectionCompleted);\n }\n reject(new Error(`${this.name()} got canceled while waiting for the ICE connection state`));\n };\n this.context.peer.addEventListener('iceconnectionstatechange', checkConnectionCompleted);\n try {\n yield this.context.peer.setRemoteDescription(remoteDescription);\n this.logger.info('set remote description, waiting for ICE connection');\n checkConnectionCompleted();\n }\n catch (err) {\n reject(err);\n }\n }));\n }\n}\nexports.default = SetRemoteDescriptionTask;\n//# sourceMappingURL=SetRemoteDescriptionTask.js.map","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES = 30;\n/* number of distance codes */\n\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nmodule.exports._tr_init = _tr_init;\nmodule.exports._tr_stored_block = _tr_stored_block;\nmodule.exports._tr_flush_block = _tr_flush_block;\nmodule.exports._tr_tally = _tr_tally;\nmodule.exports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = require('./trees');\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_PARTIAL_FLUSH, Z_FULL_FLUSH, Z_FINISH, Z_BLOCK,\n Z_OK, Z_STREAM_END, Z_STREAM_ERROR, Z_DATA_ERROR, Z_BUF_ERROR,\n Z_DEFAULT_COMPRESSION,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY,\n Z_UNKNOWN,\n Z_DEFLATED\n} = require('./constants');\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = msg[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH) ||\n flush === Z_NO_FLUSH ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH && flush !== Z_FINISH &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH) && flush !== Z_NO_FLUSH &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR;\n }\n strm.state.gzhead = head;\n return Z_OK;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n};\n\n\n/* ========================================================================= */\nconst deflate = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n};\n\n\nmodule.exports.deflateInit = deflateInit;\nmodule.exports.deflateInit2 = deflateInit2;\nmodule.exports.deflateReset = deflateReset;\nmodule.exports.deflateResetKeep = deflateResetKeep;\nmodule.exports.deflateSetHeader = deflateSetHeader;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateEnd = deflateEnd;\nmodule.exports.deflateSetDictionary = deflateSetDictionary;\nmodule.exports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nconst zlib_deflate = require('./zlib/deflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n this.options = utils.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_deflate.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n if (opt.header) {\n zlib_deflate.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = zlib_deflate.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = zlib_deflate.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n this.result = utils.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n const deflator = new Deflate(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate(input, options);\n}\n\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.constants = require('./zlib/constants');\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nmodule.exports = inflate_table;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst inflate_fast = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH, Z_BLOCK, Z_TREES,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\nconst GZheader = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n this.options = utils.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = zlib_inflate.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n zlib_inflate.inflateReset(strm);\n status = zlib_inflate.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nconst { Deflate, deflate, deflateRaw, gzip } = require('./lib/deflate');\n\nconst { Inflate, inflate, inflateRaw, ungzip } = require('./lib/inflate');\n\nconst constants = require('./lib/zlib/constants');\n\nmodule.exports.Deflate = Deflate;\nmodule.exports.deflate = deflate;\nmodule.exports.deflateRaw = deflateRaw;\nmodule.exports.gzip = gzip;\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = ungzip;\nmodule.exports.constants = constants;\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pako = require('pako');\n/**\n * [[ZLIBTextCompressor]] Performs the text compression and decompression using zlib\n */\nclass ZLIBTextCompressor {\n /**\n * Constructs an instance of [[ZLIBTextCompressor]]\n * @param logger\n */\n constructor(logger) {\n this.logger = logger;\n }\n /**\n * Compresses the given text.\n *\n * Note: The dictionary used during compression should be the same as\n * that being used during decompression.\n *\n * @param text - the text that needs to be compressed\n * @param dictionary - that will be used to seed the compression\n * library to improve compression's performance\n * @returns a compressed text\n */\n compress(text, dictionary) {\n if (dictionary.length > 0) {\n const dictionarySize = Math.min(dictionary.length, ZLIBTextCompressor.MAX_DICTIONARY_SIZE);\n dictionary = dictionary.slice(0, dictionarySize);\n }\n const options = {\n memLevel: ZLIBTextCompressor.Z_MEM_LEVEL,\n dictionary: dictionary,\n };\n const compressedText = pako.deflateRaw(text, options);\n return compressedText;\n }\n /**\n * Decompresses the given text and returns the original text.\n *\n * Note: The dictionary used during compression should be the same as\n * that being used during decompression.\n *\n * @param compressedText that will be decompressed\n * @param dictionary that will be used to seed the compression library to improve\n * decompression's performance\n * @returns decompressed string\n */\n decompress(compressedText, dictionary) {\n if (dictionary.length > 0) {\n const dictionarySize = Math.min(dictionary.length, ZLIBTextCompressor.MAX_DICTIONARY_SIZE);\n dictionary = dictionary.slice(0, dictionarySize);\n }\n const options = {\n to: 'string',\n dictionary: dictionary,\n chunkSize: 4096,\n };\n let decompressedText = '';\n try {\n decompressedText = pako.inflateRaw(compressedText, options);\n }\n catch (ex) {\n this.logger.error(`failed to decompress the string with error: [${ex}]`);\n }\n return decompressedText;\n }\n}\nexports.default = ZLIBTextCompressor;\n// The memory Level parameter specifies how much memory to use for the internal state.\n// Smaller values use less memory but are slower, while higher values use more memory\n// to gain compression speed.\n// Range is between 1 to 9\nZLIBTextCompressor.Z_MEM_LEVEL = 9;\n// 32kB is the maximum dictionary size supported by the zlib format.\nZLIBTextCompressor.MAX_DICTIONARY_SIZE = 31744; // 31 KB\n//# sourceMappingURL=ZLIBTextCompressor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[SignalingClientSubscribe]] contains settings for the Subscribe SignalFrame.\n */\nclass SignalingClientSubscribe {\n /** Initializes a SignalingClientSubscribe with the given properties.\n *\n * @param attendeeId Attendee ID of the client\n * @param sdpOffer SDP offer created by WebRTC\n * @param audioHost host\n * @param audioMuted Whether audio from client is muted\n * @param audioCheckin Whether audio is in checked-in state\n * @param receiveStreamIds Which video streams to receive\n * @param localVideoEnabled Whether to send a video stream for the local camera\n * @param array of local video stream description\n * @param connectionTypeHasVideo Whether connection type has video\n * @param compressedSdpOffer Compressed version of the SDP offer which was created by WebRTC\n */\n constructor(attendeeId, sdpOffer, audioHost, audioMuted, audioCheckin, receiveStreamIds, localVideoEnabled, videoStreamDescriptions, connectionTypeHasVideo, compressedSdpOffer) {\n this.attendeeId = attendeeId;\n this.sdpOffer = sdpOffer;\n this.audioHost = audioHost;\n this.audioMuted = audioMuted;\n this.audioCheckin = audioCheckin;\n this.receiveStreamIds = receiveStreamIds;\n this.localVideoEnabled = localVideoEnabled;\n this.videoStreamDescriptions = videoStreamDescriptions;\n this.connectionTypeHasVideo = connectionTypeHasVideo;\n this.compressedSdpOffer = compressedSdpOffer;\n this.videoSubscriptionConfiguration = [];\n }\n}\nexports.default = SignalingClientSubscribe;\n//# sourceMappingURL=SignalingClientSubscribe.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VideoPreferences = exports.MutableVideoPreferences = exports.convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration = void 0;\nconst SignalingClientVideoSubscriptionConfiguration_1 = __importDefault(require(\"../signalingclient/SignalingClientVideoSubscriptionConfiguration\"));\nfunction convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration(context, receiveGroupIds, preferences) {\n if (context.transceiverController.getMidForGroupId === undefined ||\n context.videoStreamIndex.attendeeIdForGroupId === undefined ||\n preferences === undefined) {\n return [];\n }\n const configurations = new Array();\n const attendeeIdToMid = new Map();\n const attendeeIdToGroupId = new Map();\n for (const groupId of receiveGroupIds) {\n // The local description will have been set by the time this task is running, so all\n // of the transceivers should have `mid` set by now (see comment above `getMidForStreamId`)\n const mid = context.transceiverController.getMidForGroupId(groupId);\n if (mid === undefined) {\n continue;\n }\n const attendeeId = context.videoStreamIndex.attendeeIdForGroupId(groupId);\n attendeeIdToMid.set(attendeeId, mid);\n attendeeIdToGroupId.set(attendeeId, groupId);\n }\n for (const preference of preferences) {\n const configuration = new SignalingClientVideoSubscriptionConfiguration_1.default();\n const mid = attendeeIdToMid.get(preference.attendeeId);\n if (mid === undefined) {\n continue;\n }\n configuration.mid = mid;\n configuration.attendeeId = preference.attendeeId;\n configuration.groupId = attendeeIdToGroupId.get(preference.attendeeId);\n // The signaling protocol expects 'higher' values for 'higher' priorities\n configuration.priority = Number.MAX_SAFE_INTEGER - preference.priority;\n configuration.targetBitrateKbps = preference.targetSizeToBitrateKbps(preference.targetSize);\n configuration.qualityAdaptationPreference = preference.degradationPreference;\n configurations.push(configuration);\n }\n return configurations;\n}\nexports.convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration = convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration;\nclass ObjectSet {\n constructor(items = []) {\n this.items = items;\n }\n static default() {\n return new ObjectSet([]);\n }\n // Returns the items in sorted order.\n [Symbol.iterator]() {\n let i = 0;\n const items = this.items;\n return {\n next() {\n if (i < items.length) {\n return {\n done: false,\n value: items[i++],\n };\n }\n return {\n done: true,\n value: null,\n };\n },\n };\n }\n first() {\n return this.items[0];\n }\n add(item) {\n // If this is used elsewhere, there needs to be a duplicate check here\n this.items.push(item);\n }\n replaceFirst(newItem, f) {\n const pos = this.items.findIndex(f);\n if (pos === -1) {\n // If this is used elsewhere, there needs to be a duplicate check here\n this.items.push(newItem);\n }\n else if (!this.has(newItem)) {\n this.items[pos] = newItem;\n }\n else {\n this.items.splice(pos, 1);\n }\n }\n remove(item) {\n this.items = this.items.filter(a => !a.equals(item));\n }\n clear() {\n this.items = [];\n }\n isEmpty() {\n return this.items.length === 0;\n }\n equals(other) {\n if (other === this) {\n return true;\n }\n if (other.items.length !== this.items.length) {\n return false;\n }\n // TODO: if we keep the arrays sorted correctly, not just by priority, then\n // we don't need to do this painstaking O(n^2) work.\n for (const item of this.items) {\n if (!other.items.some(a => a.equals(item))) {\n return false;\n }\n }\n return true;\n }\n has(item) {\n return this.items.some(a => a.equals(item));\n }\n some(f) {\n return this.items.some(f);\n }\n clone() {\n return new ObjectSet([...this.items]);\n }\n sort() {\n this.items.sort((a, b) => a.partialCompare(b));\n }\n modify() {\n // COW.\n return new SetBuilder(this);\n }\n}\nclass SetBuilder {\n constructor(items = new ObjectSet()) {\n this.items = items;\n this.copied = false;\n }\n cow() {\n if (this.copied) {\n return;\n }\n this.items = this.items.clone();\n this.copied = true;\n }\n add(item) {\n // Don't actually need to COW unless the item is there to add.\n if (this.items.has(item)) {\n return;\n }\n this.cow();\n this.items.add(item);\n }\n replaceFirst(newItem, f) {\n // Don't actually need to COW unless the item is already there\n // and there are no items to replace\n if (this.items.has(newItem) && !this.items.some(f)) {\n return;\n }\n this.cow();\n this.items.replaceFirst(newItem, f);\n }\n remove(item) {\n // Don't actually need to COW unless the item is there to remove.\n if (!this.items.has(item)) {\n return;\n }\n this.cow();\n this.items.remove(item);\n }\n some(f) {\n return this.items.some(f);\n }\n clear() {\n if (this.items.isEmpty()) {\n return;\n }\n this.cow();\n this.items.clear();\n }\n build() {\n // Immutable sets are always kept sorted!\n if (this.copied) {\n this.items.sort();\n }\n this.copied = false;\n return this.items;\n }\n}\nclass MutableVideoPreferences {\n constructor(builder) {\n this.builder = builder;\n }\n add(pref) {\n this.builder.add(pref);\n }\n replaceFirst(newPref, f) {\n this.builder.replaceFirst(newPref, f);\n }\n remove(pref) {\n this.builder.remove(pref);\n }\n some(f) {\n return this.builder.some(f);\n }\n clear() {\n this.builder.clear();\n }\n build() {\n return new VideoPreferences(this.builder.build());\n }\n}\nexports.MutableVideoPreferences = MutableVideoPreferences;\nclass VideoPreferences {\n /** @internal */\n constructor(items) {\n this.items = items;\n }\n static prepare() {\n return new MutableVideoPreferences(new SetBuilder());\n }\n static default() {\n return new VideoPreferences(ObjectSet.default());\n }\n [Symbol.iterator]() {\n return this.items[Symbol.iterator]();\n }\n highestPriority() {\n var _a;\n return (_a = this.items.first()) === null || _a === void 0 ? void 0 : _a.priority;\n }\n // Our items happen to always be sorted!\n sorted() {\n return this.items[Symbol.iterator]();\n }\n equals(other) {\n return other === this || this.items.equals(other.items);\n }\n modify() {\n return new MutableVideoPreferences(this.items.modify());\n }\n some(f) {\n return this.items.some(f);\n }\n isEmpty() {\n return this.items.isEmpty();\n }\n clone() {\n const videoPreferences = VideoPreferences.prepare();\n for (const preference of this.items) {\n videoPreferences.add(preference.clone());\n }\n return videoPreferences.build();\n }\n}\nexports.VideoPreferences = VideoPreferences;\nexports.default = VideoPreferences;\n//# sourceMappingURL=VideoPreferences.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionStatus_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatus\"));\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst SDP_1 = __importDefault(require(\"../sdp/SDP\"));\nconst ZLIBTextCompressor_1 = __importDefault(require(\"../sdp/ZLIBTextCompressor\"));\nconst ServerSideNetworkAdaption_1 = require(\"../signalingclient/ServerSideNetworkAdaption\");\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingClientSubscribe_1 = __importDefault(require(\"../signalingclient/SignalingClientSubscribe\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst VideoPreferences_1 = require(\"../videodownlinkbandwidthpolicy/VideoPreferences\");\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[SubscribeAndReceiveSubscribeAckTask]] sends a subscribe frame with the given settings\n * and receives SdkSubscribeAckFrame.\n */\nclass SubscribeAndReceiveSubscribeAckTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'SubscribeAndReceiveSubscribeAckTask';\n this.taskCanceler = null;\n this.textCompressor = new ZLIBTextCompressor_1.default(context.logger);\n }\n cancel() {\n if (this.taskCanceler) {\n this.taskCanceler.cancel();\n this.taskCanceler = null;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n let localSdp = '';\n if (this.context.peer && this.context.peer.localDescription) {\n localSdp = new SDP_1.default(this.context.peer.localDescription.sdp).withUnifiedPlanFormat().sdp;\n }\n if (!this.context.enableSimulcast) {\n // backward compatibility\n let frameRate = 0;\n let maxEncodeBitrateKbps = 0;\n if (this.context.videoCaptureAndEncodeParameter) {\n frameRate = this.context.videoCaptureAndEncodeParameter.captureFrameRate();\n maxEncodeBitrateKbps = this.context.videoCaptureAndEncodeParameter.encodeBitrates()[0];\n }\n const param = {\n rid: 'hi',\n maxBitrate: maxEncodeBitrateKbps * 1000,\n maxFramerate: frameRate,\n active: true,\n };\n this.context.videoStreamIndex.integrateUplinkPolicyDecision([param]);\n }\n // This will cache the current index so that we maintain the values over the course of the subscribe.\n this.context.videoStreamIndex.subscribeFrameSent();\n // See comment above `fixUpSubscriptionOrder`\n const videoSubscriptions = this.fixUpSubscriptionOrder(localSdp, this.context.videoSubscriptions);\n const isSendingStreams = this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.TX ||\n this.context.videoDuplexMode === SignalingProtocol_js_1.SdkStreamServiceType.DUPLEX;\n let compressedSDPOffer;\n let localSdpOffer = localSdp;\n if (this.context.videoUplinkBandwidthPolicy.wantsVideoDependencyDescriptorRtpHeaderExtension ===\n undefined ||\n !this.context.videoUplinkBandwidthPolicy.wantsVideoDependencyDescriptorRtpHeaderExtension()) {\n // See note above similar code in `SetLocalDescriptionTask`.\n localSdpOffer = new SDP_1.default(localSdpOffer).withoutDependencyDescriptorRtpHeaderExtension().sdp;\n }\n if (this.context.serverSupportsCompression) {\n // If the server supports compression, then send the compressed version of the sdp\n // and exclude the original sdp offer.\n const prevOffer = this.context.previousSdpOffer ? this.context.previousSdpOffer.sdp : '';\n compressedSDPOffer = this.textCompressor.compress(localSdpOffer, prevOffer);\n this.context.logger.info(`Compressed the SDP message from ${localSdpOffer.length} to ${compressedSDPOffer.length} bytes.`);\n localSdp = '';\n }\n this.context.previousSdpOffer = new SDP_1.default(localSdp);\n const subscribe = new SignalingClientSubscribe_1.default(this.context.meetingSessionConfiguration.credentials.attendeeId, localSdp, this.context.meetingSessionConfiguration.urls.audioHostURL, this.context.realtimeController.realtimeIsLocalAudioMuted(), false, videoSubscriptions, isSendingStreams, this.context.videoStreamIndex.localStreamDescriptions(), \n // TODO: handle check-in mode, or remove this param\n true, compressedSDPOffer);\n if (this.context.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption !== undefined &&\n !ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.context.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption()) &&\n this.context.videoDownlinkBandwidthPolicy.getVideoPreferences !== undefined) {\n // Set initial configuration for the receive streams indicated by the rest of the subscribe\n subscribe.videoSubscriptionConfiguration = VideoPreferences_1.convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration(this.context, videoSubscriptions.map((streamId) => {\n return streamId === 0 ? 0 : this.context.videoStreamIndex.groupIdForStreamId(streamId);\n }), this.context.videoDownlinkBandwidthPolicy.getVideoPreferences());\n }\n this.context.logger.info(`sending subscribe: ${JSON.stringify(subscribe)}`);\n this.context.signalingClient.subscribe(subscribe);\n const subscribeAckFrame = yield this.receiveSubscribeAck();\n this.context.logger.info(`got subscribe ack: ${JSON.stringify(subscribeAckFrame)}`);\n let decompressedText = '';\n if (subscribeAckFrame.compressedSdpAnswer && subscribeAckFrame.compressedSdpAnswer.length) {\n decompressedText = this.textCompressor.decompress(subscribeAckFrame.compressedSdpAnswer, this.context.previousSdpAnswerAsString);\n if (decompressedText.length === 0) {\n this.context.sdpAnswer = '';\n this.context.previousSdpAnswerAsString = '';\n this.logAndThrow(`Error occurred while trying to decompress the SDP answer.`);\n }\n this.context.logger.info(`Decompressed the SDP message from ${subscribeAckFrame.compressedSdpAnswer.length} to ${decompressedText.length} bytes.`);\n this.context.sdpAnswer = decompressedText;\n }\n else {\n this.context.sdpAnswer = subscribeAckFrame.sdpAnswer;\n }\n this.context.previousSdpAnswerAsString = this.context.sdpAnswer;\n this.context.videoStreamIndex.integrateSubscribeAckFrame(subscribeAckFrame);\n });\n }\n // Our backends currently expect the video subscriptions passed in subscribe to precisely\n // line up with the media sections, with a zero for any video send or inactive section.\n //\n // Firefox occasionally tosses stopped transceivers at the end of the SDP without reason\n // and in general we don't want to be at the mercy of SDP sections not being in the same\n // order as `getTransceivers`, so we simply recalculate the array here to enforce that\n // expected invarient until we refactor our signaling to simply take a mapping of MID to\n // subscription.\n //\n // This only works on Unified Plan SDPs\n fixUpSubscriptionOrder(sdp, videoSubscriptions) {\n if (this.context.transceiverController.getMidForStreamId === undefined) {\n return videoSubscriptions;\n }\n const midsToStreamIds = new Map();\n for (const streamId of videoSubscriptions) {\n // The local description will have been set by the time this task is running, so all\n // of the transceivers should have `mid` set by now (see comment above `getMidForStreamId`)\n const mid = this.context.transceiverController.getMidForStreamId(streamId);\n if (mid === undefined) {\n if (streamId !== 0) {\n // Send section or inactive section\n this.logger.warn(`Could not find MID for stream ID: ${streamId}`);\n }\n continue;\n }\n midsToStreamIds.set(mid, streamId);\n }\n const sections = new SDP_1.default(sdp).mediaSections();\n const newSubscriptions = [];\n for (const section of sections) {\n if (section.mediaType !== 'video') {\n continue;\n }\n if (section.direction === 'recvonly') {\n const streamId = midsToStreamIds.get(section.mid);\n if (streamId === undefined) {\n this.logger.warn(`Could not find stream ID for MID: ${section.mid}`);\n continue;\n }\n newSubscriptions.push(streamId);\n }\n else {\n newSubscriptions.push(0);\n }\n }\n this.logger.info(`Fixed up ${JSON.stringify(videoSubscriptions)} to ${JSON.stringify(newSubscriptions)} (may be same))}`);\n return newSubscriptions;\n }\n receiveSubscribeAck() {\n return new Promise((resolve, reject) => {\n const context = this.context;\n class Interceptor {\n constructor(signalingClient) {\n this.signalingClient = signalingClient;\n }\n cancel() {\n this.signalingClient.removeObserver(this);\n reject(new Error(`SubscribeAndReceiveSubscribeAckTask got canceled while waiting for SdkSubscribeAckFrame`));\n }\n handleSignalingClientEvent(event) {\n if (event.isConnectionTerminated()) {\n const message = `SubscribeAndReceiveSubscribeAckTask connection was terminated with code ${event.closeCode} and reason: ${event.closeReason}`;\n context.logger.warn(message);\n let statusCode = MeetingSessionStatusCode_1.default.TaskFailed;\n if (event.closeCode >= 4500 && event.closeCode < 4600) {\n statusCode = MeetingSessionStatusCode_1.default.SignalingInternalServerError;\n }\n context.audioVideoController.handleMeetingSessionStatus(new MeetingSessionStatus_1.default(statusCode), new Error(message));\n return;\n }\n if (event.type !== SignalingClientEventType_1.default.ReceivedSignalFrame ||\n event.message.type !== SignalingProtocol_js_1.SdkSignalFrame.Type.SUBSCRIBE_ACK) {\n return;\n }\n this.signalingClient.removeObserver(this);\n // @ts-ignore: force cast to SdkSubscribeAckFrame\n const subackFrame = event.message.suback;\n resolve(subackFrame);\n }\n }\n const interceptor = new Interceptor(this.context.signalingClient);\n this.context.signalingClient.registerObserver(interceptor);\n this.taskCanceler = interceptor;\n });\n }\n}\nexports.default = SubscribeAndReceiveSubscribeAckTask;\n//# sourceMappingURL=SubscribeAndReceiveSubscribeAckTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TimeoutScheduler_1 = __importDefault(require(\"../scheduler/TimeoutScheduler\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[TimeoutTask]] runs a subtask until it either succeeds or reaches a\n * timeout, at which point the subtask is canceled.\n */\nclass TimeoutTask extends BaseTask_1.default {\n constructor(logger, taskToRunBeforeTimeout, timeoutMs) {\n super(logger);\n this.taskToRunBeforeTimeout = taskToRunBeforeTimeout;\n this.timeoutMs = timeoutMs;\n this.taskName = `Timeout${this.timeoutMs}ms`;\n taskToRunBeforeTimeout.setParent(this);\n }\n cancel() {\n this.logger.info(`canceling timeout task ${this.name()} subtask ${this.taskToRunBeforeTimeout}`);\n this.taskToRunBeforeTimeout.cancel();\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const timer = new TimeoutScheduler_1.default(this.timeoutMs);\n timer.start(() => {\n this.logger.info(`timeout reached for task ${this.name()}`);\n this.taskToRunBeforeTimeout.cancel();\n });\n try {\n yield this.taskToRunBeforeTimeout.run();\n }\n finally {\n timer.stop();\n }\n this.logger.info(`timeout task ${this.name()} completed`);\n });\n }\n}\nexports.default = TimeoutTask;\n//# sourceMappingURL=TimeoutTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/*\n * [[WaitForAttendeePresenceTask]] waits until an attendee presence event happens.\n */\nclass WaitForAttendeePresenceTask extends BaseTask_1.default {\n constructor(context) {\n super(context.logger);\n this.context = context;\n this.taskName = 'WaitForAttendeePresenceTask';\n }\n cancel() {\n // Just in case. The baseCancel behavior should prevent this.\n /* istanbul ignore else */\n if (this.cancelPromise) {\n const error = new Error(`canceling ${this.name()} due to the meeting status code: ${MeetingSessionStatusCode_1.default.NoAttendeePresent}`);\n this.cancelPromise(error);\n delete this.cancelPromise;\n }\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n const attendeeId = this.context.meetingSessionConfiguration.credentials.attendeeId;\n return new Promise((resolve, reject) => {\n const handler = (presentAttendeeId, present, _externalUserId, _dropped, _pos) => {\n if (attendeeId === presentAttendeeId && present) {\n this.context.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(handler);\n resolve();\n delete this.cancelPromise;\n }\n };\n this.cancelPromise = (error) => {\n this.context.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(handler);\n reject(error);\n };\n this.context.realtimeController.realtimeSubscribeToAttendeeIdPresence(handler);\n });\n });\n }\n}\nexports.default = WaitForAttendeePresenceTask;\n//# sourceMappingURL=WaitForAttendeePresenceTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass RedundantAudioEncoder {\n constructor() {\n // Each payload must be less than 1024 bytes to fit the 10 bit block length\n this.maxRedPacketSizeBytes = 1 << 10;\n // Limit payload to 1000 bytes to handle small MTU. 1000 is chosen because in Chromium-based browsers, writing audio\n // payloads larger than 1000 bytes using the WebRTC Insertable Streams API (which is used to enable dynamic audio\n // redundancy) will cause an error to be thrown and cause audio flow to permanently stop. See\n // https://crbug.com/1248479.\n this.maxAudioPayloadSizeBytes = 1000;\n // Each payload can encode a timestamp delta of 14 bits\n this.maxRedTimestampOffset = 1 << 14;\n // 4 byte RED header\n this.redHeaderSizeBytes = 4;\n // reduced size for last RED header\n this.redLastHeaderSizeBytes = 1;\n // P-Time for Opus 20 msec packets\n // We do not support other p-times or clock rates\n this.redPacketizationTime = 960;\n // distance between redundant payloads, Opus FEC handles a distance of 1\n // TODO(https://issues.amazon.com/issues/ChimeSDKAudio-55):\n // Consider making this dynamic\n this.redPacketDistance = 2;\n // maximum number of redundant payloads per RTP packet\n this.maxRedEncodings = 2;\n // Maximum number of encodings that can be recovered with a single RED packet, assuming the primary and redundant\n // payloads have FEC.\n this.redMaxRecoveryDistance = this.redPacketDistance * this.maxRedEncodings + 1;\n // maximum history of prior payloads to keep\n // generally we will expire old entries based on timestamp\n // this limit is in place just to make sure the history does not\n // grow too large in the case of erroneous timestamp inputs\n this.maxEncodingHistorySize = 10;\n // Current number of encodings we want to send\n // to the remote end. This will be dynamically\n // updated through the setNumEncodingsFromPacketloss API\n this.numRedundantEncodings = 0;\n // Used to enable or disable redundancy\n // in response to very high packet loss events\n this.redundancyEnabled = true;\n // Loss stats are reported to the main thread every 5 seconds.\n // Since timestamp differences between 2 consecutive packets\n // give us the number of samples in each channel, 1 second\n // is equivalent to 48000 samples:\n // P-time * (1000ms/1s)\n // = (960 samples/20ms) * (1000ms/1s)\n // = 48000 samples/s\n this.lossReportInterval = 48000 * 5;\n // Maximum distance of a packet from the most recent packet timestamp\n // that we will consider for recovery.\n this.maxOutOfOrderPacketDistance = 16;\n /**\n * Below are Opus helper methods and constants.\n */\n this.OPUS_BAD_ARG = -1;\n this.OPUS_INVALID_PACKET = -4;\n // Max number of Opus frames in an Opus packet is 48 (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.5).\n this.OPUS_MAX_OPUS_FRAMES = 48;\n // Max number of bytes that any individual Opus frame can have.\n this.OPUS_MAX_FRAME_SIZE_BYTES = 1275;\n this.encodingHistory = new Array();\n this.opusPayloadType = 0;\n this.redPayloadType = 0;\n this.initializePacketLogs();\n }\n /**\n * Creates an instance of RedundantAudioEncoder and sets up callbacks.\n */\n static initializeWorker() {\n RedundantAudioEncoder.log('Initializing RedundantAudioEncoder');\n const encoder = new RedundantAudioEncoder();\n // RED encoding is done using WebRTC Encoded Transform\n // https://github.com/w3c/webrtc-encoded-transform/blob/main/explainer.md\n // Check the DedicatedWorkerGlobalScope for existence of\n // RTCRtpScriptTransformer interface. If exists, then\n // RTCRtpScriptTransform is supported by this browser.\n // @ts-ignore\n if (self.RTCRtpScriptTransformer) {\n // @ts-ignore\n self.onrtctransform = (event) => {\n if (event.transformer.options.type === 'SenderTransform') {\n encoder.setupSenderTransform(event.transformer.readable, event.transformer.writable);\n }\n else if (event.transformer.options.type === 'ReceiverTransform') {\n encoder.setupReceiverTransform(event.transformer.readable, event.transformer.writable);\n }\n else if (event.transformer.options.type === 'PassthroughTransform') {\n encoder.setupPassthroughTransform(event.transformer.readable, event.transformer.writable);\n }\n };\n }\n self.onmessage = (event) => {\n if (event.data.msgType === 'StartRedWorker') {\n encoder.setupSenderTransform(event.data.send.readable, event.data.send.writable);\n encoder.setupReceiverTransform(event.data.receive.readable, event.data.receive.writable);\n }\n else if (event.data.msgType === 'PassthroughTransform') {\n encoder.setupPassthroughTransform(event.data.send.readable, event.data.send.writable);\n encoder.setupPassthroughTransform(event.data.receive.readable, event.data.receive.writable);\n }\n else if (event.data.msgType === 'RedPayloadType') {\n encoder.setRedPayloadType(event.data.payloadType);\n }\n else if (event.data.msgType === 'OpusPayloadType') {\n encoder.setOpusPayloadType(event.data.payloadType);\n }\n else if (event.data.msgType === 'UpdateNumRedundantEncodings') {\n encoder.setNumRedundantEncodings(event.data.numRedundantEncodings);\n }\n else if (event.data.msgType === 'Enable') {\n encoder.setRedundancyEnabled(true);\n }\n else if (event.data.msgType === 'Disable') {\n encoder.setRedundancyEnabled(false);\n }\n };\n }\n /**\n * Post logs to the main thread\n */\n static log(msg) {\n if (RedundantAudioEncoder.shouldLog) {\n // @ts-ignore\n self.postMessage({\n type: 'REDWorkerLog',\n log: `[AudioRed] ${msg}`,\n });\n }\n }\n /**\n * Returns the number of encodings based on packetLoss value. This is used by `DefaultTransceiverController` to\n * determine when to alert the encoder to update the number of encodings. It also determines if we need to\n * turn off red in cases of very high packet loss to avoid congestion collapse.\n */\n static getNumRedundantEncodingsForPacketLoss(packetLoss) {\n let recommendedRedundantEncodings = 0;\n let shouldTurnOffRed = false;\n if (packetLoss <= 8) {\n recommendedRedundantEncodings = 0;\n }\n else if (packetLoss <= 18) {\n recommendedRedundantEncodings = 1;\n }\n else if (packetLoss <= 75) {\n recommendedRedundantEncodings = 2;\n }\n else {\n recommendedRedundantEncodings = 0;\n shouldTurnOffRed = true;\n }\n return [recommendedRedundantEncodings, shouldTurnOffRed];\n }\n /**\n * Sets up a passthrough (no-op) transform for the given streams.\n */\n setupPassthroughTransform(readable, writable) {\n RedundantAudioEncoder.log('Setting up passthrough transform');\n readable.pipeTo(writable);\n }\n /**\n * Sets up the transform stream and pipes the outgoing encoded audio frames through the transform function.\n */\n setupSenderTransform(readable, writable) {\n RedundantAudioEncoder.log('Setting up sender RED transform');\n const transformStream = new TransformStream({\n transform: this.senderTransform.bind(this),\n });\n readable.pipeThrough(transformStream).pipeTo(writable);\n return;\n }\n /**\n * Sets up the transform stream and pipes the received encoded audio frames through the transform function.\n */\n setupReceiverTransform(readable, writable) {\n RedundantAudioEncoder.log('Setting up receiver RED transform');\n const transformStream = new TransformStream({\n transform: this.receivePacketLogTransform.bind(this),\n });\n readable.pipeThrough(transformStream).pipeTo(writable);\n return;\n }\n /**\n * Set the RED payload type ideally obtained from local offer.\n */\n setRedPayloadType(payloadType) {\n this.redPayloadType = payloadType;\n RedundantAudioEncoder.log(`red payload type set to ${this.redPayloadType}`);\n }\n /**\n * Set the opus payload type ideally obtained from local offer.\n */\n setOpusPayloadType(payloadType) {\n this.opusPayloadType = payloadType;\n RedundantAudioEncoder.log(`opus payload type set to ${this.opusPayloadType}`);\n }\n /**\n * Set the number of redundant encodings\n */\n setNumRedundantEncodings(numRedundantEncodings) {\n this.numRedundantEncodings = numRedundantEncodings;\n if (this.numRedundantEncodings > this.maxRedEncodings) {\n this.numRedundantEncodings = this.maxRedEncodings;\n }\n RedundantAudioEncoder.log(`Updated numRedundantEncodings to ${this.numRedundantEncodings}`);\n }\n /**\n * Enable or disable redundancy in response to\n * high packet loss event.\n */\n setRedundancyEnabled(enabled) {\n this.redundancyEnabled = enabled;\n RedundantAudioEncoder.log(`redundancy ${this.redundancyEnabled ? 'enabled' : 'disabled'}`);\n }\n /**\n * Helper function to only enqueue audio frames if they do not exceed the audio payload byte limit imposed by\n * Chromium-based browsers. Chromium will throw an error (https://crbug.com/1248479) if an audio payload larger than\n * 1000 bytes is enqueued. Any controller that attempts to enqueue an audio payload larger than 1000 bytes will\n * encounter this error and will permanently stop sending or receiving audio.\n */\n enqueueAudioFrameIfPayloadSizeIsValid(\n // @ts-ignore\n frame, controller) {\n if (frame.data.byteLength > this.maxAudioPayloadSizeBytes)\n return;\n controller.enqueue(frame);\n }\n /**\n * Receives encoded frames and modifies as needed before sending to transport.\n */\n senderTransform(\n // @ts-ignore\n frame, controller) {\n const frameMetadata = frame.getMetadata();\n // @ts-ignore\n if (frameMetadata.payloadType !== this.redPayloadType) {\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n const primaryPayloadBuffer = this.getPrimaryPayload(frame.timestamp, frame.data);\n if (!primaryPayloadBuffer) {\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n const encodedBuffer = this.encode(frame.timestamp, primaryPayloadBuffer);\n /* istanbul ignore next */\n if (!encodedBuffer) {\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n frame.data = encodedBuffer;\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n /**\n * Get the primary payload from encoding\n */\n getPrimaryPayload(primaryTimestamp, frame) {\n const encodings = this.splitEncodings(primaryTimestamp, frame);\n if (!encodings || encodings.length < 1)\n return null;\n return encodings[encodings.length - 1].payload;\n }\n /**\n * Split up the encoding received into primary and redundant encodings\n * These will be ordered oldest to newest which is the same ordering\n * in the RTP red payload.\n */\n splitEncodings(primaryTimestamp, frame, getFecInfo = false, primarySequenceNumber = undefined) {\n // process RED headers (according to RFC 2198)\n // 0 1 2 3\n // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\n // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n // |F| block PT | timestamp offset | block length |\n // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n //\n // last header\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // |0| Block PT |\n // +-+-+-+-+-+-+-+-+\n const payload = new DataView(frame);\n let payloadSizeBytes = payload.byteLength;\n let totalPayloadSizeBytes = 0;\n let totalHeaderSizeBytes = 0;\n let primaryPayloadSizeBytes = 0;\n let payloadOffset = 0;\n let gotLastBlock = false;\n const encodings = new Array();\n const redundantEncodingBlockLengths = new Array();\n const redundantEncodingTimestamps = new Array();\n while (payloadSizeBytes > 0) {\n gotLastBlock = (payload.getUint8(payloadOffset) & 0x80) === 0;\n if (gotLastBlock) {\n // Bits 1 through 7 are payload type\n const payloadType = payload.getUint8(payloadOffset) & 0x7f;\n // Unexpected payload type. This is a bad packet.\n if (payloadType !== this.opusPayloadType) {\n return null;\n }\n totalPayloadSizeBytes += this.redLastHeaderSizeBytes;\n totalHeaderSizeBytes += this.redLastHeaderSizeBytes;\n // Accumulated block lengths are equal to or larger than the buffer, which means there is no primary block. This\n // is a bad packet.\n if (totalPayloadSizeBytes >= payload.byteLength) {\n return null;\n }\n primaryPayloadSizeBytes = payload.byteLength - totalPayloadSizeBytes;\n break;\n }\n else {\n if (payloadSizeBytes < this.redHeaderSizeBytes) {\n return null;\n }\n // Bits 22 through 31 are payload length\n const blockLength = ((payload.getUint8(payloadOffset + 2) & 0x03) << 8) + payload.getUint8(payloadOffset + 3);\n redundantEncodingBlockLengths.push(blockLength);\n const timestampOffset = payload.getUint16(payloadOffset + 1) >> 2;\n const timestamp = primaryTimestamp - timestampOffset;\n redundantEncodingTimestamps.push(timestamp);\n totalPayloadSizeBytes += blockLength + this.redHeaderSizeBytes;\n totalHeaderSizeBytes += this.redHeaderSizeBytes;\n payloadOffset += this.redHeaderSizeBytes;\n payloadSizeBytes -= this.redHeaderSizeBytes;\n }\n }\n // The last block was never found. This is a bad packet.\n if (!gotLastBlock) {\n return null;\n }\n let redundantPayloadOffset = totalHeaderSizeBytes;\n for (let i = 0; i < redundantEncodingTimestamps.length; i++) {\n const redundantPayloadBuffer = new ArrayBuffer(redundantEncodingBlockLengths[i]);\n const redundantPayloadArray = new Uint8Array(redundantPayloadBuffer);\n redundantPayloadArray.set(new Uint8Array(payload.buffer, redundantPayloadOffset, redundantEncodingBlockLengths[i]), 0);\n const encoding = {\n timestamp: redundantEncodingTimestamps[i],\n payload: redundantPayloadBuffer,\n isRedundant: true,\n };\n if (getFecInfo) {\n encoding.hasFec = this.opusPacketHasFec(new DataView(redundantPayloadBuffer), redundantPayloadBuffer.byteLength);\n }\n encodings.push(encoding);\n redundantPayloadOffset += redundantEncodingBlockLengths[i];\n }\n const primaryPayloadOffset = payload.byteLength - primaryPayloadSizeBytes;\n const primaryPayloadBuffer = new ArrayBuffer(primaryPayloadSizeBytes);\n const primaryArray = new Uint8Array(primaryPayloadBuffer);\n primaryArray.set(new Uint8Array(payload.buffer, primaryPayloadOffset, primaryPayloadSizeBytes), 0);\n const encoding = {\n timestamp: primaryTimestamp,\n payload: primaryPayloadBuffer,\n isRedundant: false,\n seq: primarySequenceNumber,\n };\n if (getFecInfo) {\n encoding.hasFec = this.opusPacketHasFec(new DataView(primaryPayloadBuffer), primaryPayloadBuffer.byteLength);\n }\n encodings.push(encoding);\n return encodings;\n }\n /**\n * Create a new encoding with current primary payload and the older payloads of choice.\n */\n encode(primaryTimestamp, primaryPayload) {\n const primaryPayloadSize = primaryPayload.byteLength;\n // Payload size needs to be valid.\n if (primaryPayloadSize === 0 ||\n primaryPayloadSize >= this.maxRedPacketSizeBytes ||\n primaryPayloadSize >= this.maxAudioPayloadSizeBytes) {\n return null;\n }\n const numRedundantEncodings = this.numRedundantEncodings;\n let headerSizeBytes = this.redLastHeaderSizeBytes;\n let payloadSizeBytes = primaryPayloadSize;\n let bytesAvailable = this.maxAudioPayloadSizeBytes - primaryPayloadSize - headerSizeBytes;\n const redundantEncodingTimestamps = new Array();\n const redundantEncodingPayloads = new Array();\n // If redundancy is disabled then only send the primary payload\n if (this.redundancyEnabled) {\n // Determine how much redundancy we can fit into our packet\n let redundantTimestamp = this.uint32WrapAround(primaryTimestamp - this.redPacketizationTime * this.redPacketDistance);\n for (let i = 0; i < numRedundantEncodings; i++) {\n // Do not add redundant encodings that are beyond the maximum timestamp offset.\n if (this.uint32WrapAround(primaryTimestamp - redundantTimestamp) >= this.maxRedTimestampOffset) {\n break;\n }\n let findTimestamp = redundantTimestamp;\n let encoding = this.encodingHistory.find(e => e.timestamp === findTimestamp);\n if (!encoding) {\n // If not found or not important then look for the previous packet.\n // The current packet may have included FEC for the previous, so just\n // use the previous packet instead provided that it has voice activity.\n findTimestamp = this.uint32WrapAround(redundantTimestamp - this.redPacketizationTime);\n encoding = this.encodingHistory.find(e => e.timestamp === findTimestamp);\n }\n if (encoding) {\n const redundantEncodingSizeBytes = encoding.payload.byteLength;\n // Only add redundancy if there are enough bytes available.\n if (bytesAvailable < this.redHeaderSizeBytes + redundantEncodingSizeBytes)\n break;\n bytesAvailable -= this.redHeaderSizeBytes + redundantEncodingSizeBytes;\n headerSizeBytes += this.redHeaderSizeBytes;\n payloadSizeBytes += redundantEncodingSizeBytes;\n redundantEncodingTimestamps.unshift(encoding.timestamp);\n redundantEncodingPayloads.unshift(encoding.payload);\n }\n redundantTimestamp -= this.redPacketizationTime * this.redPacketDistance;\n redundantTimestamp = this.uint32WrapAround(redundantTimestamp);\n }\n }\n const redPayloadBuffer = new ArrayBuffer(headerSizeBytes + payloadSizeBytes);\n const redPayloadView = new DataView(redPayloadBuffer);\n // Add redundant encoding header(s) to new buffer\n let redPayloadOffset = 0;\n for (let i = 0; i < redundantEncodingTimestamps.length; i++) {\n const timestampDelta = primaryTimestamp - redundantEncodingTimestamps[i];\n redPayloadView.setUint8(redPayloadOffset, this.opusPayloadType | 0x80);\n redPayloadView.setUint16(redPayloadOffset + 1, (timestampDelta << 2) | (redundantEncodingPayloads[i].byteLength >> 8));\n redPayloadView.setUint8(redPayloadOffset + 3, redundantEncodingPayloads[i].byteLength & 0xff);\n redPayloadOffset += this.redHeaderSizeBytes;\n }\n // Add primary encoding header to new buffer\n redPayloadView.setUint8(redPayloadOffset, this.opusPayloadType);\n redPayloadOffset += this.redLastHeaderSizeBytes;\n // Add redundant payload(s) to new buffer\n const redPayloadArray = new Uint8Array(redPayloadBuffer);\n for (let i = 0; i < redundantEncodingPayloads.length; i++) {\n redPayloadArray.set(new Uint8Array(redundantEncodingPayloads[i]), redPayloadOffset);\n redPayloadOffset += redundantEncodingPayloads[i].byteLength;\n }\n // Add primary payload to new buffer\n redPayloadArray.set(new Uint8Array(primaryPayload), redPayloadOffset);\n redPayloadOffset += primaryPayload.byteLength;\n /* istanbul ignore next */\n // Sanity check that we got the expected total payload size.\n if (redPayloadOffset !== headerSizeBytes + payloadSizeBytes)\n return null;\n this.updateEncodingHistory(primaryTimestamp, primaryPayload);\n return redPayloadBuffer;\n }\n /**\n * Update the encoding history with the latest primary encoding\n */\n updateEncodingHistory(primaryTimestamp, primaryPayload) {\n // Remove encodings from the history if they are too old.\n for (const encoding of this.encodingHistory) {\n const maxTimestampDelta = this.redPacketizationTime * this.redMaxRecoveryDistance;\n if (primaryTimestamp - encoding.timestamp >= maxTimestampDelta) {\n this.encodingHistory.shift();\n }\n else {\n break;\n }\n }\n // Only add an encoding to the history if the encoding is deemed to be important. An encoding is important if it is\n // a CELT-only packet or contains voice activity.\n const packet = new DataView(primaryPayload);\n if (this.opusPacketIsCeltOnly(packet) ||\n this.opusPacketHasVoiceActivity(packet, packet.byteLength) > 0) {\n // Check if adding an encoding will cause the length of the encoding history to exceed the maximum history size.\n // This is not expected to happen but could occur if we get incorrect timestamps. We want to make sure our memory\n // usage is bounded. In this case, just clear the history and start over from empty.\n if (this.encodingHistory.length + 1 > this.maxEncodingHistorySize)\n this.encodingHistory.length = 0;\n this.encodingHistory.push({ timestamp: primaryTimestamp, payload: primaryPayload });\n }\n }\n /**\n * Initialize packet logs and metric values.\n */\n initializePacketLogs() {\n // The extra space from the max RED recovery distance is to ensure that we do not incorrectly count recovery for\n // packets that have already been received but are outside of the max out-of-order distance.\n const packetLogSize = this.maxOutOfOrderPacketDistance + this.redMaxRecoveryDistance;\n this.primaryPacketLog = {\n window: new Array(packetLogSize),\n index: 0,\n windowSize: packetLogSize,\n };\n this.redRecoveryLog = {\n window: new Array(packetLogSize),\n index: 0,\n windowSize: packetLogSize,\n };\n this.fecRecoveryLog = {\n window: new Array(packetLogSize),\n index: 0,\n windowSize: packetLogSize,\n };\n this.totalAudioPacketsExpected = 0;\n this.totalAudioPacketsLost = 0;\n this.totalAudioPacketsRecoveredRed = 0;\n this.totalAudioPacketsRecoveredFec = 0;\n }\n /**\n * Receives encoded frames from the server\n * and adds the timestamps to a packet log\n * to calculate an approximate recovery metric.\n */\n receivePacketLogTransform(\n // @ts-ignore\n frame, controller) {\n const frameMetadata = frame.getMetadata();\n // @ts-ignore\n if (frameMetadata.payloadType !== this.redPayloadType) {\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n // @ts-ignore\n const encodings = this.splitEncodings(frame.timestamp, frame.data, \n /*getFecInfo*/ true, frameMetadata.sequenceNumber);\n if (!encodings) {\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n return;\n }\n for (let i = encodings.length - 1; i >= 0; i--) {\n if (this.updateLossStats(encodings[i])) {\n this.updateRedStats(encodings[i]);\n this.updateFecStats(encodings[i]);\n }\n }\n this.maybeReportLossStats(encodings[encodings.length - 1].timestamp, frameMetadata.synchronizationSource);\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\n }\n /**\n * Adds a timestamp to the primary packet log.\n * This also updates totalAudioPacketsLost and totalAudioPacketsExpected by looking\n * at the difference between timestamps.\n *\n * @param encoding : The encoding to be analyzed\n * @returns false if sequence number was greater than max out of order distance\n * true otherwise\n */\n updateLossStats(encoding) {\n if (encoding.isRedundant)\n return true;\n const timestamp = encoding.timestamp;\n const seq = encoding.seq;\n if (this.totalAudioPacketsExpected === 0) {\n this.totalAudioPacketsExpected = 1;\n this.newestSequenceNumber = seq;\n this.addTimestamp(this.primaryPacketLog, timestamp);\n return true;\n }\n const diff = this.int16(seq - this.newestSequenceNumber);\n if (diff < -this.maxOutOfOrderPacketDistance)\n return false;\n if (diff < 0) {\n if (!this.hasTimestamp(this.primaryPacketLog, timestamp)) {\n if (this.totalAudioPacketsLost > 0)\n this.totalAudioPacketsLost--;\n this.addTimestamp(this.primaryPacketLog, timestamp);\n this.removeFromRecoveryWindows(timestamp);\n }\n }\n else if (diff > 1) {\n this.totalAudioPacketsLost += diff - 1;\n }\n if (diff > 0) {\n this.totalAudioPacketsExpected += diff;\n this.newestSequenceNumber = encoding.seq;\n this.addTimestamp(this.primaryPacketLog, timestamp);\n }\n return true;\n }\n /**\n * Adds a timestamp to the red recovery log if it is not present in\n * the primary packet log and if it's not too old.\n *\n * @param encoding : The encoding to be analyzed\n */\n updateRedStats(encoding) {\n if (!encoding.isRedundant || this.totalAudioPacketsLost === 0)\n return;\n const timestamp = encoding.timestamp;\n if (!this.hasTimestamp(this.primaryPacketLog, timestamp)) {\n if (!this.hasTimestamp(this.redRecoveryLog, timestamp)) {\n this.totalAudioPacketsRecoveredRed++;\n this.addTimestamp(this.redRecoveryLog, timestamp);\n }\n if (this.removeTimestamp(this.fecRecoveryLog, timestamp)) {\n /* istanbul ignore else */\n if (this.totalAudioPacketsRecoveredFec > 0)\n this.totalAudioPacketsRecoveredFec--;\n }\n }\n }\n /**\n * Adds a timestamp to the fec recovery log if it is not present in\n * the primary packet log and red recovery log and if it is not too old.\n *\n * @param encoding : The encoding to be analyzed\n */\n updateFecStats(encoding) {\n if (!encoding.hasFec || this.totalAudioPacketsLost === 0)\n return;\n const fecTimestamp = encoding.timestamp - this.redPacketizationTime;\n if (this.hasTimestamp(this.primaryPacketLog, fecTimestamp) ||\n this.hasTimestamp(this.redRecoveryLog, fecTimestamp) ||\n this.hasTimestamp(this.fecRecoveryLog, fecTimestamp)) {\n return;\n }\n this.totalAudioPacketsRecoveredFec++;\n this.addTimestamp(this.fecRecoveryLog, fecTimestamp);\n }\n /**\n * Reports loss metrics to DefaultTransceiverController\n *\n * @param timestamp : Timestamp of most recent primary packet\n */\n maybeReportLossStats(timestamp, ssrc) {\n if (timestamp - this.lastLossReportTimestamp < this.lossReportInterval)\n return;\n /* istanbul ignore next */\n if (RedundantAudioEncoder.shouldReportStats) {\n // @ts-ignore\n self.postMessage({\n type: 'RedundantAudioEncoderStats',\n ssrc,\n totalAudioPacketsLost: this.totalAudioPacketsLost,\n totalAudioPacketsExpected: this.totalAudioPacketsExpected,\n totalAudioPacketsRecoveredRed: this.totalAudioPacketsRecoveredRed,\n totalAudioPacketsRecoveredFec: this.totalAudioPacketsRecoveredFec,\n });\n }\n this.lastLossReportTimestamp = timestamp;\n }\n /**\n * Adds a timestamp to a packet log\n *\n * @param packetLog : The packetlog to add the timestamp to\n * @param timestamp : The timestamp that should be added\n */\n addTimestamp(packetLog, timestamp) {\n packetLog.window[packetLog.index] = timestamp;\n packetLog.index = (packetLog.index + 1) % packetLog.windowSize;\n }\n /**\n * Checks if a timestamp is in a packetlog\n *\n * @param packetLog : The packetlog to search\n * @param timestamp : The timestamp to search for\n * @returns true if timestamp is present, false otherwise\n */\n hasTimestamp(packetLog, timestamp) {\n const element = packetLog.window.find(t => t === timestamp);\n return !!element;\n }\n /**\n * Removes a timestamp from a packet log\n *\n * @param packetLog : The packetlog from which the timestamp should be removed\n * @param timestamp : The timestamp to be removed\n * @returns true if timestamp was present in the log and removed, false otherwise\n */\n removeTimestamp(packetLog, timestamp) {\n const index = packetLog.window.indexOf(timestamp);\n if (index >= 0) {\n packetLog.window[index] = undefined;\n return true;\n }\n return false;\n }\n /**\n * Removes a timestamp from red and fec recovery windows.\n *\n * @param timestamp : The timestamp to be removed\n */\n removeFromRecoveryWindows(timestamp) {\n let removed = this.removeTimestamp(this.redRecoveryLog, timestamp);\n if (removed) {\n if (this.totalAudioPacketsRecoveredRed > 0)\n this.totalAudioPacketsRecoveredRed--;\n }\n removed = this.removeTimestamp(this.fecRecoveryLog, timestamp);\n if (removed) {\n if (this.totalAudioPacketsRecoveredFec > 0)\n this.totalAudioPacketsRecoveredFec--;\n }\n }\n /**\n * Converts the supplied argument to 32-bit unsigned integer\n */\n uint32WrapAround(num) {\n const mod = 4294967296; // 2^32\n let res = num;\n if (num >= mod) {\n res = num - mod;\n }\n else if (num < 0) {\n res = mod + num;\n }\n return res;\n }\n /**\n * Converts the supplied argument to 16-bit signed integer\n */\n int16(num) {\n return (num << 16) >> 16;\n }\n /**\n * Determines if an Opus packet is in CELT-only mode.\n *\n * @param packet Opus packet.\n * @returns `true` if the packet is in CELT-only mode.\n */\n opusPacketIsCeltOnly(packet) {\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\n // 0\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // | config |s| c |\n // +-+-+-+-+-+-+-+-+\n // Since CELT-only packets are represented using configurations 16 to 31, the highest 'config' bit will always be 1\n // for CELT-only packets.\n return !!(packet.getUint8(0) & 0x80);\n }\n /**\n * Gets the number of samples per frame from an Opus packet.\n *\n * @param packet Opus packet. This must contain at least one byte of data.\n * @param sampleRateHz 32-bit integer sampling rate in Hz. This must be a multiple of 400 or inaccurate results will\n * be returned.\n * @returns Number of samples per frame.\n */\n opusPacketGetSamplesPerFrame(packet, sampleRateHz) {\n // Sample rate must be a 32-bit integer.\n sampleRateHz = Math.round(sampleRateHz);\n sampleRateHz = Math.min(Math.max(sampleRateHz, -(Math.pow(2, 32))), Math.pow(2, 32) - 1);\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\n // 0\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // | config |s| c |\n // +-+-+-+-+-+-+-+-+\n let numSamples;\n let frameSizeOption;\n // Case for CELT-only packet.\n if (this.opusPacketIsCeltOnly(packet)) {\n // The lower 3 'config' bits indicate the frame size option.\n frameSizeOption = (packet.getUint8(0) >> 3) & 0x3;\n // The frame size options 0, 1, 2, 3 correspond to frame sizes of 2.5, 5, 10, 20 ms. Notice that the frame sizes\n // can be represented as (2.5 * 2^0), (2.5 * 2^1), (2.5 * 2^2), (2.5 * 2^3) ms. So, the number of samples can be\n // calculated as follows:\n // (sample/s) * (1s/1000ms) * (2.5ms) * 2^(frameSizeOption)\n // = (sample/s) * (1s/400) * 2^(frameSizeOption)\n // = (sample/s) * 2^(frameSizeOption) * (1s/400)\n numSamples = (sampleRateHz << frameSizeOption) / 400;\n }\n // Case for Hybrid packet. Since Hybrid packets are represented using configurations 12 to 15, bits 1 and 2 in the\n // above TOC byte diagram will both be 1.\n else if ((packet.getUint8(0) & 0x60) === 0x60) {\n // In the case of configuration 13 or 15, bit 4 in the above TOC byte diagram will be 1. Configurations 13 and 15\n // correspond to a 20ms frame size, so the number of samples is calculated as follows:\n // (sample/s) * (1s/1000ms) * (20ms)\n // = (sample/s) * (1s/50)\n //\n // In the case of configuration 12 or 14, bit 4 in the above TOC byte diagram will be 0. Configurations 12 and 14\n // correspond to a 10ms frame size, so the number of samples is calculated as follows:\n // (sample/s) * (1s/1000ms) * (10ms)\n // = (sample/s) * (1s/100)\n numSamples = packet.getUint8(0) & 0x08 ? sampleRateHz / 50 : sampleRateHz / 100;\n }\n // Case for SILK-only packet.\n else {\n // The lower 3 'config' bits indicate the frame size option for SILK-only packets.\n frameSizeOption = (packet.getUint8(0) >> 3) & 0x3;\n if (frameSizeOption === 3) {\n // Frame size option 3 corresponds to a frame size of 60ms, so the number of samples is calculated as follows:\n // (sample/s) * (1s/1000ms) * (60ms)\n // = (sample/s) * (60ms) * (1s/1000ms)\n numSamples = (sampleRateHz * 60) / 1000;\n }\n else {\n // The frame size options 0, 1, 2 correspond to frame sizes of 10, 20, 40 ms. Notice that the frame sizes can be\n // represented as (10 * 2^0), (10 * 2^1), (10 * 2^2) ms. So, the number of samples can be calculated as follows:\n // (sample/s) * (1s/1000ms) * (10ms) * 2^(frameSizeOption)\n // = (sample/s) * (1s/100) * 2^(frameSizeOption)\n // = (sample/s) * 2^(frameSizeOption) * (1s/100)\n numSamples = (sampleRateHz << frameSizeOption) / 100;\n }\n }\n return numSamples;\n }\n /**\n * Gets the number of SILK frames per Opus frame.\n *\n * @param packet Opus packet.\n * @returns Number of SILK frames per Opus frame.\n */\n opusNumSilkFrames(packet) {\n // For computing the frame length in ms, the sample rate is not important since it cancels out. We use 48 kHz, but\n // any valid sample rate would work.\n //\n // To calculate the length of a frame (with a 48kHz sample rate) in ms:\n // (samples/frame) * (1s/48000 samples) * (1000ms/s)\n // = (samples/frame) * (1000ms/48000 samples)\n // = (samples/frame) * (1ms/48 samples)\n let frameLengthMs = this.opusPacketGetSamplesPerFrame(packet, 48000) / 48;\n if (frameLengthMs < 10)\n frameLengthMs = 10;\n // The number of SILK frames per Opus frame is described in https://www.rfc-editor.org/rfc/rfc6716#section-4.2.2.\n switch (frameLengthMs) {\n case 10:\n case 20:\n return 1;\n case 40:\n return 2;\n case 60:\n return 3;\n // It is not possible to reach the default case since an Opus packet can only encode sizes of 2.5, 5, 10, 20, 40,\n // or 60 ms, so we ignore the default case for test coverage.\n /* istanbul ignore next */\n default:\n return 0;\n }\n }\n /**\n * Gets the number of channels from an Opus packet.\n *\n * @param packet Opus packet.\n * @returns Number of channels.\n */\n opusPacketGetNumChannels(packet) {\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\n // 0\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // | config |s| c |\n // +-+-+-+-+-+-+-+-+\n // The 's' bit indicates mono or stereo audio, with 0 indicating mono and 1 indicating stereo.\n return packet.getUint8(0) & 0x4 ? 2 : 1;\n }\n /**\n * Determine the size (in bytes) of an Opus frame.\n *\n * @param packet Opus packet.\n * @param byteOffset Offset (from the start of the packet) to the byte containing the size information.\n * @param remainingBytes Remaining number of bytes to parse from the Opus packet.\n * @param sizeBytes Variable to store the parsed frame size (in bytes).\n * @returns Number of bytes that were parsed to determine the frame size.\n */\n opusParseSize(packet, byteOffset, remainingBytes, sizeBytes) {\n // See https://www.rfc-editor.org/rfc/rfc6716#section-3.2.1 for an explanation of how frame size is represented.\n // If there are no remaining bytes to parse the size from, then the size cannot be determined.\n if (remainingBytes < 1) {\n sizeBytes[0] = -1;\n return -1;\n }\n // If the first byte is in the range 0...251, then this value is the size of the frame.\n else if (packet.getUint8(byteOffset) < 252) {\n sizeBytes[0] = packet.getUint8(byteOffset);\n return 1;\n }\n // If the first byte is in the range 252...255, a second byte is needed. If there is no second byte, then the size\n // cannot be determined.\n else if (remainingBytes < 2) {\n sizeBytes[0] = -1;\n return -1;\n }\n // The total size of the frame given two size bytes is:\n // (4 * secondSizeByte) + firstSizeByte\n else {\n sizeBytes[0] = 4 * packet.getUint8(byteOffset + 1) + packet.getUint8(byteOffset);\n return 2;\n }\n }\n /**\n * Parse binary data containing an Opus packet into one or more Opus frames.\n *\n * @param data Binary data containing an Opus packet to be parsed. The data should begin with the first byte (i.e the\n * TOC byte) of an Opus packet. Note that the size of the data does not have to equal the size of the\n * contained Opus packet.\n * @param lenBytes Size of the data (in bytes).\n * @param selfDelimited Indicates if the Opus packet is self-delimiting\n * (https://www.rfc-editor.org/rfc/rfc6716#appendix-B).\n * @param tocByte Optional variable to store the TOC (table of contents) byte.\n * @param frameOffsets Optional variable to store the offsets (from the start of the data) to the first bytes of each\n * Opus frame.\n * @param frameSizes Required variable to store the sizes (in bytes) of each Opus frame.\n * @param payloadOffset Optional variable to store the offset (from the start of the data) to the first byte of the\n * payload.\n * @param packetLenBytes Optional variable to store the length of the Opus packet (in bytes).\n * @returns Number of Opus frames.\n */\n opusPacketParseImpl(data, lenBytes, selfDelimited, tocByte, frameOffsets, frameSizes, payloadOffset, packetLenBytes) {\n if (!frameSizes || lenBytes < 0)\n return this.OPUS_BAD_ARG;\n if (lenBytes === 0)\n return this.OPUS_INVALID_PACKET;\n // The number of Opus frames in the packet.\n let numFrames;\n // Intermediate storage for the number of bytes parsed to determine the size of a frame.\n let numBytesParsed;\n // The number of the padding bytes (excluding the padding count bytes) in the packet.\n let paddingBytes = 0;\n // Indicates whether CBR (constant bitrate) framing is used.\n let cbr = false;\n // The TOC (table of contents) byte (https://www.rfc-editor.org/rfc/rfc6716#section-3.1).\n const toc = data.getUint8(0);\n // Store the TOC byte.\n if (tocByte)\n tocByte[0] = toc;\n // The remaining number of bytes to parse from the packet. Note that the TOC byte has already been parsed, hence the\n // minus 1.\n let remainingBytes = lenBytes - 1;\n // This keeps track of where we are in the packet. This starts at 1 since the TOC byte has already been read.\n let byteOffset = 1;\n // The size of the last Opus frame in bytes.\n let lastSizeBytes = remainingBytes;\n // Read the `c` bits (i.e. code bits) from the TOC byte.\n switch (toc & 0x3) {\n // A code 0 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.2) has one frame.\n case 0:\n numFrames = 1;\n break;\n // A code 1 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.3) has two CBR (constant bitrate) frames.\n case 1:\n numFrames = 2;\n cbr = true;\n if (!selfDelimited) {\n // Undelimited code 1 packets must be an even number of data bytes, otherwise the packet is invalid.\n if (remainingBytes & 0x1)\n return this.OPUS_INVALID_PACKET;\n // The sizes of both frames are equal (i.e. half of the number of data bytes).\n lastSizeBytes = remainingBytes / 2;\n // If `lastSizeBytes` is too large, we will catch it later.\n frameSizes[0][0] = lastSizeBytes;\n }\n break;\n // A code 2 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.4) has two VBR (variable bitrate) frames.\n case 2:\n numFrames = 2;\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[0]);\n remainingBytes -= numBytesParsed;\n // The parsed size of the first frame cannot be larger than the number of remaining bytes in the packet.\n if (frameSizes[0][0] < 0 || frameSizes[0][0] > remainingBytes) {\n return this.OPUS_INVALID_PACKET;\n }\n byteOffset += numBytesParsed;\n // The size of the second frame is the remaining number of bytes after the first frame.\n lastSizeBytes = remainingBytes - frameSizes[0][0];\n break;\n // A code 3 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.5) has multiple CBR/VBR frames (from 0 to\n // 120 ms).\n default:\n // Code 3 packets must have at least 2 bytes (i.e. at least 1 byte after the TOC byte).\n if (remainingBytes < 1)\n return this.OPUS_INVALID_PACKET;\n // Frame count byte format:\n // 0\n // 0 1 2 3 4 5 6 7\n // +-+-+-+-+-+-+-+-+\n // |v|p| M |\n // +-+-+-+-+-+-+-+-+\n //\n // Read the frame count byte, which immediately follows the TOC byte.\n const frameCountByte = data.getUint8(byteOffset++);\n --remainingBytes;\n // Read the 'M' bits of the frame count byte, which encode the number of frames.\n numFrames = frameCountByte & 0x3f;\n // The number of frames in a code 3 packet must not be 0.\n if (numFrames <= 0)\n return this.OPUS_INVALID_PACKET;\n const samplesPerFrame = this.opusPacketGetSamplesPerFrame(data, 48000);\n // A single frame can have at most 2880 samples, which happens in the case where 60ms of 48kHz audio is encoded\n // per frame. A code 3 packet cannot contain more than 120ms of audio, so the total number of samples cannot\n // exceed 2880 * 2 = 5760.\n if (samplesPerFrame * numFrames > 5760)\n return this.OPUS_INVALID_PACKET;\n // Parse padding bytes if the 'p' bit is 1.\n if (frameCountByte & 0x40) {\n let paddingCountByte;\n let numPaddingBytes;\n // Remove padding bytes (including padding count bytes) from the remaining byte count.\n do {\n // Sanity check that there are enough bytes to parse and remove the padding.\n if (remainingBytes <= 0)\n return this.OPUS_INVALID_PACKET;\n // Get the next padding count byte.\n paddingCountByte = data.getUint8(byteOffset++);\n --remainingBytes;\n // If the padding count byte has a value in the range 0...254, then the total size of the padding is the\n // value in the padding count byte.\n //\n // If the padding count byte has value 255, then the total size of the padding is 254 plus the value in the\n // next padding count byte. Therefore, keep reading padding count bytes while the value is 255.\n numPaddingBytes = paddingCountByte === 255 ? 254 : paddingCountByte;\n remainingBytes -= numPaddingBytes;\n paddingBytes += numPaddingBytes;\n } while (paddingCountByte === 255);\n }\n // Sanity check that the remaining number of bytes is not negative after removing the padding.\n if (remainingBytes < 0)\n return this.OPUS_INVALID_PACKET;\n // Read the 'v' bit (i.e. VBR bit).\n cbr = !(frameCountByte & 0x80);\n // VBR case\n if (!cbr) {\n lastSizeBytes = remainingBytes;\n // Let M be the number of frames. There will be M - 1 frame length indicators (which can be 1 or 2 bytes)\n // corresponding to the lengths of frames 0 to M - 2. The size of the last frame (i.e. frame M - 1) is the\n // number of data bytes after the end of frame M - 2 and before the start of the padding bytes.\n for (let i = 0; i < numFrames - 1; ++i) {\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[i]);\n remainingBytes -= numBytesParsed;\n // The remaining number of data bytes must be enough to contain each frame.\n if (frameSizes[i][0] < 0 || frameSizes[i][0] > remainingBytes) {\n return this.OPUS_INVALID_PACKET;\n }\n byteOffset += numBytesParsed;\n lastSizeBytes -= numBytesParsed + frameSizes[i][0];\n }\n // Sanity check that the size of the last frame is not negative.\n if (lastSizeBytes < 0)\n return this.OPUS_INVALID_PACKET;\n }\n // CBR case\n else if (!selfDelimited) {\n // The size of each frame is the number of data bytes divided by the number of frames.\n lastSizeBytes = Math.trunc(remainingBytes / numFrames);\n // The number of data bytes must be a non-negative integer multiple of the number of frames.\n if (lastSizeBytes * numFrames !== remainingBytes)\n return this.OPUS_INVALID_PACKET;\n // All frames have equal size in the undelimited CBR case.\n for (let i = 0; i < numFrames - 1; ++i) {\n frameSizes[i][0] = lastSizeBytes;\n }\n }\n }\n // Self-delimited framing uses an extra 1 or 2 bytes, immediately preceding the data bytes, to indicate either the\n // size of the last frame (for code 0, code 2, and VBR code 3 packets) or the size of all the frames (for code 1 and\n // CBR code 3 packets). See https://www.rfc-editor.org/rfc/rfc6716#appendix-B.\n if (selfDelimited) {\n // The extra frame size byte(s) will always indicate the size of the last frame.\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[numFrames - 1]);\n remainingBytes -= numBytesParsed;\n // There must be enough data bytes for the last frame.\n if (frameSizes[numFrames - 1][0] < 0 || frameSizes[numFrames - 1][0] > remainingBytes) {\n return this.OPUS_INVALID_PACKET;\n }\n byteOffset += numBytesParsed;\n // For CBR packets, the sizes of all the frames are equal.\n if (cbr) {\n // There must be enough data bytes for all the frames.\n if (frameSizes[numFrames - 1][0] * numFrames > remainingBytes) {\n return this.OPUS_INVALID_PACKET;\n }\n for (let i = 0; i < numFrames - 1; ++i) {\n frameSizes[i][0] = frameSizes[numFrames - 1][0];\n }\n }\n // At this point, `lastSizeBytes` contains the size of the last frame plus the size of the extra frame size\n // byte(s), so sanity check that `lastSizeBytes` is the upper bound for the size of the last frame.\n else if (!(numBytesParsed + frameSizes[numFrames - 1][0] <= lastSizeBytes)) {\n return this.OPUS_INVALID_PACKET;\n }\n }\n // Undelimited case\n else {\n // Because the size of the last packet is not encoded explicitly, it is possible that the size of the last packet\n // (or of all the packets, for the CBR case) is larger than maximum frame size.\n if (lastSizeBytes > this.OPUS_MAX_FRAME_SIZE_BYTES)\n return this.OPUS_INVALID_PACKET;\n frameSizes[numFrames - 1][0] = lastSizeBytes;\n }\n // Store the offset to the start of the payload.\n if (payloadOffset)\n payloadOffset[0] = byteOffset;\n // Store the offsets to the start of each frame.\n for (let i = 0; i < numFrames; ++i) {\n if (frameOffsets)\n frameOffsets[i][0] = byteOffset;\n byteOffset += frameSizes[i][0];\n }\n // Store the length of the Opus packet.\n if (packetLenBytes)\n packetLenBytes[0] = byteOffset + paddingBytes;\n return numFrames;\n }\n /**\n * Parse a single undelimited Opus packet into one or more Opus frames.\n *\n * @param packet Opus packet to be parsed.\n * @param lenBytes Size of the packet (in bytes).\n * @param tocByte Optional variable to store the TOC (table of contents) byte.\n * @param frameOffsets Optional variable to store the offsets (from the start of the packet) to the first bytes of\n * each Opus frame.\n * @param frameSizes Required variable to store the sizes (in bytes) of each Opus frame.\n * @param payloadOffset Optional variable to store the offset (from the start of the packet) to the first byte of the\n * payload.\n * @returns Number of Opus frames.\n */\n opusPacketParse(packet, lenBytes, tocByte, frameOffsets, frameSizes, payloadOffset) {\n return this.opusPacketParseImpl(packet, lenBytes, \n /* selfDelimited */ false, tocByte, frameOffsets, frameSizes, payloadOffset, null);\n }\n /**\n * This function returns the SILK VAD (voice activity detection) information encoded in the Opus packet. For CELT-only\n * packets that do not have VAD information, it returns -1.\n *\n * @param packet Opus packet.\n * @param lenBytes Size of the packet (in bytes).\n * @returns 0: no frame had the VAD flag set.\n * 1: at least one frame had the VAD flag set.\n * -1: VAD status could not be determined.\n */\n opusPacketHasVoiceActivity(packet, lenBytes) {\n if (!packet || lenBytes <= 0)\n return 0;\n // In CELT-only mode, we can not determine whether there is VAD.\n if (this.opusPacketIsCeltOnly(packet))\n return -1;\n const numSilkFrames = this.opusNumSilkFrames(packet);\n // It is not possible for `opusNumSilkFrames()` to return 0, so we ignore the next sanity check for test coverage.\n /* istanbul ignore next */\n if (numSilkFrames === 0)\n return -1;\n const opusFrameOffsets = new Array(this.OPUS_MAX_OPUS_FRAMES);\n const opusFrameSizes = new Array(this.OPUS_MAX_OPUS_FRAMES);\n for (let i = 0; i < this.OPUS_MAX_OPUS_FRAMES; ++i) {\n opusFrameOffsets[i] = [undefined];\n opusFrameSizes[i] = [undefined];\n }\n // Parse packet to get the Opus frames.\n const numOpusFrames = this.opusPacketParse(packet, lenBytes, null, opusFrameOffsets, opusFrameSizes, null);\n // VAD status cannot be determined for invalid packets.\n if (numOpusFrames < 0)\n return -1;\n // Iterate over all Opus frames, which may contain multiple SILK frames, to determine the VAD status.\n for (let i = 0; i < numOpusFrames; ++i) {\n if (opusFrameSizes[i][0] < 1)\n continue;\n // LP layer header bits format (https://www.rfc-editor.org/rfc/rfc6716#section-4.2.3):\n //\n // Mono case:\n // +-----------------+----------+\n // | 1 to 3 VAD bits | LBRR bit |\n // +-----------------+----------+\n //\n // Stereo case:\n // +---------------------+--------------+----------------------+---------------+\n // | 1 to 3 mid VAD bits | mid LBRR bit | 1 to 3 side VAD bits | side LBRR bit |\n // +---------------------+--------------+----------------------+---------------+\n // The upper 1 to 3 bits (dependent on the number of SILK frames) of the LP layer contain VAD bits. If any of\n // these VAD bits are 1, then voice activity is present.\n if (packet.getUint8(opusFrameOffsets[i][0]) >> (8 - numSilkFrames))\n return 1;\n // In the stereo case, there is a second set of 1 to 3 VAD bits, so also check these VAD bits.\n const channels = this.opusPacketGetNumChannels(packet);\n if (channels === 2 &&\n (packet.getUint8(opusFrameOffsets[i][0]) << (numSilkFrames + 1)) >> (8 - numSilkFrames)) {\n return 1;\n }\n }\n // No voice activity was detected.\n return 0;\n }\n /**\n * This method is based on Definition of the Opus Audio Codec\n * (https://tools.ietf.org/html/rfc6716). Basically, this method is based on\n * parsing the LP layer of an Opus packet, particularly the LBRR flag.\n *\n * @param packet Opus packet.\n * @param lenBytes Size of the packet (in bytes).\n * @returns true: packet has fec encoding about previous packet.\n * false: no fec encoding present.\n */\n opusPacketHasFec(packet, lenBytes) {\n if (!packet || lenBytes <= 0)\n return false;\n // In CELT-only mode, packets should not have FEC.\n if (this.opusPacketIsCeltOnly(packet))\n return false;\n const opusFrameOffsets = new Array(this.OPUS_MAX_OPUS_FRAMES);\n const opusFrameSizes = new Array(this.OPUS_MAX_OPUS_FRAMES);\n for (let i = 0; i < this.OPUS_MAX_OPUS_FRAMES; ++i) {\n opusFrameOffsets[i] = [undefined];\n opusFrameSizes[i] = [undefined];\n }\n // Parse packet to get the Opus frames.\n const numOpusFrames = this.opusPacketParse(packet, lenBytes, null, opusFrameOffsets, opusFrameSizes, null);\n if (numOpusFrames < 0)\n return false;\n /* istanbul ignore next */\n if (opusFrameSizes[0][0] <= 1)\n return false;\n const numSilkFrames = this.opusNumSilkFrames(packet);\n /* istanbul ignore next */\n if (numSilkFrames === 0)\n return false;\n const channels = this.opusPacketGetNumChannels(packet);\n /* istanbul ignore next */\n if (channels !== 1 && channels !== 2)\n return false;\n // A frame starts with the LP layer. The LP layer begins with two to eight\n // header bits.These consist of one VAD bit per SILK frame (up to 3),\n // followed by a single flag indicating the presence of LBRR frames.\n // For a stereo packet, these first flags correspond to the mid channel, and\n // a second set of flags is included for the side channel. Because these are\n // the first symbols decoded by the range coder and because they are coded\n // as binary values with uniform probability, they can be extracted directly\n // from the most significant bits of the first byte of compressed data.\n for (let i = 0; i < channels; i++) {\n if (packet.getUint8(opusFrameOffsets[0][0]) & (0x80 >> ((i + 1) * (numSilkFrames + 1) - 1)))\n return true;\n }\n return false;\n }\n}\nexports.default = RedundantAudioEncoder;\n// This is a workaround for unit testing due to issues with mocking `self`\n// which is a part of DedicatedWorker scope and is currently used to post\n// messages to the main thread\nRedundantAudioEncoder.shouldLog = false;\n// This is a workaround for unit testing due to issues with mocking `self`\n// which is a part of DedicatedWorker scope and is currently used to post\n// messages to the main thread\nRedundantAudioEncoder.shouldReportStats = false;\n//# sourceMappingURL=RedundantAudioEncoder.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This file was generated with the `generate-red-worker-code.js` script.\n */\n/**\n * Redundant audio worker code string.\n */\n// eslint-disable-next-line\nconst RedundantAudioEncoderWorkerCode = \"class RedundantAudioEncoder {\\n constructor() {\\n // Each payload must be less than 1024 bytes to fit the 10 bit block length\\n this.maxRedPacketSizeBytes = 1 << 10;\\n // Limit payload to 1000 bytes to handle small MTU. 1000 is chosen because in Chromium-based browsers, writing audio\\n // payloads larger than 1000 bytes using the WebRTC Insertable Streams API (which is used to enable dynamic audio\\n // redundancy) will cause an error to be thrown and cause audio flow to permanently stop. See\\n // https://crbug.com/1248479.\\n this.maxAudioPayloadSizeBytes = 1000;\\n // Each payload can encode a timestamp delta of 14 bits\\n this.maxRedTimestampOffset = 1 << 14;\\n // 4 byte RED header\\n this.redHeaderSizeBytes = 4;\\n // reduced size for last RED header\\n this.redLastHeaderSizeBytes = 1;\\n // P-Time for Opus 20 msec packets\\n // We do not support other p-times or clock rates\\n this.redPacketizationTime = 960;\\n // distance between redundant payloads, Opus FEC handles a distance of 1\\n // TODO(https://issues.amazon.com/issues/ChimeSDKAudio-55):\\n // Consider making this dynamic\\n this.redPacketDistance = 2;\\n // maximum number of redundant payloads per RTP packet\\n this.maxRedEncodings = 2;\\n // Maximum number of encodings that can be recovered with a single RED packet, assuming the primary and redundant\\n // payloads have FEC.\\n this.redMaxRecoveryDistance = this.redPacketDistance * this.maxRedEncodings + 1;\\n // maximum history of prior payloads to keep\\n // generally we will expire old entries based on timestamp\\n // this limit is in place just to make sure the history does not\\n // grow too large in the case of erroneous timestamp inputs\\n this.maxEncodingHistorySize = 10;\\n // Current number of encodings we want to send\\n // to the remote end. This will be dynamically\\n // updated through the setNumEncodingsFromPacketloss API\\n this.numRedundantEncodings = 0;\\n // Used to enable or disable redundancy\\n // in response to very high packet loss events\\n this.redundancyEnabled = true;\\n // Loss stats are reported to the main thread every 5 seconds.\\n // Since timestamp differences between 2 consecutive packets\\n // give us the number of samples in each channel, 1 second\\n // is equivalent to 48000 samples:\\n // P-time * (1000ms/1s)\\n // = (960 samples/20ms) * (1000ms/1s)\\n // = 48000 samples/s\\n this.lossReportInterval = 48000 * 5;\\n // Maximum distance of a packet from the most recent packet timestamp\\n // that we will consider for recovery.\\n this.maxOutOfOrderPacketDistance = 16;\\n /**\\n * Below are Opus helper methods and constants.\\n */\\n this.OPUS_BAD_ARG = -1;\\n this.OPUS_INVALID_PACKET = -4;\\n // Max number of Opus frames in an Opus packet is 48 (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.5).\\n this.OPUS_MAX_OPUS_FRAMES = 48;\\n // Max number of bytes that any individual Opus frame can have.\\n this.OPUS_MAX_FRAME_SIZE_BYTES = 1275;\\n this.encodingHistory = new Array();\\n this.opusPayloadType = 0;\\n this.redPayloadType = 0;\\n this.initializePacketLogs();\\n }\\n /**\\n * Creates an instance of RedundantAudioEncoder and sets up callbacks.\\n */\\n static initializeWorker() {\\n RedundantAudioEncoder.log('Initializing RedundantAudioEncoder');\\n const encoder = new RedundantAudioEncoder();\\n // RED encoding is done using WebRTC Encoded Transform\\n // https://github.com/w3c/webrtc-encoded-transform/blob/main/explainer.md\\n // Check the DedicatedWorkerGlobalScope for existence of\\n // RTCRtpScriptTransformer interface. If exists, then\\n // RTCRtpScriptTransform is supported by this browser.\\n // @ts-ignore\\n if (self.RTCRtpScriptTransformer) {\\n // @ts-ignore\\n self.onrtctransform = (event) => {\\n if (event.transformer.options.type === 'SenderTransform') {\\n encoder.setupSenderTransform(event.transformer.readable, event.transformer.writable);\\n }\\n else if (event.transformer.options.type === 'ReceiverTransform') {\\n encoder.setupReceiverTransform(event.transformer.readable, event.transformer.writable);\\n }\\n else if (event.transformer.options.type === 'PassthroughTransform') {\\n encoder.setupPassthroughTransform(event.transformer.readable, event.transformer.writable);\\n }\\n };\\n }\\n self.onmessage = (event) => {\\n if (event.data.msgType === 'StartRedWorker') {\\n encoder.setupSenderTransform(event.data.send.readable, event.data.send.writable);\\n encoder.setupReceiverTransform(event.data.receive.readable, event.data.receive.writable);\\n }\\n else if (event.data.msgType === 'PassthroughTransform') {\\n encoder.setupPassthroughTransform(event.data.send.readable, event.data.send.writable);\\n encoder.setupPassthroughTransform(event.data.receive.readable, event.data.receive.writable);\\n }\\n else if (event.data.msgType === 'RedPayloadType') {\\n encoder.setRedPayloadType(event.data.payloadType);\\n }\\n else if (event.data.msgType === 'OpusPayloadType') {\\n encoder.setOpusPayloadType(event.data.payloadType);\\n }\\n else if (event.data.msgType === 'UpdateNumRedundantEncodings') {\\n encoder.setNumRedundantEncodings(event.data.numRedundantEncodings);\\n }\\n else if (event.data.msgType === 'Enable') {\\n encoder.setRedundancyEnabled(true);\\n }\\n else if (event.data.msgType === 'Disable') {\\n encoder.setRedundancyEnabled(false);\\n }\\n };\\n }\\n /**\\n * Post logs to the main thread\\n */\\n static log(msg) {\\n if (RedundantAudioEncoder.shouldLog) {\\n // @ts-ignore\\n self.postMessage({\\n type: 'REDWorkerLog',\\n log: `[AudioRed] ${msg}`,\\n });\\n }\\n }\\n /**\\n * Returns the number of encodings based on packetLoss value. This is used by `DefaultTransceiverController` to\\n * determine when to alert the encoder to update the number of encodings. It also determines if we need to\\n * turn off red in cases of very high packet loss to avoid congestion collapse.\\n */\\n static getNumRedundantEncodingsForPacketLoss(packetLoss) {\\n let recommendedRedundantEncodings = 0;\\n let shouldTurnOffRed = false;\\n if (packetLoss <= 8) {\\n recommendedRedundantEncodings = 0;\\n }\\n else if (packetLoss <= 18) {\\n recommendedRedundantEncodings = 1;\\n }\\n else if (packetLoss <= 75) {\\n recommendedRedundantEncodings = 2;\\n }\\n else {\\n recommendedRedundantEncodings = 0;\\n shouldTurnOffRed = true;\\n }\\n return [recommendedRedundantEncodings, shouldTurnOffRed];\\n }\\n /**\\n * Sets up a passthrough (no-op) transform for the given streams.\\n */\\n setupPassthroughTransform(readable, writable) {\\n RedundantAudioEncoder.log('Setting up passthrough transform');\\n readable.pipeTo(writable);\\n }\\n /**\\n * Sets up the transform stream and pipes the outgoing encoded audio frames through the transform function.\\n */\\n setupSenderTransform(readable, writable) {\\n RedundantAudioEncoder.log('Setting up sender RED transform');\\n const transformStream = new TransformStream({\\n transform: this.senderTransform.bind(this),\\n });\\n readable.pipeThrough(transformStream).pipeTo(writable);\\n return;\\n }\\n /**\\n * Sets up the transform stream and pipes the received encoded audio frames through the transform function.\\n */\\n setupReceiverTransform(readable, writable) {\\n RedundantAudioEncoder.log('Setting up receiver RED transform');\\n const transformStream = new TransformStream({\\n transform: this.receivePacketLogTransform.bind(this),\\n });\\n readable.pipeThrough(transformStream).pipeTo(writable);\\n return;\\n }\\n /**\\n * Set the RED payload type ideally obtained from local offer.\\n */\\n setRedPayloadType(payloadType) {\\n this.redPayloadType = payloadType;\\n RedundantAudioEncoder.log(`red payload type set to ${this.redPayloadType}`);\\n }\\n /**\\n * Set the opus payload type ideally obtained from local offer.\\n */\\n setOpusPayloadType(payloadType) {\\n this.opusPayloadType = payloadType;\\n RedundantAudioEncoder.log(`opus payload type set to ${this.opusPayloadType}`);\\n }\\n /**\\n * Set the number of redundant encodings\\n */\\n setNumRedundantEncodings(numRedundantEncodings) {\\n this.numRedundantEncodings = numRedundantEncodings;\\n if (this.numRedundantEncodings > this.maxRedEncodings) {\\n this.numRedundantEncodings = this.maxRedEncodings;\\n }\\n RedundantAudioEncoder.log(`Updated numRedundantEncodings to ${this.numRedundantEncodings}`);\\n }\\n /**\\n * Enable or disable redundancy in response to\\n * high packet loss event.\\n */\\n setRedundancyEnabled(enabled) {\\n this.redundancyEnabled = enabled;\\n RedundantAudioEncoder.log(`redundancy ${this.redundancyEnabled ? 'enabled' : 'disabled'}`);\\n }\\n /**\\n * Helper function to only enqueue audio frames if they do not exceed the audio payload byte limit imposed by\\n * Chromium-based browsers. Chromium will throw an error (https://crbug.com/1248479) if an audio payload larger than\\n * 1000 bytes is enqueued. Any controller that attempts to enqueue an audio payload larger than 1000 bytes will\\n * encounter this error and will permanently stop sending or receiving audio.\\n */\\n enqueueAudioFrameIfPayloadSizeIsValid(\\n // @ts-ignore\\n frame, controller) {\\n if (frame.data.byteLength > this.maxAudioPayloadSizeBytes)\\n return;\\n controller.enqueue(frame);\\n }\\n /**\\n * Receives encoded frames and modifies as needed before sending to transport.\\n */\\n senderTransform(\\n // @ts-ignore\\n frame, controller) {\\n const frameMetadata = frame.getMetadata();\\n // @ts-ignore\\n if (frameMetadata.payloadType !== this.redPayloadType) {\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n const primaryPayloadBuffer = this.getPrimaryPayload(frame.timestamp, frame.data);\\n if (!primaryPayloadBuffer) {\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n const encodedBuffer = this.encode(frame.timestamp, primaryPayloadBuffer);\\n /* istanbul ignore next */\\n if (!encodedBuffer) {\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n frame.data = encodedBuffer;\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n /**\\n * Get the primary payload from encoding\\n */\\n getPrimaryPayload(primaryTimestamp, frame) {\\n const encodings = this.splitEncodings(primaryTimestamp, frame);\\n if (!encodings || encodings.length < 1)\\n return null;\\n return encodings[encodings.length - 1].payload;\\n }\\n /**\\n * Split up the encoding received into primary and redundant encodings\\n * These will be ordered oldest to newest which is the same ordering\\n * in the RTP red payload.\\n */\\n splitEncodings(primaryTimestamp, frame, getFecInfo = false, primarySequenceNumber = undefined) {\\n // process RED headers (according to RFC 2198)\\n // 0 1 2 3\\n // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1\\n // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\\n // |F| block PT | timestamp offset | block length |\\n // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\\n //\\n // last header\\n // 0 1 2 3 4 5 6 7\\n // +-+-+-+-+-+-+-+-+\\n // |0| Block PT |\\n // +-+-+-+-+-+-+-+-+\\n const payload = new DataView(frame);\\n let payloadSizeBytes = payload.byteLength;\\n let totalPayloadSizeBytes = 0;\\n let totalHeaderSizeBytes = 0;\\n let primaryPayloadSizeBytes = 0;\\n let payloadOffset = 0;\\n let gotLastBlock = false;\\n const encodings = new Array();\\n const redundantEncodingBlockLengths = new Array();\\n const redundantEncodingTimestamps = new Array();\\n while (payloadSizeBytes > 0) {\\n gotLastBlock = (payload.getUint8(payloadOffset) & 0x80) === 0;\\n if (gotLastBlock) {\\n // Bits 1 through 7 are payload type\\n const payloadType = payload.getUint8(payloadOffset) & 0x7f;\\n // Unexpected payload type. This is a bad packet.\\n if (payloadType !== this.opusPayloadType) {\\n return null;\\n }\\n totalPayloadSizeBytes += this.redLastHeaderSizeBytes;\\n totalHeaderSizeBytes += this.redLastHeaderSizeBytes;\\n // Accumulated block lengths are equal to or larger than the buffer, which means there is no primary block. This\\n // is a bad packet.\\n if (totalPayloadSizeBytes >= payload.byteLength) {\\n return null;\\n }\\n primaryPayloadSizeBytes = payload.byteLength - totalPayloadSizeBytes;\\n break;\\n }\\n else {\\n if (payloadSizeBytes < this.redHeaderSizeBytes) {\\n return null;\\n }\\n // Bits 22 through 31 are payload length\\n const blockLength = ((payload.getUint8(payloadOffset + 2) & 0x03) << 8) + payload.getUint8(payloadOffset + 3);\\n redundantEncodingBlockLengths.push(blockLength);\\n const timestampOffset = payload.getUint16(payloadOffset + 1) >> 2;\\n const timestamp = primaryTimestamp - timestampOffset;\\n redundantEncodingTimestamps.push(timestamp);\\n totalPayloadSizeBytes += blockLength + this.redHeaderSizeBytes;\\n totalHeaderSizeBytes += this.redHeaderSizeBytes;\\n payloadOffset += this.redHeaderSizeBytes;\\n payloadSizeBytes -= this.redHeaderSizeBytes;\\n }\\n }\\n // The last block was never found. This is a bad packet.\\n if (!gotLastBlock) {\\n return null;\\n }\\n let redundantPayloadOffset = totalHeaderSizeBytes;\\n for (let i = 0; i < redundantEncodingTimestamps.length; i++) {\\n const redundantPayloadBuffer = new ArrayBuffer(redundantEncodingBlockLengths[i]);\\n const redundantPayloadArray = new Uint8Array(redundantPayloadBuffer);\\n redundantPayloadArray.set(new Uint8Array(payload.buffer, redundantPayloadOffset, redundantEncodingBlockLengths[i]), 0);\\n const encoding = {\\n timestamp: redundantEncodingTimestamps[i],\\n payload: redundantPayloadBuffer,\\n isRedundant: true,\\n };\\n if (getFecInfo) {\\n encoding.hasFec = this.opusPacketHasFec(new DataView(redundantPayloadBuffer), redundantPayloadBuffer.byteLength);\\n }\\n encodings.push(encoding);\\n redundantPayloadOffset += redundantEncodingBlockLengths[i];\\n }\\n const primaryPayloadOffset = payload.byteLength - primaryPayloadSizeBytes;\\n const primaryPayloadBuffer = new ArrayBuffer(primaryPayloadSizeBytes);\\n const primaryArray = new Uint8Array(primaryPayloadBuffer);\\n primaryArray.set(new Uint8Array(payload.buffer, primaryPayloadOffset, primaryPayloadSizeBytes), 0);\\n const encoding = {\\n timestamp: primaryTimestamp,\\n payload: primaryPayloadBuffer,\\n isRedundant: false,\\n seq: primarySequenceNumber,\\n };\\n if (getFecInfo) {\\n encoding.hasFec = this.opusPacketHasFec(new DataView(primaryPayloadBuffer), primaryPayloadBuffer.byteLength);\\n }\\n encodings.push(encoding);\\n return encodings;\\n }\\n /**\\n * Create a new encoding with current primary payload and the older payloads of choice.\\n */\\n encode(primaryTimestamp, primaryPayload) {\\n const primaryPayloadSize = primaryPayload.byteLength;\\n // Payload size needs to be valid.\\n if (primaryPayloadSize === 0 ||\\n primaryPayloadSize >= this.maxRedPacketSizeBytes ||\\n primaryPayloadSize >= this.maxAudioPayloadSizeBytes) {\\n return null;\\n }\\n const numRedundantEncodings = this.numRedundantEncodings;\\n let headerSizeBytes = this.redLastHeaderSizeBytes;\\n let payloadSizeBytes = primaryPayloadSize;\\n let bytesAvailable = this.maxAudioPayloadSizeBytes - primaryPayloadSize - headerSizeBytes;\\n const redundantEncodingTimestamps = new Array();\\n const redundantEncodingPayloads = new Array();\\n // If redundancy is disabled then only send the primary payload\\n if (this.redundancyEnabled) {\\n // Determine how much redundancy we can fit into our packet\\n let redundantTimestamp = this.uint32WrapAround(primaryTimestamp - this.redPacketizationTime * this.redPacketDistance);\\n for (let i = 0; i < numRedundantEncodings; i++) {\\n // Do not add redundant encodings that are beyond the maximum timestamp offset.\\n if (this.uint32WrapAround(primaryTimestamp - redundantTimestamp) >= this.maxRedTimestampOffset) {\\n break;\\n }\\n let findTimestamp = redundantTimestamp;\\n let encoding = this.encodingHistory.find(e => e.timestamp === findTimestamp);\\n if (!encoding) {\\n // If not found or not important then look for the previous packet.\\n // The current packet may have included FEC for the previous, so just\\n // use the previous packet instead provided that it has voice activity.\\n findTimestamp = this.uint32WrapAround(redundantTimestamp - this.redPacketizationTime);\\n encoding = this.encodingHistory.find(e => e.timestamp === findTimestamp);\\n }\\n if (encoding) {\\n const redundantEncodingSizeBytes = encoding.payload.byteLength;\\n // Only add redundancy if there are enough bytes available.\\n if (bytesAvailable < this.redHeaderSizeBytes + redundantEncodingSizeBytes)\\n break;\\n bytesAvailable -= this.redHeaderSizeBytes + redundantEncodingSizeBytes;\\n headerSizeBytes += this.redHeaderSizeBytes;\\n payloadSizeBytes += redundantEncodingSizeBytes;\\n redundantEncodingTimestamps.unshift(encoding.timestamp);\\n redundantEncodingPayloads.unshift(encoding.payload);\\n }\\n redundantTimestamp -= this.redPacketizationTime * this.redPacketDistance;\\n redundantTimestamp = this.uint32WrapAround(redundantTimestamp);\\n }\\n }\\n const redPayloadBuffer = new ArrayBuffer(headerSizeBytes + payloadSizeBytes);\\n const redPayloadView = new DataView(redPayloadBuffer);\\n // Add redundant encoding header(s) to new buffer\\n let redPayloadOffset = 0;\\n for (let i = 0; i < redundantEncodingTimestamps.length; i++) {\\n const timestampDelta = primaryTimestamp - redundantEncodingTimestamps[i];\\n redPayloadView.setUint8(redPayloadOffset, this.opusPayloadType | 0x80);\\n redPayloadView.setUint16(redPayloadOffset + 1, (timestampDelta << 2) | (redundantEncodingPayloads[i].byteLength >> 8));\\n redPayloadView.setUint8(redPayloadOffset + 3, redundantEncodingPayloads[i].byteLength & 0xff);\\n redPayloadOffset += this.redHeaderSizeBytes;\\n }\\n // Add primary encoding header to new buffer\\n redPayloadView.setUint8(redPayloadOffset, this.opusPayloadType);\\n redPayloadOffset += this.redLastHeaderSizeBytes;\\n // Add redundant payload(s) to new buffer\\n const redPayloadArray = new Uint8Array(redPayloadBuffer);\\n for (let i = 0; i < redundantEncodingPayloads.length; i++) {\\n redPayloadArray.set(new Uint8Array(redundantEncodingPayloads[i]), redPayloadOffset);\\n redPayloadOffset += redundantEncodingPayloads[i].byteLength;\\n }\\n // Add primary payload to new buffer\\n redPayloadArray.set(new Uint8Array(primaryPayload), redPayloadOffset);\\n redPayloadOffset += primaryPayload.byteLength;\\n /* istanbul ignore next */\\n // Sanity check that we got the expected total payload size.\\n if (redPayloadOffset !== headerSizeBytes + payloadSizeBytes)\\n return null;\\n this.updateEncodingHistory(primaryTimestamp, primaryPayload);\\n return redPayloadBuffer;\\n }\\n /**\\n * Update the encoding history with the latest primary encoding\\n */\\n updateEncodingHistory(primaryTimestamp, primaryPayload) {\\n // Remove encodings from the history if they are too old.\\n for (const encoding of this.encodingHistory) {\\n const maxTimestampDelta = this.redPacketizationTime * this.redMaxRecoveryDistance;\\n if (primaryTimestamp - encoding.timestamp >= maxTimestampDelta) {\\n this.encodingHistory.shift();\\n }\\n else {\\n break;\\n }\\n }\\n // Only add an encoding to the history if the encoding is deemed to be important. An encoding is important if it is\\n // a CELT-only packet or contains voice activity.\\n const packet = new DataView(primaryPayload);\\n if (this.opusPacketIsCeltOnly(packet) ||\\n this.opusPacketHasVoiceActivity(packet, packet.byteLength) > 0) {\\n // Check if adding an encoding will cause the length of the encoding history to exceed the maximum history size.\\n // This is not expected to happen but could occur if we get incorrect timestamps. We want to make sure our memory\\n // usage is bounded. In this case, just clear the history and start over from empty.\\n if (this.encodingHistory.length + 1 > this.maxEncodingHistorySize)\\n this.encodingHistory.length = 0;\\n this.encodingHistory.push({ timestamp: primaryTimestamp, payload: primaryPayload });\\n }\\n }\\n /**\\n * Initialize packet logs and metric values.\\n */\\n initializePacketLogs() {\\n // The extra space from the max RED recovery distance is to ensure that we do not incorrectly count recovery for\\n // packets that have already been received but are outside of the max out-of-order distance.\\n const packetLogSize = this.maxOutOfOrderPacketDistance + this.redMaxRecoveryDistance;\\n this.primaryPacketLog = {\\n window: new Array(packetLogSize),\\n index: 0,\\n windowSize: packetLogSize,\\n };\\n this.redRecoveryLog = {\\n window: new Array(packetLogSize),\\n index: 0,\\n windowSize: packetLogSize,\\n };\\n this.fecRecoveryLog = {\\n window: new Array(packetLogSize),\\n index: 0,\\n windowSize: packetLogSize,\\n };\\n this.totalAudioPacketsExpected = 0;\\n this.totalAudioPacketsLost = 0;\\n this.totalAudioPacketsRecoveredRed = 0;\\n this.totalAudioPacketsRecoveredFec = 0;\\n }\\n /**\\n * Receives encoded frames from the server\\n * and adds the timestamps to a packet log\\n * to calculate an approximate recovery metric.\\n */\\n receivePacketLogTransform(\\n // @ts-ignore\\n frame, controller) {\\n const frameMetadata = frame.getMetadata();\\n // @ts-ignore\\n if (frameMetadata.payloadType !== this.redPayloadType) {\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n // @ts-ignore\\n const encodings = this.splitEncodings(frame.timestamp, frame.data, \\n /*getFecInfo*/ true, frameMetadata.sequenceNumber);\\n if (!encodings) {\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n return;\\n }\\n for (let i = encodings.length - 1; i >= 0; i--) {\\n if (this.updateLossStats(encodings[i])) {\\n this.updateRedStats(encodings[i]);\\n this.updateFecStats(encodings[i]);\\n }\\n }\\n this.maybeReportLossStats(encodings[encodings.length - 1].timestamp, frameMetadata.synchronizationSource);\\n this.enqueueAudioFrameIfPayloadSizeIsValid(frame, controller);\\n }\\n /**\\n * Adds a timestamp to the primary packet log.\\n * This also updates totalAudioPacketsLost and totalAudioPacketsExpected by looking\\n * at the difference between timestamps.\\n *\\n * @param encoding : The encoding to be analyzed\\n * @returns false if sequence number was greater than max out of order distance\\n * true otherwise\\n */\\n updateLossStats(encoding) {\\n if (encoding.isRedundant)\\n return true;\\n const timestamp = encoding.timestamp;\\n const seq = encoding.seq;\\n if (this.totalAudioPacketsExpected === 0) {\\n this.totalAudioPacketsExpected = 1;\\n this.newestSequenceNumber = seq;\\n this.addTimestamp(this.primaryPacketLog, timestamp);\\n return true;\\n }\\n const diff = this.int16(seq - this.newestSequenceNumber);\\n if (diff < -this.maxOutOfOrderPacketDistance)\\n return false;\\n if (diff < 0) {\\n if (!this.hasTimestamp(this.primaryPacketLog, timestamp)) {\\n if (this.totalAudioPacketsLost > 0)\\n this.totalAudioPacketsLost--;\\n this.addTimestamp(this.primaryPacketLog, timestamp);\\n this.removeFromRecoveryWindows(timestamp);\\n }\\n }\\n else if (diff > 1) {\\n this.totalAudioPacketsLost += diff - 1;\\n }\\n if (diff > 0) {\\n this.totalAudioPacketsExpected += diff;\\n this.newestSequenceNumber = encoding.seq;\\n this.addTimestamp(this.primaryPacketLog, timestamp);\\n }\\n return true;\\n }\\n /**\\n * Adds a timestamp to the red recovery log if it is not present in\\n * the primary packet log and if it's not too old.\\n *\\n * @param encoding : The encoding to be analyzed\\n */\\n updateRedStats(encoding) {\\n if (!encoding.isRedundant || this.totalAudioPacketsLost === 0)\\n return;\\n const timestamp = encoding.timestamp;\\n if (!this.hasTimestamp(this.primaryPacketLog, timestamp)) {\\n if (!this.hasTimestamp(this.redRecoveryLog, timestamp)) {\\n this.totalAudioPacketsRecoveredRed++;\\n this.addTimestamp(this.redRecoveryLog, timestamp);\\n }\\n if (this.removeTimestamp(this.fecRecoveryLog, timestamp)) {\\n /* istanbul ignore else */\\n if (this.totalAudioPacketsRecoveredFec > 0)\\n this.totalAudioPacketsRecoveredFec--;\\n }\\n }\\n }\\n /**\\n * Adds a timestamp to the fec recovery log if it is not present in\\n * the primary packet log and red recovery log and if it is not too old.\\n *\\n * @param encoding : The encoding to be analyzed\\n */\\n updateFecStats(encoding) {\\n if (!encoding.hasFec || this.totalAudioPacketsLost === 0)\\n return;\\n const fecTimestamp = encoding.timestamp - this.redPacketizationTime;\\n if (this.hasTimestamp(this.primaryPacketLog, fecTimestamp) ||\\n this.hasTimestamp(this.redRecoveryLog, fecTimestamp) ||\\n this.hasTimestamp(this.fecRecoveryLog, fecTimestamp)) {\\n return;\\n }\\n this.totalAudioPacketsRecoveredFec++;\\n this.addTimestamp(this.fecRecoveryLog, fecTimestamp);\\n }\\n /**\\n * Reports loss metrics to DefaultTransceiverController\\n *\\n * @param timestamp : Timestamp of most recent primary packet\\n */\\n maybeReportLossStats(timestamp, ssrc) {\\n if (timestamp - this.lastLossReportTimestamp < this.lossReportInterval)\\n return;\\n /* istanbul ignore next */\\n if (RedundantAudioEncoder.shouldReportStats) {\\n // @ts-ignore\\n self.postMessage({\\n type: 'RedundantAudioEncoderStats',\\n ssrc,\\n totalAudioPacketsLost: this.totalAudioPacketsLost,\\n totalAudioPacketsExpected: this.totalAudioPacketsExpected,\\n totalAudioPacketsRecoveredRed: this.totalAudioPacketsRecoveredRed,\\n totalAudioPacketsRecoveredFec: this.totalAudioPacketsRecoveredFec,\\n });\\n }\\n this.lastLossReportTimestamp = timestamp;\\n }\\n /**\\n * Adds a timestamp to a packet log\\n *\\n * @param packetLog : The packetlog to add the timestamp to\\n * @param timestamp : The timestamp that should be added\\n */\\n addTimestamp(packetLog, timestamp) {\\n packetLog.window[packetLog.index] = timestamp;\\n packetLog.index = (packetLog.index + 1) % packetLog.windowSize;\\n }\\n /**\\n * Checks if a timestamp is in a packetlog\\n *\\n * @param packetLog : The packetlog to search\\n * @param timestamp : The timestamp to search for\\n * @returns true if timestamp is present, false otherwise\\n */\\n hasTimestamp(packetLog, timestamp) {\\n const element = packetLog.window.find(t => t === timestamp);\\n return !!element;\\n }\\n /**\\n * Removes a timestamp from a packet log\\n *\\n * @param packetLog : The packetlog from which the timestamp should be removed\\n * @param timestamp : The timestamp to be removed\\n * @returns true if timestamp was present in the log and removed, false otherwise\\n */\\n removeTimestamp(packetLog, timestamp) {\\n const index = packetLog.window.indexOf(timestamp);\\n if (index >= 0) {\\n packetLog.window[index] = undefined;\\n return true;\\n }\\n return false;\\n }\\n /**\\n * Removes a timestamp from red and fec recovery windows.\\n *\\n * @param timestamp : The timestamp to be removed\\n */\\n removeFromRecoveryWindows(timestamp) {\\n let removed = this.removeTimestamp(this.redRecoveryLog, timestamp);\\n if (removed) {\\n if (this.totalAudioPacketsRecoveredRed > 0)\\n this.totalAudioPacketsRecoveredRed--;\\n }\\n removed = this.removeTimestamp(this.fecRecoveryLog, timestamp);\\n if (removed) {\\n if (this.totalAudioPacketsRecoveredFec > 0)\\n this.totalAudioPacketsRecoveredFec--;\\n }\\n }\\n /**\\n * Converts the supplied argument to 32-bit unsigned integer\\n */\\n uint32WrapAround(num) {\\n const mod = 4294967296; // 2^32\\n let res = num;\\n if (num >= mod) {\\n res = num - mod;\\n }\\n else if (num < 0) {\\n res = mod + num;\\n }\\n return res;\\n }\\n /**\\n * Converts the supplied argument to 16-bit signed integer\\n */\\n int16(num) {\\n return (num << 16) >> 16;\\n }\\n /**\\n * Determines if an Opus packet is in CELT-only mode.\\n *\\n * @param packet Opus packet.\\n * @returns `true` if the packet is in CELT-only mode.\\n */\\n opusPacketIsCeltOnly(packet) {\\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\\n // 0\\n // 0 1 2 3 4 5 6 7\\n // +-+-+-+-+-+-+-+-+\\n // | config |s| c |\\n // +-+-+-+-+-+-+-+-+\\n // Since CELT-only packets are represented using configurations 16 to 31, the highest 'config' bit will always be 1\\n // for CELT-only packets.\\n return !!(packet.getUint8(0) & 0x80);\\n }\\n /**\\n * Gets the number of samples per frame from an Opus packet.\\n *\\n * @param packet Opus packet. This must contain at least one byte of data.\\n * @param sampleRateHz 32-bit integer sampling rate in Hz. This must be a multiple of 400 or inaccurate results will\\n * be returned.\\n * @returns Number of samples per frame.\\n */\\n opusPacketGetSamplesPerFrame(packet, sampleRateHz) {\\n // Sample rate must be a 32-bit integer.\\n sampleRateHz = Math.round(sampleRateHz);\\n sampleRateHz = Math.min(Math.max(sampleRateHz, -(Math.pow(2, 32))), Math.pow(2, 32) - 1);\\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\\n // 0\\n // 0 1 2 3 4 5 6 7\\n // +-+-+-+-+-+-+-+-+\\n // | config |s| c |\\n // +-+-+-+-+-+-+-+-+\\n let numSamples;\\n let frameSizeOption;\\n // Case for CELT-only packet.\\n if (this.opusPacketIsCeltOnly(packet)) {\\n // The lower 3 'config' bits indicate the frame size option.\\n frameSizeOption = (packet.getUint8(0) >> 3) & 0x3;\\n // The frame size options 0, 1, 2, 3 correspond to frame sizes of 2.5, 5, 10, 20 ms. Notice that the frame sizes\\n // can be represented as (2.5 * 2^0), (2.5 * 2^1), (2.5 * 2^2), (2.5 * 2^3) ms. So, the number of samples can be\\n // calculated as follows:\\n // (sample/s) * (1s/1000ms) * (2.5ms) * 2^(frameSizeOption)\\n // = (sample/s) * (1s/400) * 2^(frameSizeOption)\\n // = (sample/s) * 2^(frameSizeOption) * (1s/400)\\n numSamples = (sampleRateHz << frameSizeOption) / 400;\\n }\\n // Case for Hybrid packet. Since Hybrid packets are represented using configurations 12 to 15, bits 1 and 2 in the\\n // above TOC byte diagram will both be 1.\\n else if ((packet.getUint8(0) & 0x60) === 0x60) {\\n // In the case of configuration 13 or 15, bit 4 in the above TOC byte diagram will be 1. Configurations 13 and 15\\n // correspond to a 20ms frame size, so the number of samples is calculated as follows:\\n // (sample/s) * (1s/1000ms) * (20ms)\\n // = (sample/s) * (1s/50)\\n //\\n // In the case of configuration 12 or 14, bit 4 in the above TOC byte diagram will be 0. Configurations 12 and 14\\n // correspond to a 10ms frame size, so the number of samples is calculated as follows:\\n // (sample/s) * (1s/1000ms) * (10ms)\\n // = (sample/s) * (1s/100)\\n numSamples = packet.getUint8(0) & 0x08 ? sampleRateHz / 50 : sampleRateHz / 100;\\n }\\n // Case for SILK-only packet.\\n else {\\n // The lower 3 'config' bits indicate the frame size option for SILK-only packets.\\n frameSizeOption = (packet.getUint8(0) >> 3) & 0x3;\\n if (frameSizeOption === 3) {\\n // Frame size option 3 corresponds to a frame size of 60ms, so the number of samples is calculated as follows:\\n // (sample/s) * (1s/1000ms) * (60ms)\\n // = (sample/s) * (60ms) * (1s/1000ms)\\n numSamples = (sampleRateHz * 60) / 1000;\\n }\\n else {\\n // The frame size options 0, 1, 2 correspond to frame sizes of 10, 20, 40 ms. Notice that the frame sizes can be\\n // represented as (10 * 2^0), (10 * 2^1), (10 * 2^2) ms. So, the number of samples can be calculated as follows:\\n // (sample/s) * (1s/1000ms) * (10ms) * 2^(frameSizeOption)\\n // = (sample/s) * (1s/100) * 2^(frameSizeOption)\\n // = (sample/s) * 2^(frameSizeOption) * (1s/100)\\n numSamples = (sampleRateHz << frameSizeOption) / 100;\\n }\\n }\\n return numSamples;\\n }\\n /**\\n * Gets the number of SILK frames per Opus frame.\\n *\\n * @param packet Opus packet.\\n * @returns Number of SILK frames per Opus frame.\\n */\\n opusNumSilkFrames(packet) {\\n // For computing the frame length in ms, the sample rate is not important since it cancels out. We use 48 kHz, but\\n // any valid sample rate would work.\\n //\\n // To calculate the length of a frame (with a 48kHz sample rate) in ms:\\n // (samples/frame) * (1s/48000 samples) * (1000ms/s)\\n // = (samples/frame) * (1000ms/48000 samples)\\n // = (samples/frame) * (1ms/48 samples)\\n let frameLengthMs = this.opusPacketGetSamplesPerFrame(packet, 48000) / 48;\\n if (frameLengthMs < 10)\\n frameLengthMs = 10;\\n // The number of SILK frames per Opus frame is described in https://www.rfc-editor.org/rfc/rfc6716#section-4.2.2.\\n switch (frameLengthMs) {\\n case 10:\\n case 20:\\n return 1;\\n case 40:\\n return 2;\\n case 60:\\n return 3;\\n // It is not possible to reach the default case since an Opus packet can only encode sizes of 2.5, 5, 10, 20, 40,\\n // or 60 ms, so we ignore the default case for test coverage.\\n /* istanbul ignore next */\\n default:\\n return 0;\\n }\\n }\\n /**\\n * Gets the number of channels from an Opus packet.\\n *\\n * @param packet Opus packet.\\n * @returns Number of channels.\\n */\\n opusPacketGetNumChannels(packet) {\\n // TOC byte format (https://www.rfc-editor.org/rfc/rfc6716#section-3.1):\\n // 0\\n // 0 1 2 3 4 5 6 7\\n // +-+-+-+-+-+-+-+-+\\n // | config |s| c |\\n // +-+-+-+-+-+-+-+-+\\n // The 's' bit indicates mono or stereo audio, with 0 indicating mono and 1 indicating stereo.\\n return packet.getUint8(0) & 0x4 ? 2 : 1;\\n }\\n /**\\n * Determine the size (in bytes) of an Opus frame.\\n *\\n * @param packet Opus packet.\\n * @param byteOffset Offset (from the start of the packet) to the byte containing the size information.\\n * @param remainingBytes Remaining number of bytes to parse from the Opus packet.\\n * @param sizeBytes Variable to store the parsed frame size (in bytes).\\n * @returns Number of bytes that were parsed to determine the frame size.\\n */\\n opusParseSize(packet, byteOffset, remainingBytes, sizeBytes) {\\n // See https://www.rfc-editor.org/rfc/rfc6716#section-3.2.1 for an explanation of how frame size is represented.\\n // If there are no remaining bytes to parse the size from, then the size cannot be determined.\\n if (remainingBytes < 1) {\\n sizeBytes[0] = -1;\\n return -1;\\n }\\n // If the first byte is in the range 0...251, then this value is the size of the frame.\\n else if (packet.getUint8(byteOffset) < 252) {\\n sizeBytes[0] = packet.getUint8(byteOffset);\\n return 1;\\n }\\n // If the first byte is in the range 252...255, a second byte is needed. If there is no second byte, then the size\\n // cannot be determined.\\n else if (remainingBytes < 2) {\\n sizeBytes[0] = -1;\\n return -1;\\n }\\n // The total size of the frame given two size bytes is:\\n // (4 * secondSizeByte) + firstSizeByte\\n else {\\n sizeBytes[0] = 4 * packet.getUint8(byteOffset + 1) + packet.getUint8(byteOffset);\\n return 2;\\n }\\n }\\n /**\\n * Parse binary data containing an Opus packet into one or more Opus frames.\\n *\\n * @param data Binary data containing an Opus packet to be parsed. The data should begin with the first byte (i.e the\\n * TOC byte) of an Opus packet. Note that the size of the data does not have to equal the size of the\\n * contained Opus packet.\\n * @param lenBytes Size of the data (in bytes).\\n * @param selfDelimited Indicates if the Opus packet is self-delimiting\\n * (https://www.rfc-editor.org/rfc/rfc6716#appendix-B).\\n * @param tocByte Optional variable to store the TOC (table of contents) byte.\\n * @param frameOffsets Optional variable to store the offsets (from the start of the data) to the first bytes of each\\n * Opus frame.\\n * @param frameSizes Required variable to store the sizes (in bytes) of each Opus frame.\\n * @param payloadOffset Optional variable to store the offset (from the start of the data) to the first byte of the\\n * payload.\\n * @param packetLenBytes Optional variable to store the length of the Opus packet (in bytes).\\n * @returns Number of Opus frames.\\n */\\n opusPacketParseImpl(data, lenBytes, selfDelimited, tocByte, frameOffsets, frameSizes, payloadOffset, packetLenBytes) {\\n if (!frameSizes || lenBytes < 0)\\n return this.OPUS_BAD_ARG;\\n if (lenBytes === 0)\\n return this.OPUS_INVALID_PACKET;\\n // The number of Opus frames in the packet.\\n let numFrames;\\n // Intermediate storage for the number of bytes parsed to determine the size of a frame.\\n let numBytesParsed;\\n // The number of the padding bytes (excluding the padding count bytes) in the packet.\\n let paddingBytes = 0;\\n // Indicates whether CBR (constant bitrate) framing is used.\\n let cbr = false;\\n // The TOC (table of contents) byte (https://www.rfc-editor.org/rfc/rfc6716#section-3.1).\\n const toc = data.getUint8(0);\\n // Store the TOC byte.\\n if (tocByte)\\n tocByte[0] = toc;\\n // The remaining number of bytes to parse from the packet. Note that the TOC byte has already been parsed, hence the\\n // minus 1.\\n let remainingBytes = lenBytes - 1;\\n // This keeps track of where we are in the packet. This starts at 1 since the TOC byte has already been read.\\n let byteOffset = 1;\\n // The size of the last Opus frame in bytes.\\n let lastSizeBytes = remainingBytes;\\n // Read the `c` bits (i.e. code bits) from the TOC byte.\\n switch (toc & 0x3) {\\n // A code 0 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.2) has one frame.\\n case 0:\\n numFrames = 1;\\n break;\\n // A code 1 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.3) has two CBR (constant bitrate) frames.\\n case 1:\\n numFrames = 2;\\n cbr = true;\\n if (!selfDelimited) {\\n // Undelimited code 1 packets must be an even number of data bytes, otherwise the packet is invalid.\\n if (remainingBytes & 0x1)\\n return this.OPUS_INVALID_PACKET;\\n // The sizes of both frames are equal (i.e. half of the number of data bytes).\\n lastSizeBytes = remainingBytes / 2;\\n // If `lastSizeBytes` is too large, we will catch it later.\\n frameSizes[0][0] = lastSizeBytes;\\n }\\n break;\\n // A code 2 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.4) has two VBR (variable bitrate) frames.\\n case 2:\\n numFrames = 2;\\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[0]);\\n remainingBytes -= numBytesParsed;\\n // The parsed size of the first frame cannot be larger than the number of remaining bytes in the packet.\\n if (frameSizes[0][0] < 0 || frameSizes[0][0] > remainingBytes) {\\n return this.OPUS_INVALID_PACKET;\\n }\\n byteOffset += numBytesParsed;\\n // The size of the second frame is the remaining number of bytes after the first frame.\\n lastSizeBytes = remainingBytes - frameSizes[0][0];\\n break;\\n // A code 3 packet (https://www.rfc-editor.org/rfc/rfc6716#section-3.2.5) has multiple CBR/VBR frames (from 0 to\\n // 120 ms).\\n default:\\n // Code 3 packets must have at least 2 bytes (i.e. at least 1 byte after the TOC byte).\\n if (remainingBytes < 1)\\n return this.OPUS_INVALID_PACKET;\\n // Frame count byte format:\\n // 0\\n // 0 1 2 3 4 5 6 7\\n // +-+-+-+-+-+-+-+-+\\n // |v|p| M |\\n // +-+-+-+-+-+-+-+-+\\n //\\n // Read the frame count byte, which immediately follows the TOC byte.\\n const frameCountByte = data.getUint8(byteOffset++);\\n --remainingBytes;\\n // Read the 'M' bits of the frame count byte, which encode the number of frames.\\n numFrames = frameCountByte & 0x3f;\\n // The number of frames in a code 3 packet must not be 0.\\n if (numFrames <= 0)\\n return this.OPUS_INVALID_PACKET;\\n const samplesPerFrame = this.opusPacketGetSamplesPerFrame(data, 48000);\\n // A single frame can have at most 2880 samples, which happens in the case where 60ms of 48kHz audio is encoded\\n // per frame. A code 3 packet cannot contain more than 120ms of audio, so the total number of samples cannot\\n // exceed 2880 * 2 = 5760.\\n if (samplesPerFrame * numFrames > 5760)\\n return this.OPUS_INVALID_PACKET;\\n // Parse padding bytes if the 'p' bit is 1.\\n if (frameCountByte & 0x40) {\\n let paddingCountByte;\\n let numPaddingBytes;\\n // Remove padding bytes (including padding count bytes) from the remaining byte count.\\n do {\\n // Sanity check that there are enough bytes to parse and remove the padding.\\n if (remainingBytes <= 0)\\n return this.OPUS_INVALID_PACKET;\\n // Get the next padding count byte.\\n paddingCountByte = data.getUint8(byteOffset++);\\n --remainingBytes;\\n // If the padding count byte has a value in the range 0...254, then the total size of the padding is the\\n // value in the padding count byte.\\n //\\n // If the padding count byte has value 255, then the total size of the padding is 254 plus the value in the\\n // next padding count byte. Therefore, keep reading padding count bytes while the value is 255.\\n numPaddingBytes = paddingCountByte === 255 ? 254 : paddingCountByte;\\n remainingBytes -= numPaddingBytes;\\n paddingBytes += numPaddingBytes;\\n } while (paddingCountByte === 255);\\n }\\n // Sanity check that the remaining number of bytes is not negative after removing the padding.\\n if (remainingBytes < 0)\\n return this.OPUS_INVALID_PACKET;\\n // Read the 'v' bit (i.e. VBR bit).\\n cbr = !(frameCountByte & 0x80);\\n // VBR case\\n if (!cbr) {\\n lastSizeBytes = remainingBytes;\\n // Let M be the number of frames. There will be M - 1 frame length indicators (which can be 1 or 2 bytes)\\n // corresponding to the lengths of frames 0 to M - 2. The size of the last frame (i.e. frame M - 1) is the\\n // number of data bytes after the end of frame M - 2 and before the start of the padding bytes.\\n for (let i = 0; i < numFrames - 1; ++i) {\\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[i]);\\n remainingBytes -= numBytesParsed;\\n // The remaining number of data bytes must be enough to contain each frame.\\n if (frameSizes[i][0] < 0 || frameSizes[i][0] > remainingBytes) {\\n return this.OPUS_INVALID_PACKET;\\n }\\n byteOffset += numBytesParsed;\\n lastSizeBytes -= numBytesParsed + frameSizes[i][0];\\n }\\n // Sanity check that the size of the last frame is not negative.\\n if (lastSizeBytes < 0)\\n return this.OPUS_INVALID_PACKET;\\n }\\n // CBR case\\n else if (!selfDelimited) {\\n // The size of each frame is the number of data bytes divided by the number of frames.\\n lastSizeBytes = Math.trunc(remainingBytes / numFrames);\\n // The number of data bytes must be a non-negative integer multiple of the number of frames.\\n if (lastSizeBytes * numFrames !== remainingBytes)\\n return this.OPUS_INVALID_PACKET;\\n // All frames have equal size in the undelimited CBR case.\\n for (let i = 0; i < numFrames - 1; ++i) {\\n frameSizes[i][0] = lastSizeBytes;\\n }\\n }\\n }\\n // Self-delimited framing uses an extra 1 or 2 bytes, immediately preceding the data bytes, to indicate either the\\n // size of the last frame (for code 0, code 2, and VBR code 3 packets) or the size of all the frames (for code 1 and\\n // CBR code 3 packets). See https://www.rfc-editor.org/rfc/rfc6716#appendix-B.\\n if (selfDelimited) {\\n // The extra frame size byte(s) will always indicate the size of the last frame.\\n numBytesParsed = this.opusParseSize(data, byteOffset, remainingBytes, frameSizes[numFrames - 1]);\\n remainingBytes -= numBytesParsed;\\n // There must be enough data bytes for the last frame.\\n if (frameSizes[numFrames - 1][0] < 0 || frameSizes[numFrames - 1][0] > remainingBytes) {\\n return this.OPUS_INVALID_PACKET;\\n }\\n byteOffset += numBytesParsed;\\n // For CBR packets, the sizes of all the frames are equal.\\n if (cbr) {\\n // There must be enough data bytes for all the frames.\\n if (frameSizes[numFrames - 1][0] * numFrames > remainingBytes) {\\n return this.OPUS_INVALID_PACKET;\\n }\\n for (let i = 0; i < numFrames - 1; ++i) {\\n frameSizes[i][0] = frameSizes[numFrames - 1][0];\\n }\\n }\\n // At this point, `lastSizeBytes` contains the size of the last frame plus the size of the extra frame size\\n // byte(s), so sanity check that `lastSizeBytes` is the upper bound for the size of the last frame.\\n else if (!(numBytesParsed + frameSizes[numFrames - 1][0] <= lastSizeBytes)) {\\n return this.OPUS_INVALID_PACKET;\\n }\\n }\\n // Undelimited case\\n else {\\n // Because the size of the last packet is not encoded explicitly, it is possible that the size of the last packet\\n // (or of all the packets, for the CBR case) is larger than maximum frame size.\\n if (lastSizeBytes > this.OPUS_MAX_FRAME_SIZE_BYTES)\\n return this.OPUS_INVALID_PACKET;\\n frameSizes[numFrames - 1][0] = lastSizeBytes;\\n }\\n // Store the offset to the start of the payload.\\n if (payloadOffset)\\n payloadOffset[0] = byteOffset;\\n // Store the offsets to the start of each frame.\\n for (let i = 0; i < numFrames; ++i) {\\n if (frameOffsets)\\n frameOffsets[i][0] = byteOffset;\\n byteOffset += frameSizes[i][0];\\n }\\n // Store the length of the Opus packet.\\n if (packetLenBytes)\\n packetLenBytes[0] = byteOffset + paddingBytes;\\n return numFrames;\\n }\\n /**\\n * Parse a single undelimited Opus packet into one or more Opus frames.\\n *\\n * @param packet Opus packet to be parsed.\\n * @param lenBytes Size of the packet (in bytes).\\n * @param tocByte Optional variable to store the TOC (table of contents) byte.\\n * @param frameOffsets Optional variable to store the offsets (from the start of the packet) to the first bytes of\\n * each Opus frame.\\n * @param frameSizes Required variable to store the sizes (in bytes) of each Opus frame.\\n * @param payloadOffset Optional variable to store the offset (from the start of the packet) to the first byte of the\\n * payload.\\n * @returns Number of Opus frames.\\n */\\n opusPacketParse(packet, lenBytes, tocByte, frameOffsets, frameSizes, payloadOffset) {\\n return this.opusPacketParseImpl(packet, lenBytes, \\n /* selfDelimited */ false, tocByte, frameOffsets, frameSizes, payloadOffset, null);\\n }\\n /**\\n * This function returns the SILK VAD (voice activity detection) information encoded in the Opus packet. For CELT-only\\n * packets that do not have VAD information, it returns -1.\\n *\\n * @param packet Opus packet.\\n * @param lenBytes Size of the packet (in bytes).\\n * @returns 0: no frame had the VAD flag set.\\n * 1: at least one frame had the VAD flag set.\\n * -1: VAD status could not be determined.\\n */\\n opusPacketHasVoiceActivity(packet, lenBytes) {\\n if (!packet || lenBytes <= 0)\\n return 0;\\n // In CELT-only mode, we can not determine whether there is VAD.\\n if (this.opusPacketIsCeltOnly(packet))\\n return -1;\\n const numSilkFrames = this.opusNumSilkFrames(packet);\\n // It is not possible for `opusNumSilkFrames()` to return 0, so we ignore the next sanity check for test coverage.\\n /* istanbul ignore next */\\n if (numSilkFrames === 0)\\n return -1;\\n const opusFrameOffsets = new Array(this.OPUS_MAX_OPUS_FRAMES);\\n const opusFrameSizes = new Array(this.OPUS_MAX_OPUS_FRAMES);\\n for (let i = 0; i < this.OPUS_MAX_OPUS_FRAMES; ++i) {\\n opusFrameOffsets[i] = [undefined];\\n opusFrameSizes[i] = [undefined];\\n }\\n // Parse packet to get the Opus frames.\\n const numOpusFrames = this.opusPacketParse(packet, lenBytes, null, opusFrameOffsets, opusFrameSizes, null);\\n // VAD status cannot be determined for invalid packets.\\n if (numOpusFrames < 0)\\n return -1;\\n // Iterate over all Opus frames, which may contain multiple SILK frames, to determine the VAD status.\\n for (let i = 0; i < numOpusFrames; ++i) {\\n if (opusFrameSizes[i][0] < 1)\\n continue;\\n // LP layer header bits format (https://www.rfc-editor.org/rfc/rfc6716#section-4.2.3):\\n //\\n // Mono case:\\n // +-----------------+----------+\\n // | 1 to 3 VAD bits | LBRR bit |\\n // +-----------------+----------+\\n //\\n // Stereo case:\\n // +---------------------+--------------+----------------------+---------------+\\n // | 1 to 3 mid VAD bits | mid LBRR bit | 1 to 3 side VAD bits | side LBRR bit |\\n // +---------------------+--------------+----------------------+---------------+\\n // The upper 1 to 3 bits (dependent on the number of SILK frames) of the LP layer contain VAD bits. If any of\\n // these VAD bits are 1, then voice activity is present.\\n if (packet.getUint8(opusFrameOffsets[i][0]) >> (8 - numSilkFrames))\\n return 1;\\n // In the stereo case, there is a second set of 1 to 3 VAD bits, so also check these VAD bits.\\n const channels = this.opusPacketGetNumChannels(packet);\\n if (channels === 2 &&\\n (packet.getUint8(opusFrameOffsets[i][0]) << (numSilkFrames + 1)) >> (8 - numSilkFrames)) {\\n return 1;\\n }\\n }\\n // No voice activity was detected.\\n return 0;\\n }\\n /**\\n * This method is based on Definition of the Opus Audio Codec\\n * (https://tools.ietf.org/html/rfc6716). Basically, this method is based on\\n * parsing the LP layer of an Opus packet, particularly the LBRR flag.\\n *\\n * @param packet Opus packet.\\n * @param lenBytes Size of the packet (in bytes).\\n * @returns true: packet has fec encoding about previous packet.\\n * false: no fec encoding present.\\n */\\n opusPacketHasFec(packet, lenBytes) {\\n if (!packet || lenBytes <= 0)\\n return false;\\n // In CELT-only mode, packets should not have FEC.\\n if (this.opusPacketIsCeltOnly(packet))\\n return false;\\n const opusFrameOffsets = new Array(this.OPUS_MAX_OPUS_FRAMES);\\n const opusFrameSizes = new Array(this.OPUS_MAX_OPUS_FRAMES);\\n for (let i = 0; i < this.OPUS_MAX_OPUS_FRAMES; ++i) {\\n opusFrameOffsets[i] = [undefined];\\n opusFrameSizes[i] = [undefined];\\n }\\n // Parse packet to get the Opus frames.\\n const numOpusFrames = this.opusPacketParse(packet, lenBytes, null, opusFrameOffsets, opusFrameSizes, null);\\n if (numOpusFrames < 0)\\n return false;\\n /* istanbul ignore next */\\n if (opusFrameSizes[0][0] <= 1)\\n return false;\\n const numSilkFrames = this.opusNumSilkFrames(packet);\\n /* istanbul ignore next */\\n if (numSilkFrames === 0)\\n return false;\\n const channels = this.opusPacketGetNumChannels(packet);\\n /* istanbul ignore next */\\n if (channels !== 1 && channels !== 2)\\n return false;\\n // A frame starts with the LP layer. The LP layer begins with two to eight\\n // header bits.These consist of one VAD bit per SILK frame (up to 3),\\n // followed by a single flag indicating the presence of LBRR frames.\\n // For a stereo packet, these first flags correspond to the mid channel, and\\n // a second set of flags is included for the side channel. Because these are\\n // the first symbols decoded by the range coder and because they are coded\\n // as binary values with uniform probability, they can be extracted directly\\n // from the most significant bits of the first byte of compressed data.\\n for (let i = 0; i < channels; i++) {\\n if (packet.getUint8(opusFrameOffsets[0][0]) & (0x80 >> ((i + 1) * (numSilkFrames + 1) - 1)))\\n return true;\\n }\\n return false;\\n }\\n}\\nRedundantAudioEncoder.shouldLog = true;\\nRedundantAudioEncoder.shouldReportStats = true;\\nRedundantAudioEncoder.initializeWorker();\\n\";\nexports.default = RedundantAudioEncoderWorkerCode;\n//# sourceMappingURL=RedundantAudioEncoderWorkerCode.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst AudioProfile_1 = __importDefault(require(\"../audioprofile/AudioProfile\"));\nconst RedundantAudioRecoveryMetricReport_1 = __importDefault(require(\"../clientmetricreport/RedundantAudioRecoveryMetricReport\"));\nconst RedundantAudioEncoder_1 = __importDefault(require(\"../redundantaudioencoder/RedundantAudioEncoder\"));\nconst RedundantAudioEncoderWorkerCode_1 = __importDefault(require(\"../redundantaudioencoderworkercode/RedundantAudioEncoderWorkerCode\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nclass DefaultTransceiverController {\n constructor(logger, browserBehavior, meetingSessionContext) {\n this.logger = logger;\n this.browserBehavior = browserBehavior;\n this.meetingSessionContext = meetingSessionContext;\n this._localCameraTransceiver = null;\n this._localAudioTransceiver = null;\n this.videoSubscriptions = [];\n this.defaultMediaStream = null;\n this.peer = null;\n this.streamIdToTransceiver = new Map();\n this.groupIdToTransceiver = new Map();\n this.audioRedWorker = null;\n this.audioRedWorkerURL = null;\n this.audioMetricsHistory = new Array();\n this.redMetricsObservers = new Set();\n this.currentNumRedundantEncodings = 0;\n this.lastRedHolddownTimerStartTimestampMs = 0;\n this.lastHighPacketLossEventTimestampMs = 0;\n this.lastAudioRedTurnOffTimestampMs = 0;\n this.maxAudioMetricsHistory = 20;\n this.audioRedPacketLossShortEvalPeriodMs = 5 * 1000; // 5s\n this.audioRedPacketLossLongEvalPeriodMs = 15 * 1000; // 15s\n this.audioRedHoldDownTimeMs = 5 * 60 * 1000; // 5m\n this.redRecoveryTimeMs = 1 * 60 * 1000; // 1m\n }\n setEncodingParameters(encodingParamMap) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._localCameraTransceiver || this._localCameraTransceiver.direction !== 'sendrecv') {\n return;\n }\n const sender = this._localCameraTransceiver.sender;\n if (!encodingParamMap || encodingParamMap.size === 0) {\n return;\n }\n const newEncodingParams = Array.from(encodingParamMap.values());\n const oldParam = sender.getParameters();\n if (!oldParam.encodings || oldParam.encodings.length === 0) {\n oldParam.encodings = newEncodingParams;\n }\n else {\n for (const existing of oldParam.encodings) {\n for (const changed of newEncodingParams) {\n if ((existing.rid || changed.rid) && existing.rid !== changed.rid) {\n continue;\n }\n let key;\n for (key in changed) {\n // These properties can't be changed.\n if (key === 'rid' || key === 'codecPayloadType') {\n continue;\n }\n /* istanbul ignore else */\n if (changed.hasOwnProperty(key)) {\n existing[key] = changed[key];\n }\n }\n }\n }\n }\n yield sender.setParameters(oldParam);\n });\n }\n localAudioTransceiver() {\n return this._localAudioTransceiver;\n }\n localVideoTransceiver() {\n return this._localCameraTransceiver;\n }\n setVideoSendingBitrateKbps(bitrateKbps) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._localCameraTransceiver || this._localCameraTransceiver.direction !== 'sendrecv') {\n return;\n }\n const sender = this._localCameraTransceiver.sender;\n if (!sender || bitrateKbps <= 0) {\n return;\n }\n const param = sender.getParameters();\n if (!param.encodings) {\n param.encodings = [{}];\n }\n for (const encodeParam of param.encodings) {\n encodeParam.maxBitrate = bitrateKbps * 1000;\n }\n yield sender.setParameters(param);\n });\n }\n setPeer(peer) {\n this.peer = peer;\n }\n reset() {\n this.destroyAudioRedWorkerAndStates();\n this._localCameraTransceiver = null;\n this._localAudioTransceiver = null;\n this.videoSubscriptions = [];\n this.defaultMediaStream = null;\n this.peer = null;\n }\n useTransceivers() {\n return !!this.peer && typeof this.peer.getTransceivers !== 'undefined';\n }\n hasVideoInput() {\n if (!this._localCameraTransceiver || this._localCameraTransceiver.direction !== 'sendrecv')\n return false;\n return true;\n }\n trackIsVideoInput(track) {\n if (!this._localCameraTransceiver) {\n return false;\n }\n return (track === this._localCameraTransceiver.sender.track ||\n track === this._localCameraTransceiver.receiver.track);\n }\n setupLocalTransceivers() {\n var _a, _b;\n if (!this.useTransceivers()) {\n return;\n }\n if (!this.defaultMediaStream && typeof MediaStream !== 'undefined') {\n this.defaultMediaStream = new MediaStream();\n }\n if (!this._localAudioTransceiver) {\n this._localAudioTransceiver = this.peer.addTransceiver('audio', {\n direction: 'inactive',\n streams: [this.defaultMediaStream],\n });\n if ((_b = (_a = this.meetingSessionContext) === null || _a === void 0 ? void 0 : _a.audioProfile) === null || _b === void 0 ? void 0 : _b.hasRedundancyEnabled()) {\n // This will perform additional necessary setup for the audio transceiver.\n this.setupAudioRedWorker();\n }\n }\n if (!this._localCameraTransceiver) {\n this._localCameraTransceiver = this.addTransceiver('video', {\n direction: 'inactive',\n streams: [this.defaultMediaStream],\n });\n }\n }\n replaceAudioTrack(track) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._localAudioTransceiver || this._localAudioTransceiver.direction !== 'sendrecv') {\n this.logger.info(`audio transceiver direction is not set up or not activated`);\n return false;\n }\n yield this._localAudioTransceiver.sender.replaceTrack(track);\n return true;\n });\n }\n setAudioInput(track) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setTransceiverInput(this._localAudioTransceiver, track);\n return;\n });\n }\n setVideoInput(track) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setTransceiverInput(this._localCameraTransceiver, track);\n return;\n });\n }\n updateVideoTransceivers(videoStreamIndex, videosToReceive) {\n if (!this.useTransceivers()) {\n return videosToReceive.array();\n }\n // See https://blog.mozilla.org/webrtc/rtcrtptransceiver-explored/ for details on transceivers\n const transceivers = this.peer.getTransceivers();\n // Subscription index 0 is reserved for transmitting camera.\n // We mark inactive slots with 0 in the subscription array.\n this.videoSubscriptions = [0];\n videosToReceive = videosToReceive.clone();\n this.updateTransceivers(transceivers, videoStreamIndex, videosToReceive);\n this.logger.debug(() => {\n return this.debugDumpTransceivers();\n });\n return this.videoSubscriptions;\n }\n updateTransceivers(transceivers, videoStreamIndex, videosToReceive) {\n const videosRemaining = videosToReceive.array();\n if (transceivers.length !== 0 && !transceivers[0].stop) {\n // This function and its usage can be removed once we raise Chrome browser requirements\n // to M88 (when `RTCRtpTransceiver.stop` was added)\n this.logger.info('Updating transceivers without `stop` function');\n this.updateTransceiverWithoutStop(transceivers, videoStreamIndex, videosRemaining);\n }\n else if (transceivers.length !== 0) {\n this.updateTransceiverWithStop(transceivers, videoStreamIndex, videosRemaining);\n }\n // Add transceivers for the remaining subscriptions\n for (const index of videosRemaining) {\n // @ts-ignore\n const transceiver = this.addTransceiver('video', {\n direction: 'recvonly',\n streams: [new MediaStream()],\n });\n this.streamIdToTransceiver.set(index, transceiver);\n this.groupIdToTransceiver.set(videoStreamIndex.groupIdForStreamId(index), transceiver);\n this.videoSubscriptions.push(index);\n this.logger.info(`adding transceiver mid: ${transceiver.mid} subscription: ${index} direction: recvonly`);\n }\n }\n updateTransceiverWithStop(transceivers, videoStreamIndex, videosRemaining) {\n // Begin counting out index in the the subscription array at 1 since the camera.\n // Always occupies position 0 (whether active or not).\n let n = 1;\n // Reset since otherwise there will be stale indexes corresponding to\n // stopped transceivers.\n this.videoSubscriptions = [0];\n for (const transceiver of transceivers) {\n if (transceiver === this._localCameraTransceiver ||\n !this.transceiverIsVideo(transceiver) ||\n !transceiver.mid) {\n continue;\n }\n let reusingTranceiver = false;\n // See if we want this existing transceiver for a simulcast stream switch\n //\n // By convention with the service backend, msid is equal to the media section mid, prefixed with the string \"v_\";\n // we use this to get the stream ID for the track\n const streamId = videoStreamIndex.streamIdForTrack('v_' + transceiver.mid);\n if (transceiver.direction !== 'inactive' && streamId !== undefined) {\n for (const [index, recvStreamId] of videosRemaining.entries()) {\n // `streamId` may still be the same as `recvStreamId`\n if (videoStreamIndex.StreamIdsInSameGroup(streamId, recvStreamId)) {\n transceiver.direction = 'recvonly';\n this.videoSubscriptions[n] = recvStreamId;\n reusingTranceiver = true;\n this.streamIdToTransceiver.delete(streamId);\n this.streamIdToTransceiver.set(recvStreamId, transceiver);\n videosRemaining.splice(index, 1);\n break;\n }\n }\n }\n if (!reusingTranceiver) {\n this.videoSubscriptions[n] = 0;\n this.logger.info(`Stopping MID: ${transceiver.mid}, direction: ${transceiver.direction}, current direction: ${transceiver.currentDirection}`);\n // Clean up transceiver and mappings for streams that have been unsubscribed from. Note we do not try to reuse\n // old inactive transceivers for new streams as Firefox will reuse the last frame from\n // that transceiver, and additionally we simply don't want to risk wiring up a transceiver\n // to the incorrect video stream for no real benefit besides possible a smaller SDP size.\n transceiver.stop(); // Note (as of Firefox 94): Firefox will keep these around forever\n for (const [streamId, previousTransceiver] of this.streamIdToTransceiver.entries()) {\n if (transceiver.mid === previousTransceiver.mid) {\n this.streamIdToTransceiver.delete(streamId);\n this.groupIdToTransceiver.delete(videoStreamIndex.groupIdForStreamId(streamId));\n }\n }\n }\n n += 1;\n }\n }\n // This function operates similarily to `updateTransceiverWithStop` with the following changes to account\n // for the fact RTCRtpTransceiver.stop is not available on all supported browsers:\n // * We attempt to reuse inactive transceivers because libwebrtc will not remove them otherwise and\n // the SDP will grow endlessly.\n // * We mark unsubscribed transceivers as 'inactive' so that they can be reused. This requires using a\n // second for loop.\n updateTransceiverWithoutStop(transceivers, videoStreamIndex, videosRemaining) {\n let n = 1;\n for (const transceiver of transceivers) {\n if (transceiver === this._localCameraTransceiver || !this.transceiverIsVideo(transceiver)) {\n continue;\n }\n this.videoSubscriptions[n] = 0;\n if (transceiver.direction !== 'inactive') {\n const streamId = videoStreamIndex.streamIdForTrack('v_' + transceiver.mid);\n if (streamId !== undefined) {\n for (const [index, recvStreamId] of videosRemaining.entries()) {\n if (videoStreamIndex.StreamIdsInSameGroup(streamId, recvStreamId)) {\n transceiver.direction = 'recvonly';\n this.videoSubscriptions[n] = recvStreamId;\n this.streamIdToTransceiver.delete(streamId);\n this.streamIdToTransceiver.set(recvStreamId, transceiver);\n videosRemaining.splice(index, 1);\n break;\n }\n }\n }\n }\n n += 1;\n }\n // Next fill in open slots and remove unused\n n = 1;\n for (const transceiver of transceivers) {\n if (transceiver === this._localCameraTransceiver || !this.transceiverIsVideo(transceiver)) {\n continue;\n }\n if (transceiver.direction === 'inactive' && videosRemaining.length > 0) {\n // Fill available slot\n transceiver.direction = 'recvonly';\n const streamId = videosRemaining.shift();\n this.videoSubscriptions[n] = streamId;\n this.streamIdToTransceiver.set(streamId, transceiver);\n this.groupIdToTransceiver.set(videoStreamIndex.groupIdForStreamId(streamId), transceiver);\n }\n else {\n // Remove if no longer subscribed\n if (this.videoSubscriptions[n] === 0) {\n transceiver.direction = 'inactive';\n for (const [streamId, previousTransceiver] of this.streamIdToTransceiver.entries()) {\n if (transceiver === previousTransceiver) {\n this.streamIdToTransceiver.delete(streamId);\n this.groupIdToTransceiver.delete(videoStreamIndex.groupIdForStreamId(streamId));\n }\n }\n }\n }\n n += 1;\n }\n }\n getMidForStreamId(streamId) {\n var _a;\n return (_a = this.streamIdToTransceiver.get(streamId)) === null || _a === void 0 ? void 0 : _a.mid;\n }\n setStreamIdForMid(mid, newStreamId) {\n for (const [streamId, transceiver] of this.streamIdToTransceiver.entries()) {\n if (transceiver.mid === mid) {\n this.streamIdToTransceiver.delete(streamId);\n this.streamIdToTransceiver.set(newStreamId, transceiver);\n return;\n }\n }\n }\n getMidForGroupId(groupId) {\n var _a;\n return (_a = this.groupIdToTransceiver.get(groupId)) === null || _a === void 0 ? void 0 : _a.mid;\n }\n transceiverIsVideo(transceiver) {\n return ((transceiver.receiver &&\n transceiver.receiver.track &&\n transceiver.receiver.track.kind === 'video') ||\n (transceiver.sender && transceiver.sender.track && transceiver.sender.track.kind === 'video'));\n }\n debugDumpTransceivers() {\n let msg = '';\n let n = 0;\n for (const transceiver of this.peer.getTransceivers()) {\n if (!this.transceiverIsVideo(transceiver)) {\n continue;\n }\n msg += `transceiver index=${n} mid=${transceiver.mid} subscription=${this.videoSubscriptions[n]} direction=${transceiver.direction}\\n`;\n n += 1;\n }\n return msg;\n }\n setTransceiverInput(transceiver, track) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!transceiver) {\n return;\n }\n if (track) {\n transceiver.direction = 'sendrecv';\n }\n else {\n transceiver.direction = 'inactive';\n }\n yield transceiver.sender.replaceTrack(track);\n });\n }\n forEachRedMetricsObserver(redMetricReport) {\n for (const observer of this.redMetricsObservers) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n // Since this executes asynchronously, we need to check if the observer has not been removed.\n if (this.redMetricsObservers.has(observer)) {\n observer.recoveryMetricsDidReceive(redMetricReport);\n }\n });\n }\n }\n disableAudioRedundancy() {\n // Reset the audio profile with the configured bitrate and force redundancy to be false.\n this.meetingSessionContext.audioProfile = new AudioProfile_1.default(this.meetingSessionContext.audioProfile.audioBitrateBps, false);\n this.meetingSessionContext.audioVideoController.setAudioProfile(this.meetingSessionContext.audioProfile);\n }\n setupAudioRedWorker() {\n var _a, _b;\n // @ts-ignore\n const supportsRTCScriptTransform = !!window.RTCRtpScriptTransform;\n // @ts-ignore\n const supportsInsertableStreams = !!RTCRtpSender.prototype.createEncodedStreams;\n if (supportsRTCScriptTransform) {\n // This is the prefered approach according to\n // https://github.com/w3c/webrtc-encoded-transform/blob/main/explainer.md.\n this.logger.info('[AudioRed] Supports encoded insertable streams using RTCRtpScriptTransform');\n }\n else if (supportsInsertableStreams) {\n this.logger.info('[AudioRed] Supports encoded insertable streams using TransformStream');\n }\n else {\n this.disableAudioRedundancy();\n // We need to recreate the peer connection without encodedInsertableStreams in the\n // peer connection config otherwise we would need to create pass through transforms\n // for all media streams. Throwing the error here and having AttackMediaInputTask throw the\n // error again will result in a full reconnect.\n throw new Error('[AudioRed] Encoded insertable streams not supported. Recreating peer connection with audio redundancy disabled.');\n }\n // Run the entire redundant audio worker setup in a `try` block to allow any errors to trigger a reconnect with\n // audio redundancy disabled.\n try {\n this.audioRedWorkerURL = URL.createObjectURL(new Blob([RedundantAudioEncoderWorkerCode_1.default], {\n type: 'application/javascript',\n }));\n this.logger.info(`[AudioRed] Redundant audio worker URL ${this.audioRedWorkerURL}`);\n this.audioRedWorker = new Worker(this.audioRedWorkerURL);\n }\n catch (error) {\n this.logger.error(`[AudioRed] Unable to create audio red worker due to ${error}`);\n URL.revokeObjectURL(this.audioRedWorkerURL);\n this.audioRedWorkerURL = null;\n this.audioRedWorker = null;\n this.disableAudioRedundancy();\n this.logger.info(`[AudioRed] Recreating peer connection with audio redundancy disabled`);\n // We need to recreate the peer connection without encodedInsertableStreams in the\n // peer connection config otherwise we would need to create pass through transforms\n // for all media streams. Throwing the error here and having AttackMediaInputTask throw the\n // error again will result in a full reconnect.\n throw error;\n }\n this.audioRedEnabled = true;\n // We cannot use console.log in production code and we cannot\n // transfer the logger object so we need the worker to post messages\n // to the main thread for logging\n this.audioRedWorker.onmessage = (event) => {\n /* istanbul ignore else */\n if (event.data.type === 'REDWorkerLog') {\n this.logger.info(event.data.log);\n } /* istanbul ignore next */\n else if (event.data.type === 'RedundantAudioEncoderStats') {\n const redMetricReport = new RedundantAudioRecoveryMetricReport_1.default();\n redMetricReport.currentTimestampMs = Date.now();\n redMetricReport.ssrc = event.data.ssrc;\n redMetricReport.totalAudioPacketsLost = event.data.totalAudioPacketsLost;\n redMetricReport.totalAudioPacketsExpected = event.data.totalAudioPacketsExpected;\n redMetricReport.totalAudioPacketsRecoveredRed = event.data.totalAudioPacketsRecoveredRed;\n redMetricReport.totalAudioPacketsRecoveredFec = event.data.totalAudioPacketsRecoveredFec;\n this.forEachRedMetricsObserver(redMetricReport);\n }\n };\n if (supportsRTCScriptTransform) {\n // @ts-ignore\n this._localAudioTransceiver.sender.transform = new RTCRtpScriptTransform(this.audioRedWorker, { type: 'SenderTransform' });\n // @ts-ignore\n this._localAudioTransceiver.receiver.transform = new RTCRtpScriptTransform(this.audioRedWorker, { type: 'ReceiverTransform' });\n // eslint-disable-next-line\n }\n else /* istanbul ignore else */ if (supportsInsertableStreams) {\n // @ts-ignore\n const sendStreams = this._localAudioTransceiver.sender.createEncodedStreams();\n // @ts-ignore\n const receiveStreams = this._localAudioTransceiver.receiver.createEncodedStreams();\n this.audioRedWorker.postMessage({\n msgType: 'StartRedWorker',\n send: sendStreams,\n receive: receiveStreams,\n }, [\n sendStreams.readable,\n sendStreams.writable,\n receiveStreams.readable,\n receiveStreams.writable,\n ]);\n }\n /* istanbul ignore next */\n (_a = this.meetingSessionContext) === null || _a === void 0 ? void 0 : _a.audioVideoController.addObserver(this);\n /* istanbul ignore next */\n this.addRedundantAudioRecoveryMetricsObserver((_b = this.meetingSessionContext) === null || _b === void 0 ? void 0 : _b.statsCollector);\n }\n /**\n * Adds a transceiver to the peer connection and performs additional necessary setup.\n */\n addTransceiver(trackOrKind, init) {\n var _a;\n const transceiver = this.peer.addTransceiver(trackOrKind, init);\n // @ts-ignore\n // Transforms need to be setup for every transceiver to allow media flow for the given transceiver if WebRTC Encoded\n // Transform (https://github.com/w3c/webrtc-encoded-transform/blob/main/explainer.md) is used.\n if (!((_a = this.peer.getConfiguration()) === null || _a === void 0 ? void 0 : _a.encodedInsertableStreams) || !this.audioRedWorker)\n return transceiver;\n // @ts-ignore\n const supportsRTCScriptTransform = !!window.RTCRtpScriptTransform;\n // @ts-ignore\n const supportsInsertableStreams = !!RTCRtpSender.prototype.createEncodedStreams;\n if (supportsRTCScriptTransform) {\n // @ts-ignore\n transceiver.sender.transform = new RTCRtpScriptTransform(this.audioRedWorker, {\n type: 'PassthroughTransform',\n });\n // @ts-ignore\n transceiver.receiver.transform = new RTCRtpScriptTransform(this.audioRedWorker, {\n type: 'PassthroughTransform',\n });\n // eslint-disable-next-line\n }\n else /* istanbul ignore else */ if (supportsInsertableStreams) {\n // @ts-ignore\n const sendStreams = transceiver.sender.createEncodedStreams();\n // @ts-ignore\n const receiveStreams = transceiver.receiver.createEncodedStreams();\n this.audioRedWorker.postMessage({\n msgType: 'PassthroughTransform',\n send: sendStreams,\n receive: receiveStreams,\n }, [\n sendStreams.readable,\n sendStreams.writable,\n receiveStreams.readable,\n receiveStreams.writable,\n ]);\n }\n return transceiver;\n }\n destroyAudioRedWorkerAndStates() {\n var _a, _b;\n if (this.audioRedWorker) {\n URL.revokeObjectURL(this.audioRedWorkerURL);\n this.audioRedWorkerURL = null;\n this.audioRedWorker = null;\n this.currentNumRedundantEncodings = 0;\n this.lastRedHolddownTimerStartTimestampMs = 0;\n this.lastAudioRedTurnOffTimestampMs = 0;\n this.lastHighPacketLossEventTimestampMs = 0;\n this.audioRedEnabled = true;\n /* istanbul ignore next */\n (_a = this.meetingSessionContext) === null || _a === void 0 ? void 0 : _a.audioVideoController.removeObserver(this);\n /* istanbul ignore next */\n this.removeRedundantAudioRecoveryMetricsObserver((_b = this.meetingSessionContext) === null || _b === void 0 ? void 0 : _b.statsCollector);\n }\n }\n setAudioPayloadTypes(payloadTypeMap) {\n if (this.audioRedWorker) {\n this.audioRedWorker.postMessage({\n msgType: 'RedPayloadType',\n payloadType: payloadTypeMap.get('red'),\n });\n this.audioRedWorker.postMessage({\n msgType: 'OpusPayloadType',\n payloadType: payloadTypeMap.get('opus'),\n });\n }\n }\n metricsDidReceive(clientMetricReport) {\n const { currentTimestampMs } = clientMetricReport;\n const rtcStatsReport = clientMetricReport.getRTCStatsReport();\n let receiverReportReceptionTimestampMs = 0;\n let currentTotalPacketsSent = 0;\n let currentTotalPacketsLost = 0;\n rtcStatsReport.forEach(report => {\n /* istanbul ignore else */\n if (report.kind === 'audio') {\n /* istanbul ignore else */\n if (report.type === 'outbound-rtp') {\n currentTotalPacketsSent = report.packetsSent;\n } /* istanbul ignore else */\n else if (report.type === 'remote-inbound-rtp') {\n // Use the timestamp that the receiver report was received on the client side to get a more accurate time\n // interval for the metrics.\n receiverReportReceptionTimestampMs = report.timestamp;\n currentTotalPacketsLost = report.packetsLost;\n }\n }\n });\n // Since the timestamp from the server side is only updated when a new receiver report is generated, only add\n // metrics with new timestamps to our metrics history.\n //\n // Also, make sure that the total packets sent is greater than the most recent value in the history before consuming\n // to avoid divide-by-zero while calculating uplink loss percent.\n if (this.audioMetricsHistory.length === 0 ||\n (receiverReportReceptionTimestampMs >\n this.audioMetricsHistory[this.audioMetricsHistory.length - 1].timestampMs &&\n currentTotalPacketsSent >\n this.audioMetricsHistory[this.audioMetricsHistory.length - 1].totalPacketsSent)) {\n // Note that although the total packets sent is updated anytime we get the WebRTC stats, we are only adding a new\n // metric for total packets sent when we receive a new receiver report. We only care about the total packets that\n // the server was expected to receive at the time that the latest `packetsLost` metric was calculated in order to\n // do our uplink loss calculation. Therefore, we only record the total packets sent when we receive a new receiver\n // report, which will give us an estimate of the number of packets that the server was supposed to receive at the\n // time when the latest `packetsLost` metric was calculated.\n this.audioMetricsHistory.push({\n timestampMs: receiverReportReceptionTimestampMs,\n totalPacketsSent: currentTotalPacketsSent,\n totalPacketsLost: currentTotalPacketsLost,\n });\n }\n // Remove the oldest metric report from our list\n if (this.audioMetricsHistory.length > this.maxAudioMetricsHistory) {\n this.audioMetricsHistory.shift();\n }\n // As the minimum RTCP frequency is about 1 every 5 seconds,\n // we are limited to using a minimum timewindow of 5 seconds.\n // This is because the cumulative packetsLost metric remains\n // the same for 5 consecutive client metric reports.\n const lossPercent5sTimewindow = this.lossPercent(this.audioRedPacketLossShortEvalPeriodMs);\n const lossPercent15sTimewindow = this.lossPercent(this.audioRedPacketLossLongEvalPeriodMs);\n // Taking the max loss percent between a short and long time window will allow\n // us to increase the number of encodings fast but will slowly decrease the\n // number of encodings on loss recovery.\n const maxLossPercent = Math.max(lossPercent5sTimewindow, lossPercent15sTimewindow);\n const [newNumRedundantEncodings, shouldTurnOffRed,] = RedundantAudioEncoder_1.default.getNumRedundantEncodingsForPacketLoss(maxLossPercent);\n if (shouldTurnOffRed) {\n this.lastHighPacketLossEventTimestampMs = currentTimestampMs;\n /* istanbul ignore next */\n if (this.audioRedEnabled) {\n if (this.audioRedWorker) {\n this.audioRedWorker.postMessage({\n msgType: 'Disable',\n });\n }\n this.audioRedEnabled = false;\n this.lastAudioRedTurnOffTimestampMs = currentTimestampMs;\n }\n return;\n }\n else if (!this.audioRedEnabled) {\n const timeSinceRedOff = currentTimestampMs - this.lastAudioRedTurnOffTimestampMs;\n const timeSinceLastHighPacketLossEvent = currentTimestampMs - this.lastHighPacketLossEventTimestampMs;\n if (timeSinceRedOff >= this.audioRedPacketLossLongEvalPeriodMs &&\n timeSinceLastHighPacketLossEvent < this.redRecoveryTimeMs) {\n // This is probably not a transient high packet loss spike.\n // We need to turn off RED for awhile to avoid congestion collapse.\n return;\n }\n else {\n // Enable red as we've completed the recovery wait time.\n /* istanbul ignore next */\n if (this.audioRedWorker) {\n this.audioRedWorker.postMessage({\n msgType: 'Enable',\n });\n }\n this.audioRedEnabled = true;\n this.maybeResetHoldDownTimer(currentTimestampMs);\n }\n }\n if (this.shouldUpdateAudioRedWorkerEncodings(currentTimestampMs, newNumRedundantEncodings)) {\n /* istanbul ignore next */\n if (this.audioRedWorker) {\n this.audioRedWorker.postMessage({\n msgType: 'UpdateNumRedundantEncodings',\n numRedundantEncodings: newNumRedundantEncodings,\n });\n }\n }\n }\n maybeResetHoldDownTimer(currentTimestampMs) {\n if (this.currentNumRedundantEncodings > 0) {\n this.lastRedHolddownTimerStartTimestampMs = currentTimestampMs;\n }\n }\n lossPercent(timeWindowMs) {\n if (this.audioMetricsHistory.length < 2) {\n return 0;\n }\n const latestReceiverReportTimestampMs = this.audioMetricsHistory[this.audioMetricsHistory.length - 1].timestampMs;\n const currentTotalPacketsSent = this.audioMetricsHistory[this.audioMetricsHistory.length - 1].totalPacketsSent;\n const currentTotalPacketsLost = this.audioMetricsHistory[this.audioMetricsHistory.length - 1].totalPacketsLost;\n // Iterate backwards in the metrics history, from the report immediately preceeding\n // the latest one, until we find the first metric report whose timestamp differs\n // from the latest report by atleast timeWindowMs\n for (let i = this.audioMetricsHistory.length - 2; i >= 0; i--) {\n if (latestReceiverReportTimestampMs - this.audioMetricsHistory[i].timestampMs >=\n timeWindowMs) {\n const lossDelta = currentTotalPacketsLost - this.audioMetricsHistory[i].totalPacketsLost;\n const sentDelta = currentTotalPacketsSent - this.audioMetricsHistory[i].totalPacketsSent;\n const lossPercent = 100 * (lossDelta / sentDelta);\n return Math.max(0, Math.min(lossPercent, 100));\n }\n }\n // If we are here, we don't have enough entries in history\n // to calculate the loss for the given time window\n return 0;\n }\n shouldUpdateAudioRedWorkerEncodings(currentTimestampMs, newNumRedundantEncodings) {\n // If newNumRedundantEncodings is the same as the current\n // then we don't need to send a message to the red worker.\n if (this.currentNumRedundantEncodings === newNumRedundantEncodings) {\n this.maybeResetHoldDownTimer(currentTimestampMs);\n return false;\n }\n // If newNumRedundantEncodings is less than the current\n // check if we've cleared the hold down time and only\n // then allow the update to be sent to the red worker\n if (newNumRedundantEncodings < this.currentNumRedundantEncodings &&\n currentTimestampMs - this.lastRedHolddownTimerStartTimestampMs < this.audioRedHoldDownTimeMs) {\n return false;\n }\n this.currentNumRedundantEncodings = newNumRedundantEncodings;\n this.maybeResetHoldDownTimer(currentTimestampMs);\n return true;\n }\n addRedundantAudioRecoveryMetricsObserver(observer) {\n this.redMetricsObservers.add(observer);\n }\n removeRedundantAudioRecoveryMetricsObserver(observer) {\n this.redMetricsObservers.delete(observer);\n }\n}\nexports.default = DefaultTransceiverController;\n//# sourceMappingURL=DefaultTransceiverController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultTransceiverController_1 = __importDefault(require(\"./DefaultTransceiverController\"));\nclass SimulcastTransceiverController extends DefaultTransceiverController_1.default {\n constructor(logger, browserBehavior, meetingSessionContext) {\n super(logger, browserBehavior, meetingSessionContext);\n this.videoQualityControlParameterMap = new Map();\n let scale = 4;\n for (let i = 0; i < SimulcastTransceiverController.NAME_ARR_ASCENDING.length; i++) {\n const ridName = SimulcastTransceiverController.NAME_ARR_ASCENDING[i];\n this.videoQualityControlParameterMap.set(ridName, {\n rid: ridName,\n scaleResolutionDownBy: scale,\n maxBitrate: SimulcastTransceiverController.BITRATE_ARR_ASCENDING[i] * 1000,\n });\n scale = scale / 2;\n }\n }\n // Note: `scaleResolutionDownBy` has only been tested with values 1, 2, and 4.\n setEncodingParameters(encodingParamMap) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._localCameraTransceiver || this._localCameraTransceiver.direction !== 'sendrecv') {\n return;\n }\n const sender = this._localCameraTransceiver.sender;\n const newEncodingParams = Array.from(encodingParamMap.values());\n if (newEncodingParams.length <= 0) {\n return;\n }\n const oldParam = sender.getParameters();\n if (!oldParam.encodings) {\n oldParam.encodings = newEncodingParams;\n }\n else {\n for (const encoding of oldParam.encodings) {\n if (encoding.rid === SimulcastTransceiverController.LOW_LEVEL_NAME) {\n this.copyEncodingParams(encodingParamMap.get(SimulcastTransceiverController.LOW_LEVEL_NAME), encoding);\n }\n if (encoding.rid === SimulcastTransceiverController.MID_LEVEL_NAME) {\n this.copyEncodingParams(encodingParamMap.get(SimulcastTransceiverController.MID_LEVEL_NAME), encoding);\n }\n if (encoding.rid === SimulcastTransceiverController.HIGH_LEVEL_NAME) {\n this.copyEncodingParams(encodingParamMap.get(SimulcastTransceiverController.HIGH_LEVEL_NAME), encoding);\n }\n }\n }\n yield sender.setParameters(oldParam);\n this.logVideoTransceiverParameters();\n });\n }\n setVideoSendingBitrateKbps(_bitrateKbps) {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n setupLocalTransceivers() {\n var _a, _b;\n if (!this.useTransceivers()) {\n return;\n }\n if (!this.defaultMediaStream && typeof MediaStream !== 'undefined') {\n this.defaultMediaStream = new MediaStream();\n }\n if (!this._localAudioTransceiver) {\n this._localAudioTransceiver = this.peer.addTransceiver('audio', {\n direction: 'inactive',\n streams: [this.defaultMediaStream],\n });\n if ((_b = (_a = this.meetingSessionContext) === null || _a === void 0 ? void 0 : _a.audioProfile) === null || _b === void 0 ? void 0 : _b.hasRedundancyEnabled()) {\n // This will perform additional necessary setup for the audio transceiver.\n this.setupAudioRedWorker();\n }\n }\n if (!this._localCameraTransceiver) {\n const encodingParams = Array.from(this.videoQualityControlParameterMap.values());\n this._localCameraTransceiver = this.addTransceiver('video', {\n direction: 'inactive',\n streams: [this.defaultMediaStream],\n sendEncodings: encodingParams,\n });\n }\n }\n logVideoTransceiverParameters() {\n const params = this._localCameraTransceiver.sender.getParameters();\n const encodings = params.encodings;\n let msg = 'simulcast: current encoding parameters \\n';\n for (const encodingParam of encodings) {\n msg += `rid=${encodingParam.rid} maxBitrate=${encodingParam.maxBitrate} active=${encodingParam.active} scaleDownBy=${encodingParam.scaleResolutionDownBy} maxFrameRate = ${encodingParam.maxFramerate} \\n`;\n }\n this.logger.info(msg);\n }\n copyEncodingParams(fromEncodingParams, toEncodingParams) {\n toEncodingParams.active = fromEncodingParams.active;\n toEncodingParams.maxBitrate = fromEncodingParams.maxBitrate;\n toEncodingParams.scaleResolutionDownBy = fromEncodingParams.scaleResolutionDownBy;\n toEncodingParams.maxFramerate = fromEncodingParams.maxFramerate;\n }\n}\nexports.default = SimulcastTransceiverController;\nSimulcastTransceiverController.LOW_LEVEL_NAME = 'low';\nSimulcastTransceiverController.MID_LEVEL_NAME = 'mid';\nSimulcastTransceiverController.HIGH_LEVEL_NAME = 'hi';\nSimulcastTransceiverController.NAME_ARR_ASCENDING = ['low', 'mid', 'hi'];\nSimulcastTransceiverController.BITRATE_ARR_ASCENDING = [200, 400, 1100];\n//# sourceMappingURL=SimulcastTransceiverController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SimulcastTransceiverController_1 = __importDefault(require(\"./SimulcastTransceiverController\"));\nclass SimulcastContentShareTransceiverController extends SimulcastTransceiverController_1.default {\n constructor(logger, browserBehavior, meetingSessionContext) {\n super(logger, browserBehavior, meetingSessionContext);\n let scale = 2;\n this.videoQualityControlParameterMap = new Map();\n for (let i = 0; i < SimulcastContentShareTransceiverController.NAME_ARR_ASCENDING.length; i++) {\n const ridName = SimulcastContentShareTransceiverController.NAME_ARR_ASCENDING[i];\n this.videoQualityControlParameterMap.set(ridName, {\n rid: ridName,\n scaleResolutionDownBy: scale,\n maxBitrate: SimulcastContentShareTransceiverController.BITRATE_ARR_ASCENDING[i] * 1000,\n });\n scale = scale / 2;\n }\n }\n // Note: `scaleResolutionDownBy` has only been tested with values 1, 2, and 4.\n setEncodingParameters(encodingParamMap) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._localCameraTransceiver || this._localCameraTransceiver.direction !== 'sendrecv') {\n return;\n }\n const sender = this._localCameraTransceiver.sender;\n const newEncodingParams = Array.from(encodingParamMap.values());\n if (newEncodingParams.length <= 0) {\n return;\n }\n const oldParam = sender.getParameters();\n if (!oldParam.encodings) {\n oldParam.encodings = newEncodingParams;\n }\n else {\n for (let i = 0; i < oldParam.encodings.length; i++) {\n if (oldParam.encodings[i].rid === SimulcastTransceiverController_1.default.LOW_LEVEL_NAME) {\n this.copyEncodingParams(encodingParamMap.get(SimulcastTransceiverController_1.default.LOW_LEVEL_NAME), oldParam.encodings[i]);\n }\n if (oldParam.encodings[i].rid === SimulcastTransceiverController_1.default.HIGH_LEVEL_NAME) {\n this.copyEncodingParams(encodingParamMap.get(SimulcastTransceiverController_1.default.HIGH_LEVEL_NAME), oldParam.encodings[i]);\n }\n }\n }\n yield sender.setParameters(oldParam);\n this.logVideoTransceiverParameters();\n });\n }\n}\nexports.default = SimulcastContentShareTransceiverController;\nSimulcastContentShareTransceiverController.NAME_ARR_ASCENDING = ['low', 'hi'];\nSimulcastContentShareTransceiverController.BITRATE_ARR_ASCENDING = [300, 1200];\n//# sourceMappingURL=SimulcastContentShareTransceiverController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultTransceiverController_1 = __importDefault(require(\"./DefaultTransceiverController\"));\nclass VideoOnlyTransceiverController extends DefaultTransceiverController_1.default {\n constructor(logger, browserBehavior, meetingSessionContext) {\n super(logger, browserBehavior, meetingSessionContext);\n }\n setupLocalTransceivers() {\n if (!this.useTransceivers()) {\n return;\n }\n if (!this.defaultMediaStream && typeof MediaStream !== 'undefined') {\n this.defaultMediaStream = new MediaStream();\n }\n if (!this._localCameraTransceiver) {\n this._localCameraTransceiver = this.peer.addTransceiver('video', {\n direction: 'inactive',\n streams: [this.defaultMediaStream],\n });\n }\n }\n}\nexports.default = VideoOnlyTransceiverController;\n//# sourceMappingURL=VideoOnlyTransceiverController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DefaultVideoCaptureAndEncodeParameter {\n constructor(cameraWidth, cameraHeight, cameraFrameRate, maxEncodeBitrateKbps, isSimulcast, scaleResolutionDownBy = 1, isSVC = false) {\n this.cameraWidth = cameraWidth;\n this.cameraHeight = cameraHeight;\n this.cameraFrameRate = cameraFrameRate;\n this.maxEncodeBitrateKbps = maxEncodeBitrateKbps;\n this.isSimulcast = isSimulcast;\n this.scaleResolutionDownBy = scaleResolutionDownBy;\n this.isSVC = isSVC;\n }\n equal(other) {\n let checkForEqual = other.captureWidth() === this.cameraWidth &&\n other.captureHeight() === this.cameraHeight &&\n other.captureFrameRate() === this.cameraFrameRate &&\n other.encodeBitrates().length === this.encodeBitrates().length &&\n other.encodeScaleResolutionDownBy().length === this.encodeScaleResolutionDownBy().length &&\n other.encodeWidths().length === this.encodeWidths().length &&\n other.encodeHeights().length === this.encodeHeights().length &&\n other.isSVCEncoding() === this.isSVC;\n if (checkForEqual) {\n for (let i = 0; i < other.encodeWidths().length; i++) {\n if (other.encodeWidths()[i] !== this.encodeWidths()[i] ||\n other.encodeHeights()[i] !== this.encodeHeights()[i] ||\n other.encodeBitrates()[i] !== this.encodeBitrates()[i] ||\n other.encodeScaleResolutionDownBy()[i] !== this.encodeScaleResolutionDownBy()[i]) {\n checkForEqual = false;\n return checkForEqual;\n }\n }\n }\n return checkForEqual;\n }\n clone() {\n return new DefaultVideoCaptureAndEncodeParameter(this.cameraWidth, this.cameraHeight, this.cameraFrameRate, this.maxEncodeBitrateKbps, this.isSimulcast, this.scaleResolutionDownBy, this.isSVC);\n }\n captureWidth() {\n return this.cameraWidth;\n }\n captureHeight() {\n return this.cameraHeight;\n }\n captureFrameRate() {\n return this.cameraFrameRate;\n }\n encodeBitrates() {\n // TODO: add simulcast layer\n return [this.maxEncodeBitrateKbps];\n }\n encodeScaleResolutionDownBy() {\n return [this.scaleResolutionDownBy];\n }\n encodeWidths() {\n return [this.cameraWidth];\n }\n encodeHeights() {\n return [this.cameraHeight];\n }\n isSVCEncoding() {\n return this.isSVC;\n }\n}\nexports.default = DefaultVideoCaptureAndEncodeParameter;\n//# sourceMappingURL=DefaultVideoCaptureAndEncodeParameter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TargetDisplaySize = void 0;\n/**\n * [[TargetDisplaySize]] represents the max resolution that a video stream can have when simulcast is enabled in priority based downlink policy.\n * If there is only one stream being sent, then this field will get ignored. Its values currently parallel [[SimulcastLayers]].\n */\nvar TargetDisplaySize;\n(function (TargetDisplaySize) {\n /**\n * Low resolution video stream.\n */\n TargetDisplaySize[TargetDisplaySize[\"Low\"] = 0] = \"Low\";\n /**\n * Medium resolution video stream.\n */\n TargetDisplaySize[TargetDisplaySize[\"Medium\"] = 1] = \"Medium\";\n /**\n * High resolution video stream.\n */\n TargetDisplaySize[TargetDisplaySize[\"High\"] = 2] = \"High\";\n /**\n * Maximum resolution video stream.\n */\n TargetDisplaySize[TargetDisplaySize[\"Maximum\"] = 3] = \"Maximum\";\n})(TargetDisplaySize = exports.TargetDisplaySize || (exports.TargetDisplaySize = {}));\nexports.default = TargetDisplaySize;\n//# sourceMappingURL=TargetDisplaySize.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TargetDisplaySize_1 = __importDefault(require(\"./TargetDisplaySize\"));\nconst VideoQualityAdaptationPreference_1 = __importDefault(require(\"./VideoQualityAdaptationPreference\"));\nclass VideoPreference {\n /** Initializes a [[VideoPreference]] with the given properties.\n *\n * @param attendeeId Attendee ID of the client\n * @param priority The relative priority of this attendee against others.\n * @param targetSize The desired maximum simulcast layers to receive.\n * @param degradationPreference The preference on how to select between resolution and framerate on network constraint\n */\n constructor(attendeeId, priority, targetSize, degradationPreference) {\n this.attendeeId = attendeeId;\n this.priority = priority;\n this.targetSize = targetSize !== undefined ? targetSize : TargetDisplaySize_1.default.Maximum;\n this.degradationPreference =\n degradationPreference !== undefined\n ? degradationPreference\n : VideoQualityAdaptationPreference_1.default.Balanced;\n }\n partialCompare(other) {\n return this.priority - other.priority;\n }\n equals(other) {\n return (this.attendeeId === other.attendeeId &&\n this.targetSize === other.targetSize &&\n this.priority === other.priority &&\n this.degradationPreference === other.degradationPreference);\n }\n clone() {\n return new VideoPreference(this.attendeeId, this.priority, this.targetSize, this.degradationPreference);\n }\n targetSizeToBitrateKbps(targetSize) {\n switch (targetSize) {\n case TargetDisplaySize_1.default.Maximum:\n return VideoPreference.MAXIMUM_BITRATE_KBPS;\n case TargetDisplaySize_1.default.High:\n return VideoPreference.HIGH_BITRATE_KBPS;\n case TargetDisplaySize_1.default.Medium:\n return VideoPreference.MID_BITRATE_KBPS;\n case TargetDisplaySize_1.default.Low:\n return VideoPreference.LOW_BITRATE_KBPS;\n }\n }\n}\nexports.default = VideoPreference;\nVideoPreference.LOW_BITRATE_KBPS = 300;\nVideoPreference.MID_BITRATE_KBPS = 600;\nVideoPreference.HIGH_BITRATE_KBPS = 1500;\nVideoPreference.MAXIMUM_BITRATE_KBPS = 10000;\n//# sourceMappingURL=VideoPreference.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[VideoSource]] contains the information of a video source.\n */\nclass VideoSource {\n}\nexports.default = VideoSource;\n//# sourceMappingURL=VideoSource.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ServerSideNetworkAdaption_1 = __importDefault(require(\"../signalingclient/ServerSideNetworkAdaption\"));\n/**\n * [[VideoPriorityBasedPolicyConfig]] contains the network issue response delay and network issue recovery delay.\n */\nclass VideoPriorityBasedPolicyConfig {\n /** Initializes a [[VideoPriorityBasedPolicyConfig]] with the network event delays.\n *\n * @deprecated These values are not used when server side network adaptation is used, which will\n * become the default in the future. Therefore these constructors\n * will be deprecated and removed in a later releases.\n *\n * @param networkIssueResponseDelayFactor Delays before reducing subscribed video bitrate. Input should be a value between 0 and 1.\n * @param networkIssueRecoveryDelayFactor Delays before starting to increase bitrates after a network event and\n * delays between increasing video bitrates on each individual stream. Input should be a value between 0 and 1.\n */\n constructor(networkIssueResponseDelayFactor = 0, networkIssueRecoveryDelayFactor = 0) {\n this.networkIssueResponseDelayFactor = networkIssueResponseDelayFactor;\n this.networkIssueRecoveryDelayFactor = networkIssueRecoveryDelayFactor;\n this.currentNetworkEvent = 0 /* Stable */;\n this.bandwidthDecreaseTimestamp = 0; // the last time bandwidth decreases\n this.referenceBitrate = 0;\n /**\n * Additional server side features to be enabled for network adaption. This\n * may be overridden by the server. The default may be changed in future releases.\n */\n this.serverSideNetworkAdaption = ServerSideNetworkAdaption_1.default.Default;\n if (networkIssueResponseDelayFactor < 0) {\n networkIssueResponseDelayFactor = 0;\n }\n else if (networkIssueResponseDelayFactor > 1) {\n networkIssueResponseDelayFactor = 1;\n }\n this.networkIssueResponseDelayFactor = networkIssueResponseDelayFactor;\n if (networkIssueRecoveryDelayFactor < 0) {\n networkIssueRecoveryDelayFactor = 0;\n }\n else if (networkIssueRecoveryDelayFactor > 1) {\n networkIssueRecoveryDelayFactor = 1;\n }\n this.networkIssueRecoveryDelayFactor = networkIssueRecoveryDelayFactor;\n }\n // determine if subscribe is allowed based on network issue/recovery delays\n allowSubscribe(numberOfParticipants, currentEstimated) {\n let timeBeforeAllowSubscribeMs = 0;\n const previousNetworkEvent = this.currentNetworkEvent;\n if (currentEstimated > this.referenceBitrate) {\n // if bw increases\n this.currentNetworkEvent = 2 /* Increase */;\n this.referenceBitrate = currentEstimated;\n return true;\n }\n else if (currentEstimated < this.referenceBitrate) {\n // if bw decreases, we use response delay\n this.currentNetworkEvent = 1 /* Decrease */;\n timeBeforeAllowSubscribeMs = this.getSubscribeDelay(this.currentNetworkEvent, numberOfParticipants);\n if (previousNetworkEvent !== 1 /* Decrease */) {\n this.bandwidthDecreaseTimestamp = Date.now();\n }\n else if (Date.now() - this.bandwidthDecreaseTimestamp > timeBeforeAllowSubscribeMs) {\n this.referenceBitrate = currentEstimated;\n return true;\n }\n return false;\n }\n else {\n this.currentNetworkEvent = 0 /* Stable */;\n return false;\n }\n }\n // convert network event delay factor to actual delay in ms\n getSubscribeDelay(event, numberOfParticipants) {\n // left and right boundary of the delay\n let subscribeDelay = VideoPriorityBasedPolicyConfig.MINIMUM_DELAY_MS;\n const range = VideoPriorityBasedPolicyConfig.MAXIMUM_DELAY_MS -\n VideoPriorityBasedPolicyConfig.MINIMUM_DELAY_MS;\n const responseFactor = this.networkIssueResponseDelayFactor;\n switch (event) {\n case 1 /* Decrease */:\n // we include number of participants here since bigger size of the meeting will generate higher bitrate\n subscribeDelay += range * responseFactor * (1 + numberOfParticipants / 10);\n subscribeDelay = Math.min(VideoPriorityBasedPolicyConfig.MAXIMUM_DELAY_MS, subscribeDelay);\n break;\n }\n return subscribeDelay;\n }\n}\nexports.default = VideoPriorityBasedPolicyConfig;\nVideoPriorityBasedPolicyConfig.MINIMUM_DELAY_MS = 2000;\nVideoPriorityBasedPolicyConfig.MAXIMUM_DELAY_MS = 8000;\nVideoPriorityBasedPolicyConfig.Default = new VideoPriorityBasedPolicyConfig(0, 0);\nVideoPriorityBasedPolicyConfig.UnstableNetworkPreset = new VideoPriorityBasedPolicyConfig(0, 1);\nVideoPriorityBasedPolicyConfig.StableNetworkPreset = new VideoPriorityBasedPolicyConfig(1, 0);\n//# sourceMappingURL=VideoPriorityBasedPolicyConfig.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Attendee_1 = __importDefault(require(\"../attendee/Attendee\"));\nconst ClientMetricReportDirection_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportDirection\"));\nconst ClientMetricReportMediaType_1 = __importDefault(require(\"../clientmetricreport/ClientMetricReportMediaType\"));\nconst ContentShareConstants_1 = __importDefault(require(\"../contentsharecontroller/ContentShareConstants\"));\nconst LogLevel_1 = require(\"../logger/LogLevel\");\nconst ServerSideNetworkAdaption_1 = __importStar(require(\"../signalingclient/ServerSideNetworkAdaption\"));\nconst VideoSource_1 = __importDefault(require(\"../videosource/VideoSource\"));\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"../videostreamidset/DefaultVideoStreamIdSet\"));\nconst AllHighestVideoBandwidthPolicy_1 = __importDefault(require(\"./AllHighestVideoBandwidthPolicy\"));\nconst TargetDisplaySize_1 = __importDefault(require(\"./TargetDisplaySize\"));\nconst VideoPreference_1 = __importDefault(require(\"./VideoPreference\"));\nconst VideoPreferences_1 = require(\"./VideoPreferences\");\nconst VideoPriorityBasedPolicyConfig_1 = __importDefault(require(\"./VideoPriorityBasedPolicyConfig\"));\nconst VideoQualityAdaptationPreference_1 = __importDefault(require(\"./VideoQualityAdaptationPreference\"));\n/** @internal */\nclass LinkMediaStats {\n constructor() {\n this.bandwidthEstimateKbps = 0;\n this.usedBandwidthKbps = 0;\n this.packetsLost = 0;\n this.nackCount = 0;\n this.rttMs = 0;\n }\n}\nclass VideoPriorityBasedPolicy {\n constructor(logger, videoPriorityBasedPolicyConfig = VideoPriorityBasedPolicyConfig_1.default.Default) {\n this.logger = logger;\n this.videoPriorityBasedPolicyConfig = videoPriorityBasedPolicyConfig;\n this.shouldPauseTiles = true;\n this.observerQueue = new Set();\n this.pausedBwAttendeeIds = new Set();\n this.wantsResubscribeObserver = undefined;\n this.reset();\n }\n reset() {\n // Self-attendee is not actually necessary in 'AllHighestVideoBandwidthPolicy' since it just passes it to\n // `highestQualityStreamFromEachGroupExcludingSelf` which itself doesn't need it as self attendees are not in the\n // index\n this.allHighestPolicy = new AllHighestVideoBandwidthPolicy_1.default('');\n this.optimalReceiveSet = new DefaultVideoStreamIdSet_1.default();\n this.optimalReceiveStreams = [];\n this.optimalNonPausedReceiveStreams = [];\n this.subscribedReceiveSet = new DefaultVideoStreamIdSet_1.default();\n this.subscribedReceiveStreams = [];\n this.videoPreferences = undefined;\n this.defaultVideoPreferences = undefined;\n this.shouldPauseTiles = true;\n this.pausedStreamIds = new DefaultVideoStreamIdSet_1.default();\n this.pausedBwAttendeeIds = new Set();\n this.videoPreferencesUpdated = false;\n this.logCount = 0;\n this.startupPeriod = true;\n this.usingPrevTargetRate = false;\n this.rateProbeState = \"Not Probing\" /* NotProbing */;\n this.firstEstimateTimestamp = 0;\n this.lastUpgradeRateKbps = 0;\n this.timeBeforeAllowSubscribeMs = VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_SUBSCRIBE_MS;\n this.lastProbeTimestamp = Date.now();\n this.timeBeforeAllowProbeMs = VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_PROBE_MS;\n this.downlinkStats = new LinkMediaStats();\n this.prevDownlinkStats = new LinkMediaStats();\n this.probeFailed = false;\n this.serverSideNetworkAdaption = this.videoPriorityBasedPolicyConfig.serverSideNetworkAdaption;\n this.pendingActionAfterUpdatedPreferences = false;\n }\n bindToTileController(tileController) {\n this.tileController = tileController;\n this.logger.info('tileController bound');\n }\n setWantsResubscribeObserver(observer) {\n this.wantsResubscribeObserver = observer;\n }\n // This function allows setting preferences without the need to inherit from this class\n // which would require not using the internal keyword\n chooseRemoteVideoSources(preferences) {\n var _a;\n if ((_a = this.videoPreferences) === null || _a === void 0 ? void 0 : _a.equals(preferences)) {\n return;\n }\n this.videoPreferences = preferences === null || preferences === void 0 ? void 0 : preferences.clone();\n if (!ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.serverSideNetworkAdaption)) {\n this.pendingActionAfterUpdatedPreferences = true;\n if (this.wantsResubscribeObserver !== undefined) {\n this.wantsResubscribeObserver();\n this.pendingActionAfterUpdatedPreferences = false;\n }\n if (this.serverSideNetworkAdaption ===\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption) {\n const desiredVideoSources = new Array();\n for (const preference of this.videoPreferences) {\n const source = new VideoSource_1.default();\n source.attendee = new Attendee_1.default();\n source.attendee.attendeeId = preference.attendeeId;\n desiredVideoSources.push(source);\n }\n this.allHighestPolicy.chooseRemoteVideoSources(desiredVideoSources);\n return;\n }\n }\n this.videoPreferencesUpdated = true;\n this.logger.info(`bwe: setVideoPreferences bwe: new preferences: ${JSON.stringify(preferences)}`);\n return;\n }\n updateIndex(videoIndex) {\n this.videoIndex = videoIndex;\n if (this.serverSideNetworkAdaption ===\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption) {\n this.allHighestPolicy.updateIndex(videoIndex);\n }\n if (!this.videoPreferences) {\n this.updateDefaultVideoPreferences();\n }\n }\n updateDefaultVideoPreferences() {\n const attendeeIds = new Set();\n for (const stream of this.videoIndex.remoteStreamDescriptions()) {\n attendeeIds.add(stream.attendeeId);\n }\n const prefs = VideoPreferences_1.VideoPreferences.prepare();\n const numAttendees = attendeeIds.size;\n let targetDisplaySize = TargetDisplaySize_1.default.Maximum;\n if (numAttendees > 8) {\n targetDisplaySize = TargetDisplaySize_1.default.Low;\n }\n else if (numAttendees > 4) {\n targetDisplaySize = TargetDisplaySize_1.default.Medium;\n }\n for (const attendeeId of attendeeIds) {\n prefs.add(new VideoPreference_1.default(attendeeId, 1, targetDisplaySize));\n }\n this.defaultVideoPreferences = prefs.build();\n }\n updateMetrics(clientMetricReport) {\n if (!this.videoIndex || this.videoIndex.allStreams().empty()) {\n return;\n }\n this.prevDownlinkStats = this.downlinkStats;\n this.downlinkStats = new LinkMediaStats();\n const metricReport = clientMetricReport.getObservableMetrics();\n // availableIncomingBitrate is the standard stat but is not available in Firefox yet so only Safari for now.\n this.downlinkStats.bandwidthEstimateKbps = metricReport.availableIncomingBitrate / 1000;\n for (const ssrcStr in clientMetricReport.streamMetricReports) {\n const ssrc = Number.parseInt(ssrcStr, 10);\n const metrics = clientMetricReport.streamMetricReports[ssrc];\n if (metrics.direction === ClientMetricReportDirection_1.default.DOWNSTREAM && metrics.mediaType === ClientMetricReportMediaType_1.default.VIDEO) {\n // Only use video stream metrics\n if (metrics.currentMetrics.hasOwnProperty('nackCount')) {\n this.downlinkStats.nackCount += clientMetricReport.countPerSecond('nackCount', ssrc);\n }\n if (metrics.currentMetrics.hasOwnProperty('packetsLost')) {\n this.downlinkStats.packetsLost += clientMetricReport.countPerSecond('packetsLost', ssrc);\n }\n if (metrics.currentMetrics.hasOwnProperty('bytesReceived')) {\n this.downlinkStats.usedBandwidthKbps +=\n clientMetricReport.bitsPerSecond('bytesReceived', ssrc) / 1000;\n }\n }\n }\n }\n wantsResubscribe() {\n let wants = false;\n if (!ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.serverSideNetworkAdaption)) {\n wants || (wants = this.pendingActionAfterUpdatedPreferences);\n if (this.serverSideNetworkAdaption ===\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption) {\n return wants || this.allHighestPolicy.wantsResubscribe();\n }\n }\n this.calculateOptimalReceiveSet();\n wants || (wants = !this.subscribedReceiveSet.equal(this.optimalReceiveSet));\n return wants;\n }\n chooseSubscriptions() {\n if (!ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.serverSideNetworkAdaption)) {\n this.pendingActionAfterUpdatedPreferences = false;\n if (this.serverSideNetworkAdaption ===\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption) {\n return this.allHighestPolicy.chooseSubscriptions();\n }\n }\n if (!this.subscribedReceiveSet.equal(this.optimalReceiveSet)) {\n this.lastSubscribeTimestamp = Date.now();\n }\n this.subscribedReceiveSet = this.optimalReceiveSet.clone();\n this.subscribedReceiveStreams = this.optimalReceiveStreams.slice();\n return this.subscribedReceiveSet.clone();\n }\n addObserver(observer) {\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.observerQueue.delete(observer);\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n observerFunc(observer);\n }\n }\n setVideoPriorityBasedPolicyConfigs(config) {\n this.videoPriorityBasedPolicyConfig = config;\n }\n calculateOptimalReceiveStreams() {\n var _a;\n const chosenStreams = [];\n const remoteInfos = this.videoIndex.remoteStreamDescriptions();\n if (remoteInfos.length === 0 || ((_a = this.videoPreferences) === null || _a === void 0 ? void 0 : _a.isEmpty())) {\n this.optimalReceiveStreams = [];\n return;\n }\n const lastProbeState = this.rateProbeState;\n this.cleanBwPausedTiles(remoteInfos);\n this.handleAppPausedStreams(chosenStreams, remoteInfos);\n const attendeeIdToPreference = new Map();\n for (const preference of this.getCurrentVideoPreferences()) {\n attendeeIdToPreference.set(preference.attendeeId, preference);\n }\n // We can pre-emptively filter to just remote stream descriptions for remote video sources we already\n // have configuration for. We do not care about streams we aren't going to subscribe to.\n const remoteInfosWithPreference = remoteInfos.filter((stream) => {\n return attendeeIdToPreference.has(stream.attendeeId);\n });\n const sameStreamChoices = !this.streamsWithPreferenceDidChange(remoteInfosWithPreference);\n const noMajorChange = !this.startupPeriod && sameStreamChoices;\n // If no major changes then don't allow subscribes for the allowed amount of time\n if (noMajorChange &&\n Date.now() - this.lastSubscribeTimestamp < this.timeBeforeAllowSubscribeMs) {\n return;\n }\n // Sort streams by bitrate ascending.\n remoteInfosWithPreference.sort((a, b) => {\n if (a.maxBitrateKbps === b.maxBitrateKbps) {\n return a.streamId - b.streamId;\n }\n return a.maxBitrateKbps - b.maxBitrateKbps;\n });\n // Convert 0 avg bitrates to max, handle special cases, and remove upgrades that downgrade resolution or framerate\n for (const info of remoteInfosWithPreference) {\n if (info.avgBitrateKbps === 0 || info.avgBitrateKbps > info.maxBitrateKbps) {\n // Content can be a special case\n if (info.attendeeId.endsWith(ContentShareConstants_1.default.Modality) && info.maxBitrateKbps < 100) {\n info.maxBitrateKbps = info.avgBitrateKbps;\n }\n else {\n info.avgBitrateKbps = info.maxBitrateKbps;\n }\n }\n }\n const streamIdsToRemove = new Set();\n for (const preference of this.getCurrentVideoPreferences()) {\n const streamsForAttendees = remoteInfosWithPreference.filter((description) => {\n return description.attendeeId === preference.attendeeId;\n });\n if (streamsForAttendees.length < 3) {\n // If `streamsForAttendees.length` is 0, they are stale preference for remote video that no longer exists\n // if 1 or 2, there is nothing to filter out\n continue;\n }\n let maxFrameRate = 15;\n let maxPixels = 320 * 480;\n streamsForAttendees.forEach((stream) => {\n maxFrameRate = Math.max(maxFrameRate, stream.maxFrameRate);\n maxPixels = Math.max(maxPixels, stream.totalPixels());\n });\n streamsForAttendees.sort((a, b) => {\n if (preference.degradationPreference === VideoQualityAdaptationPreference_1.default.MaintainResolution) {\n // This may seem counter-intuitive but given we want to upgrade resolution first, and framerate\n // last, we want to sort by framerate first, and resolution only if framerate is close.\n //\n // That way, e.g. the first three streams will all contain increases in resolution. We will skip any down\n // grades in resolution (i.e. to hop to a higher framerate stream) in the section below\n if (Math.abs(a.maxFrameRate - b.maxFrameRate) < 2) {\n return a.totalPixels() - b.totalPixels();\n }\n return a.maxFrameRate - b.maxFrameRate;\n }\n else if (preference.degradationPreference === VideoQualityAdaptationPreference_1.default.MaintainFramerate) {\n // See note above, but swap resolution for framerate\n if (a.totalPixels() === b.totalPixels()) {\n return a.maxFrameRate - b.maxFrameRate;\n }\n return a.totalPixels() - b.totalPixels();\n }\n else {\n // In 'balanced' mode, we want a slight preference towards upgrading resolution first\n // when moving up the bitrate ladder, so we weigh the bitrate by a framerate\n // and resolution derived value that is tuned to be reasonable in most cases. This attempts to\n // mimic the diagrams in the guide.\n //\n // A higher constant makes the policy prefer resolution to framerate more at lower values\n const framerateExponentConstant = 5;\n // A higher constant here makes the policy prefer framerate to resolution more at higher values\n const resolutionBaseConstant = 2;\n const weighByFramerate = (stream) => {\n return (stream.avgBitrateKbps *\n Math.pow(2, ((framerateExponentConstant * stream.maxFrameRate) / maxFrameRate) *\n Math.pow(resolutionBaseConstant * 2, stream.totalPixels() / maxPixels)));\n };\n return weighByFramerate(a) - weighByFramerate(b);\n }\n });\n let lastInfo = undefined;\n // Downgrades during recovery are unusual and jarring. Here we will strip out any (these should result in paths that\n // match those in the priority downlink policy guide).\n for (const info of streamsForAttendees) {\n if (lastInfo !== undefined) {\n if ((info.maxFrameRate < lastInfo.maxFrameRate &&\n Math.abs(lastInfo.maxFrameRate - info.maxFrameRate) > 2) ||\n info.totalPixels() < lastInfo.totalPixels()) {\n streamIdsToRemove.add(info.streamId);\n continue;\n }\n }\n lastInfo = info;\n }\n }\n const filteredRemoteAttendeesWithPreference = remoteInfosWithPreference.filter((info) => {\n return !streamIdsToRemove.has(info.streamId);\n });\n this.logger.info(`Filtered to ${JSON.stringify(filteredRemoteAttendeesWithPreference)}`);\n const rates = {\n targetDownlinkBitrate: 0,\n chosenTotalBitrate: 0,\n deltaToNextUpgrade: 0,\n };\n rates.targetDownlinkBitrate = this.determineTargetRate();\n const numberOfParticipants = this.subscribedReceiveSet.size();\n const currentEstimated = this.downlinkStats.bandwidthEstimateKbps;\n // Use videoPriorityBasedPolicyConfig to add additional delays based on network conditions\n const dontAllowSubscribe = !this.videoPriorityBasedPolicyConfig.allowSubscribe(numberOfParticipants, currentEstimated);\n // `priorityPolicy` assumes that we have sorted `filteredRemoteAttendeesWithPreference` in order of quality\n if (this.probeFailed) {\n // When probe failed, we set timeBeforeAllowSubscribeMs to 3x longer\n // Since we have passed the subscribe interval now, we will try to probe again\n this.probeFailed = false;\n // For the same reason above, reset time before allow subscribe to default\n this.timeBeforeAllowSubscribeMs = VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_SUBSCRIBE_MS;\n if (noMajorChange && dontAllowSubscribe)\n return;\n }\n const upgradeStream = this.priorityPolicy(rates, filteredRemoteAttendeesWithPreference, chosenStreams);\n const skipProbe = !ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.serverSideNetworkAdaption);\n let subscriptionChoice = 0 /* NewOptimal */;\n // Look for probing or override opportunities\n if (!skipProbe && !this.startupPeriod && sameStreamChoices) {\n if (this.rateProbeState === \"Probing\" /* Probing */) {\n subscriptionChoice = this.handleProbe(chosenStreams, rates.targetDownlinkBitrate);\n }\n else if (rates.deltaToNextUpgrade !== 0) {\n subscriptionChoice = this.maybeOverrideOrProbe(chosenStreams, rates, upgradeStream);\n }\n }\n else {\n // If there was a change in streams to choose from, then cancel any probing or upgrades\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n this.lastUpgradeRateKbps = 0;\n }\n this.previousStreamsWithPreference = remoteInfosWithPreference;\n this.videoPreferencesUpdated = false;\n if (subscriptionChoice === 1 /* PreviousOptimal */) {\n this.logger.info(`bwe: keepSameSubscriptions stats:${JSON.stringify(this.downlinkStats)}`);\n this.prevTargetRateKbps = rates.targetDownlinkBitrate;\n return;\n }\n if (subscriptionChoice === 2 /* PreProbe */) {\n const subscribedRate = this.calculateSubscribeRate(this.preProbeNonPausedReceiveStreams);\n this.optimalReceiveStreams = this.preProbeReceiveStreams.slice();\n this.processBwPausedStreams(remoteInfosWithPreference, this.preProbeNonPausedReceiveStreams);\n this.logger.info('bwe: Use Pre-Probe subscription subscribedRate:' + subscribedRate);\n return;\n }\n this.optimalNonPausedReceiveStreams = chosenStreams.slice();\n const lastNumberPaused = this.pausedBwAttendeeIds.size;\n this.processBwPausedStreams(remoteInfosWithPreference, chosenStreams);\n if (this.logger.getLogLevel() <= LogLevel_1.LogLevel.INFO &&\n (this.logCount % 15 === 0 ||\n this.rateProbeState !== lastProbeState ||\n this.optimalReceiveStreams.length !== chosenStreams.length ||\n lastNumberPaused !== this.pausedBwAttendeeIds.size)) {\n this.logger.info(this.policyStateLogStr(remoteInfos, rates.targetDownlinkBitrate));\n this.logCount = 0;\n }\n this.logCount++;\n this.prevTargetRateKbps = rates.targetDownlinkBitrate;\n this.optimalReceiveStreams = chosenStreams.slice();\n }\n calculateOptimalReceiveSet() {\n const streamSelectionSet = new DefaultVideoStreamIdSet_1.default();\n this.calculateOptimalReceiveStreams();\n for (const stream of this.optimalReceiveStreams) {\n streamSelectionSet.add(stream.streamId);\n }\n if (!this.optimalReceiveSet.equal(streamSelectionSet)) {\n const subscribedRate = this.calculateSubscribeRate(this.optimalReceiveStreams);\n this.logger.info(`bwe: new streamSelection: ${JSON.stringify(streamSelectionSet)} subscribedRate:${subscribedRate}`);\n }\n this.optimalReceiveSet = streamSelectionSet;\n }\n determineTargetRate() {\n let targetBitrate = 0;\n const now = Date.now();\n // Startup phase handling. During this period the estimate can be 0 or\n // could still be slowly hunting for a steady state. This startup ramp up\n // can cause a series of subscribes which can be distracting. During this\n // time just use our configured default value\n if (this.downlinkStats.bandwidthEstimateKbps !== 0) {\n if (this.firstEstimateTimestamp === 0) {\n this.firstEstimateTimestamp = now;\n }\n // handle startup state where estimator is still converging.\n if (this.startupPeriod) {\n // Drop out of startup period if\n // - estimate is above default\n // - get packet loss and have a valid estimate\n // - startup period has expired and rate is not still increasing\n if (this.downlinkStats.bandwidthEstimateKbps >\n VideoPriorityBasedPolicy.DEFAULT_BANDWIDTH_KBPS ||\n this.downlinkStats.packetsLost > 0 ||\n (now - this.firstEstimateTimestamp > VideoPriorityBasedPolicy.STARTUP_PERIOD_MS &&\n this.downlinkStats.bandwidthEstimateKbps <=\n this.prevDownlinkStats.bandwidthEstimateKbps)) {\n this.startupPeriod = false;\n this.prevTargetRateKbps = this.downlinkStats.bandwidthEstimateKbps;\n }\n }\n // If we are in the startup period and we haven't detected any packet loss, then\n // keep it at the default to let the estimation get to a steady state\n if (this.startupPeriod) {\n targetBitrate = VideoPriorityBasedPolicy.DEFAULT_BANDWIDTH_KBPS;\n }\n else {\n // We rely on our target bitrate being above what we are receiving to mark a probe as complete,\n // however in browsers, the estimate can heavily lag behind the actual receive rate, especially when low.\n //\n // To mitigate this we override with the actual estimate plus some buffer if we aren't seeing packet loss.\n if (this.rateProbeState === \"Probing\" /* Probing */ &&\n this.downlinkStats.usedBandwidthKbps > this.downlinkStats.bandwidthEstimateKbps &&\n this.downlinkStats.packetsLost < VideoPriorityBasedPolicy.SPURIOUS_PACKET_LOST_THRESHOLD) {\n this.logger.info(`bwe: In probe state, overriding estimate ${this.downlinkStats.bandwidthEstimateKbps} with actual receive bitrate ${this.downlinkStats.usedBandwidthKbps}`);\n targetBitrate =\n this.downlinkStats.usedBandwidthKbps +\n VideoPriorityBasedPolicy.USED_BANDWIDTH_OVERRIDE_BUFFER_KBPS;\n }\n else {\n targetBitrate = this.downlinkStats.bandwidthEstimateKbps;\n }\n }\n }\n else {\n if (this.firstEstimateTimestamp === 0) {\n targetBitrate = VideoPriorityBasedPolicy.DEFAULT_BANDWIDTH_KBPS;\n }\n else {\n targetBitrate = this.prevTargetRateKbps;\n }\n }\n // Estimated downlink rate can follow actual bandwidth or fall for a short period of time\n // due to the absolute send time estimator incorrectly thinking that a delay in packets is\n // a precursor to packet loss. We have seen too many false positives on this, so we\n // will ignore largish drops in the estimate if there is no packet loss\n if (!this.startupPeriod &&\n ((this.usingPrevTargetRate &&\n this.downlinkStats.bandwidthEstimateKbps < this.prevTargetRateKbps) ||\n this.downlinkStats.bandwidthEstimateKbps <\n (this.prevTargetRateKbps *\n (100 - VideoPriorityBasedPolicy.LARGE_RATE_CHANGE_TRIGGER_PERCENT)) /\n 100 ||\n this.downlinkStats.bandwidthEstimateKbps <\n (this.downlinkStats.usedBandwidthKbps *\n VideoPriorityBasedPolicy.LARGE_RATE_CHANGE_TRIGGER_PERCENT) /\n 100) &&\n this.downlinkStats.packetsLost === 0) {\n // Set target to be the same as last\n this.logger.debug(() => {\n return 'bwe: ValidateRate: Using Previous rate ' + this.prevTargetRateKbps;\n });\n this.usingPrevTargetRate = true;\n targetBitrate = this.prevTargetRateKbps;\n }\n else {\n this.usingPrevTargetRate = false;\n }\n // Cap total receive bitrate at 15000 kbps\n if (targetBitrate > 15000) {\n this.logger.warn('bwe: ' +\n targetBitrate +\n ' exceeds maximum limit (15000). Limit TargetDisplaySize with VideoPreferences to avoid this.');\n }\n return Math.min(targetBitrate, 15000);\n }\n setProbeState(newState) {\n if (this.rateProbeState === newState) {\n return false;\n }\n const now = Date.now();\n switch (newState) {\n case \"Not Probing\" /* NotProbing */:\n this.probePendingStartTimestamp = 0;\n break;\n case \"Probe Pending\" /* ProbePending */:\n if (this.lastProbeTimestamp === 0 ||\n now - this.lastProbeTimestamp > VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_PROBE_MS) {\n this.probePendingStartTimestamp = now;\n }\n else {\n // Too soon to do a probe again\n return false;\n }\n break;\n case \"Probing\" /* Probing */:\n if (now - this.probePendingStartTimestamp > this.timeBeforeAllowProbeMs) {\n this.lastProbeTimestamp = now;\n this.preProbeReceiveStreams = this.subscribedReceiveStreams.slice();\n this.preProbeNonPausedReceiveStreams = this.optimalNonPausedReceiveStreams;\n // Increase the time allowed until the next probe\n this.timeBeforeAllowProbeMs = Math.min(this.timeBeforeAllowProbeMs * 2, VideoPriorityBasedPolicy.MAX_HOLD_BEFORE_PROBE_MS);\n }\n else {\n // Too soon to do probe\n return false;\n }\n break;\n }\n this.logger.info('bwe: setProbeState to ' + newState + ' from ' + this.rateProbeState);\n this.rateProbeState = newState;\n return true;\n }\n // Upgrade the stream id from the appropriate group or add it if it wasn't already in the list.\n // Return the added amount of bandwidth\n upgradeToStream(chosenStreams, upgradeStream) {\n for (let i = 0; i < chosenStreams.length; i++) {\n if (chosenStreams[i].groupId === upgradeStream.groupId) {\n const diffRate = upgradeStream.avgBitrateKbps - chosenStreams[i].avgBitrateKbps;\n this.logger.info('bwe: upgradeStream from ' + JSON.stringify(chosenStreams[i]) + ' to ' + upgradeStream);\n this.lastUpgradeRateKbps = diffRate;\n chosenStreams[i] = upgradeStream;\n return diffRate;\n }\n }\n // We are adding a stream and not upgrading.\n chosenStreams.push(upgradeStream);\n this.lastUpgradeRateKbps = upgradeStream.avgBitrateKbps;\n return this.lastUpgradeRateKbps;\n }\n // Do specific behavior while we are currently in probing state and metrics\n // indicate environment is still valid to do probing.\n // Return true if the caller should not change from the previous subscriptions.\n handleProbe(chosenStreams, targetDownlinkBitrate) {\n // Don't allow probe to happen indefinitely\n if (Date.now() - this.lastProbeTimestamp > VideoPriorityBasedPolicy.MAX_ALLOWED_PROBE_TIME_MS) {\n this.logger.info(`bwe: Canceling probe due to timeout`);\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n return 0 /* NewOptimal */;\n }\n if (this.downlinkStats.packetsLost > 0) {\n this.logger.info(`bwe: Probe encountering packets lost:${this.downlinkStats.packetsLost}`);\n // See comment above `VideoPriorityBasedPolicy.SPURIOUS_PACKET_LOST_THRESHOLD`\n if (this.downlinkStats.packetsLost > VideoPriorityBasedPolicy.SPURIOUS_PACKET_LOST_THRESHOLD) {\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n this.logger.info(`bwe: Canceling probe due to packets lost:${this.downlinkStats.packetsLost}`);\n this.probeFailed = true;\n this.timeBeforeAllowSubscribeMs =\n Math.max(VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_SUBSCRIBE_MS, this.timeBeforeAllowSubscribeMs) * 3;\n // packet lost indicates bad network and thus slowing down subscribing by extend delay by 3 times\n return 2 /* PreProbe */;\n }\n }\n const subscribedRate = this.calculateSubscribeRate(this.optimalReceiveStreams);\n if (this.chosenStreamsSameAsLast(chosenStreams) || targetDownlinkBitrate > subscribedRate) {\n this.logger.info(`bwe: Probe successful`);\n // If target bitrate can sustain probe rate, then probe was successful.\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n // Reset the time allowed between probes since this was successful\n this.timeBeforeAllowProbeMs = VideoPriorityBasedPolicy.MIN_TIME_BETWEEN_PROBE_MS;\n return 0 /* NewOptimal */;\n }\n return 1 /* PreviousOptimal */;\n }\n maybeOverrideOrProbe(chosenStreams, rates, upgradeStream) {\n const sameSubscriptions = this.chosenStreamsSameAsLast(chosenStreams);\n let useLastSubscriptions = 0 /* NewOptimal */;\n // We want to minimize thrashing between between low res and high res of different\n // participants due to avg bitrate fluctuations. If there hasn't been much of a change in estimated bandwidth\n // and the number of streams and their max rates are the same, then reuse the previous subscription\n const triggerPercent = rates.targetDownlinkBitrate > VideoPriorityBasedPolicy.LOW_BITRATE_THRESHOLD_KBPS\n ? VideoPriorityBasedPolicy.TARGET_RATE_CHANGE_TRIGGER_PERCENT\n : VideoPriorityBasedPolicy.TARGET_RATE_CHANGE_TRIGGER_PERCENT * 2;\n const minTargetBitrateDelta = (rates.targetDownlinkBitrate * triggerPercent) / 100;\n this.targetRateBaselineForDeltaCheckKbps =\n this.targetRateBaselineForDeltaCheckKbps !== undefined\n ? this.targetRateBaselineForDeltaCheckKbps\n : this.prevTargetRateKbps;\n if (!sameSubscriptions &&\n Math.abs(rates.targetDownlinkBitrate - this.targetRateBaselineForDeltaCheckKbps) <\n minTargetBitrateDelta) {\n this.logger.info('bwe: MaybeOverrideOrProbe: Reuse last decision based on delta rate. {' +\n JSON.stringify(this.subscribedReceiveSet) +\n `}`);\n useLastSubscriptions = 1 /* PreviousOptimal */;\n }\n else {\n this.targetRateBaselineForDeltaCheckKbps = rates.targetDownlinkBitrate;\n }\n // If there has been packet loss, then reset to no probing state\n if (this.downlinkStats.packetsLost > this.prevDownlinkStats.packetsLost) {\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n this.lastUpgradeRateKbps = 0;\n return useLastSubscriptions;\n }\n if (sameSubscriptions || useLastSubscriptions === 1 /* PreviousOptimal */) {\n // If planned subscriptions are same as last, then either move to probe pending state\n // or move to probing state if enough time has passed.\n switch (this.rateProbeState) {\n case \"Not Probing\" /* NotProbing */:\n this.setProbeState(\"Probe Pending\" /* ProbePending */);\n break;\n case \"Probe Pending\" /* ProbePending */:\n if (this.setProbeState(\"Probing\" /* Probing */)) {\n this.upgradeToStream(chosenStreams, upgradeStream);\n useLastSubscriptions = 0 /* NewOptimal */;\n }\n break;\n }\n }\n else {\n this.setProbeState(\"Not Probing\" /* NotProbing */);\n }\n return useLastSubscriptions;\n }\n // Utility function to find max rate of streams in current decision\n calculateSubscribeRate(streams) {\n let subscribeRate = 0;\n for (const stream of streams) {\n if (!this.pausedStreamIds.contain(stream.streamId) &&\n !this.pausedBwAttendeeIds.has(stream.attendeeId)) {\n subscribeRate += stream.maxBitrateKbps;\n }\n }\n return subscribeRate;\n }\n handleAppPausedStreams(chosenStreams, remoteInfos) {\n if (!this.tileController) {\n this.logger.warn('tileController not found!');\n return;\n }\n this.pausedStreamIds = new DefaultVideoStreamIdSet_1.default();\n const remoteTiles = this.tileController.getAllRemoteVideoTiles();\n for (const tile of remoteTiles) {\n const state = tile.state();\n if (state.paused && !this.pausedBwAttendeeIds.has(state.boundAttendeeId)) {\n let j = remoteInfos.length;\n while (j--) {\n if (remoteInfos[j].attendeeId === state.boundAttendeeId) {\n this.logger.info('bwe: removed paused attendee ' +\n state.boundAttendeeId +\n ' streamId: ' +\n remoteInfos[j].streamId);\n this.pausedStreamIds.add(remoteInfos[j].streamId);\n // Add the stream to the selection set to keep the tile around\n if (this.subscribedReceiveSet.contain(remoteInfos[j].streamId)) {\n chosenStreams.push(remoteInfos[j]);\n }\n remoteInfos.splice(j, 1);\n }\n }\n }\n }\n }\n processBwPausedStreams(remoteInfos, chosenStreams) {\n if (!this.tileController) {\n this.logger.warn('tileController not found!');\n return;\n }\n const preferences = this.getCurrentVideoPreferences();\n if (preferences && this.shouldPauseTiles) {\n const videoTiles = this.tileController.getAllVideoTiles();\n for (const preference of preferences) {\n const videoTile = this.getVideoTileForAttendeeId(preference.attendeeId, videoTiles);\n const paused = (videoTile === null || videoTile === void 0 ? void 0 : videoTile.state().paused) || false;\n if (!chosenStreams.some(stream => stream.attendeeId === preference.attendeeId)) {\n // We cannot rely on the existance of video tile to indicate that the source exists in the call\n // because tiles will not be added or removed until after a full renegotiation (i.e. it will\n // be behind the state provided by the index)\n const streamExists = remoteInfos.some(stream => stream.attendeeId === preference.attendeeId);\n if (videoTile && streamExists) {\n const info = this.optimalReceiveStreams.find(stream => stream.attendeeId === preference.attendeeId);\n if (info !== undefined) {\n if (!paused) {\n this.logger.info(`bwe: pausing streamId ${info.streamId} attendee ${preference.attendeeId} due to bandwidth`);\n this.forEachObserver(observer => {\n observer.tileWillBePausedByDownlinkPolicy(videoTile.id());\n });\n this.tileController.pauseVideoTile(videoTile.id());\n }\n chosenStreams.push(info);\n }\n this.pausedBwAttendeeIds.add(preference.attendeeId);\n }\n else if (streamExists) {\n // Create a tile for this participant if one doesn't already exist and mark it as paused\n // Don't include it in the chosen streams because we don't want to subscribe for it then have to pause it.\n const newTile = this.tileController.addVideoTile();\n newTile.bindVideoStream(preference.attendeeId, false, null, 0, 0, 0, null);\n this.forEachObserver(observer => {\n observer.tileWillBePausedByDownlinkPolicy(newTile.id());\n });\n newTile.pause();\n this.logger.info(`bwe: Created video tile ${newTile.id()} for bw paused attendee ${preference.attendeeId}`);\n this.pausedBwAttendeeIds.add(preference.attendeeId);\n }\n }\n else if (paused && this.pausedBwAttendeeIds.has(preference.attendeeId)) {\n this.logger.info(`bwe: unpausing attendee ${preference.attendeeId} due to bandwidth`);\n this.forEachObserver(observer => {\n observer.tileWillBeUnpausedByDownlinkPolicy(videoTile.id());\n });\n this.tileController.unpauseVideoTile(videoTile.id());\n this.pausedBwAttendeeIds.delete(preference.attendeeId);\n }\n }\n }\n }\n cleanBwPausedTiles(remoteInfos) {\n if (!this.tileController) {\n this.logger.warn('tileController not found!');\n return;\n }\n const tiles = this.tileController.getAllRemoteVideoTiles();\n const preferences = this.getCurrentVideoPreferences();\n for (const tile of tiles) {\n const state = tile.state();\n if (!state.boundVideoStream) {\n if (!remoteInfos.some(stream => stream.attendeeId === state.boundAttendeeId)) {\n this.tileController.removeVideoTile(state.tileId);\n this.logger.info(`bwe: Removed video tile ${state.tileId} for bw paused attendee ${state.boundAttendeeId}`);\n }\n else if (preferences !== undefined &&\n !preferences.some(pref => pref.attendeeId === state.boundAttendeeId)) {\n this.tileController.removeVideoTile(state.tileId);\n }\n }\n }\n }\n // `remoteInfos` is assumed to be provided in order of increasing quality\n priorityPolicy(rates, remoteInfos, chosenStreams) {\n let upgradeStream;\n const videoPreferences = this.getCurrentVideoPreferences();\n const highestPriority = videoPreferences.highestPriority();\n let nextPriority;\n let priority = highestPriority;\n while (priority !== -1) {\n nextPriority = -1;\n for (const preference of videoPreferences) {\n if (preference.priority === priority) {\n // First subscribe to at least low rate\n for (const info of remoteInfos) {\n if (info.attendeeId === preference.attendeeId) {\n if (!chosenStreams.some(stream => stream.groupId === info.groupId)) {\n if (rates.chosenTotalBitrate + info.avgBitrateKbps <= rates.targetDownlinkBitrate) {\n chosenStreams.push(info);\n rates.chosenTotalBitrate += info.avgBitrateKbps;\n }\n else if (rates.deltaToNextUpgrade === 0) {\n // Keep track of step to next upgrade\n rates.deltaToNextUpgrade = info.avgBitrateKbps;\n upgradeStream = info;\n }\n }\n }\n }\n }\n else {\n if (preference.priority > priority) {\n nextPriority = preference.priority;\n break;\n }\n }\n }\n // Now try to upgrade all attendee's with this priority\n for (const preference of videoPreferences) {\n if (preference.priority === priority) {\n for (const info of remoteInfos) {\n if (info.attendeeId === preference.attendeeId) {\n const index = chosenStreams.findIndex(stream => stream.groupId === info.groupId &&\n stream.maxBitrateKbps <= info.maxBitrateKbps &&\n stream.avgBitrateKbps < info.avgBitrateKbps);\n if (index !== -1) {\n const increaseKbps = info.avgBitrateKbps - chosenStreams[index].avgBitrateKbps;\n if (this.hasSimulcastStreams(remoteInfos, info.attendeeId, info.groupId) &&\n this.canUpgrade(info.avgBitrateKbps, preference.targetSize, preference.targetSizeToBitrateKbps(preference.targetSize), info.attendeeId.endsWith(ContentShareConstants_1.default.Modality))) {\n this.logger.info(`bwe: attendee: ${info.attendeeId} group: ${info.groupId} has simulcast and can upgrade avgBitrate: ${info.avgBitrateKbps} target: ${preference.targetSizeToBitrateKbps(preference.targetSize)} targetTotalBitrate: ${rates.targetDownlinkBitrate}`);\n if (rates.chosenTotalBitrate + increaseKbps <= rates.targetDownlinkBitrate) {\n rates.chosenTotalBitrate += increaseKbps;\n chosenStreams[index] = info;\n }\n else if (rates.deltaToNextUpgrade === 0) {\n // Keep track of step to next upgrade\n rates.deltaToNextUpgrade = increaseKbps;\n upgradeStream = info;\n }\n }\n else {\n this.logger.info('bwe: cannot upgrade stream quality beyond target size');\n }\n }\n }\n }\n }\n else {\n if (preference.priority > priority) {\n break;\n }\n }\n }\n // If we haven't subscribed to the highest rate of the top priority videos then\n // do not subscribe to any other sources\n if (priority === highestPriority && rates.deltaToNextUpgrade !== 0) {\n break;\n }\n priority = nextPriority;\n }\n return upgradeStream;\n }\n getVideoTileForAttendeeId(attendeeId, videoTiles) {\n for (const tile of videoTiles) {\n const state = tile.state();\n if (state.boundAttendeeId === attendeeId) {\n return tile;\n }\n }\n return null;\n }\n canUpgrade(bitrateKbps, targetResolution, targetBitrateKbps, isContent) {\n let canUpgrade = false;\n // For both video and content, we want to interpret `TargetDisplaySize.High` as a request for the best quality\n // video, and should ignore the value of the target bitrate.\n if (targetResolution === TargetDisplaySize_1.default.High) {\n // For both video and content, we want to interpret `TargetDisplaySize.High` as a request for the best quality\n // video, and should ignore the value of the target bitrate.\n canUpgrade = true;\n }\n else if (!isContent && bitrateKbps <= targetBitrateKbps) {\n // For content share, even if the higher quality stream has a high max bitrate of 1200 kbps for example\n // the avg bitrate can be way lower so have to make sure that we do not update to a higher bitrate than the\n // target value (i.e. if `targetResolution === TargetDisplaySize.Low`).\n //\n // This does not apply to video as video uplink bandwidth could change the max bitrate value without resubscribing\n // so the max bitrate value might not be up-to-date on the downlink side. Also in the case of video, the avg\n // bitrate is close to the actual max bitrate.\n canUpgrade = true;\n }\n else if (isContent &&\n targetResolution === TargetDisplaySize_1.default.Medium &&\n bitrateKbps <= targetBitrateKbps) {\n // If the target resolution is medium then fall back to use avg bitrate as video.\n canUpgrade = true;\n }\n if (canUpgrade) {\n this.logger.info(`bwe: canUpgrade: bitrateKbps: ${bitrateKbps} targetBitrateKbps: ${targetBitrateKbps}`);\n return true;\n }\n this.logger.info(`bwe: cannot Upgrade: bitrateKbps: ${bitrateKbps} targetBitrateKbps: ${targetBitrateKbps}`);\n return false;\n }\n hasSimulcastStreams(remoteInfos, attendeeId, groupId) {\n let streamCount = 0;\n for (const info of remoteInfos) {\n if (info.attendeeId === attendeeId && info.groupId === groupId) {\n streamCount++;\n }\n }\n this.logger.info(`bwe: attendeeId: ${attendeeId} groupId: ${groupId} hasSimulcastStreams: streamCount: ${streamCount}`);\n return streamCount > 1;\n }\n streamsWithPreferenceDidChange(remoteInfos) {\n if (this.previousStreamsWithPreference === undefined ||\n remoteInfos.length !== this.previousStreamsWithPreference.length ||\n this.videoPreferencesUpdated === true) {\n return true;\n }\n for (const info of remoteInfos) {\n const infoMatch = this.previousStreamsWithPreference.find(prevInfo => prevInfo.groupId === info.groupId &&\n prevInfo.streamId === info.streamId &&\n prevInfo.maxBitrateKbps === info.maxBitrateKbps);\n if (infoMatch === undefined) {\n return true;\n }\n }\n return false;\n }\n chosenStreamsSameAsLast(chosenStreams) {\n if (this.optimalNonPausedReceiveStreams.length !== chosenStreams.length) {\n return false;\n }\n for (const lastStream of this.optimalNonPausedReceiveStreams) {\n if (!chosenStreams.some(stream => stream.streamId === lastStream.streamId)) {\n return false;\n }\n }\n return true;\n }\n policyStateLogStr(remoteInfos, targetDownlinkBitrate) {\n const subscribedRate = this.calculateSubscribeRate(this.optimalReceiveStreams);\n const optimalReceiveSet = {\n targetBitrate: targetDownlinkBitrate,\n subscribedRate: subscribedRate,\n probeState: this.rateProbeState,\n startupPeriod: this.startupPeriod,\n };\n // Reduced remote info logging:\n let remoteInfoStr = `remoteInfos: [`;\n for (const info of remoteInfos) {\n remoteInfoStr += `{grpId:${info.groupId} strId:${info.streamId} maxBr:${info.maxBitrateKbps} avgBr:${info.avgBitrateKbps}}, `;\n }\n remoteInfoStr += `]`;\n let logString = `bwe: optimalReceiveSet ${JSON.stringify(optimalReceiveSet)}\\n` +\n `bwe: prev ${JSON.stringify(this.prevDownlinkStats)}\\n` +\n `bwe: now ${JSON.stringify(this.downlinkStats)}\\n` +\n `bwe: ${remoteInfoStr}\\n`;\n if (this.pausedStreamIds.size() > 0 || this.pausedBwAttendeeIds.size > 0) {\n logString += `bwe: paused: app stream ids ${JSON.stringify(this.pausedStreamIds)} bw attendees { ${Array.from(this.pausedBwAttendeeIds).join(' ')} }\\n`;\n }\n if (this.videoPreferences) {\n logString += `bwe: preferences: ${JSON.stringify(this.videoPreferences)}`;\n }\n else {\n logString += `bwe: default preferences: ${JSON.stringify(this.defaultVideoPreferences)}`;\n }\n return logString;\n }\n getCurrentVideoPreferences() {\n return this.videoPreferences || this.defaultVideoPreferences;\n }\n getServerSideNetworkAdaption() {\n return this.serverSideNetworkAdaption;\n }\n setServerSideNetworkAdaption(adaption) {\n this.serverSideNetworkAdaption = adaption;\n this.setProbeState(\"Not Probing\" /* NotProbing */); // In case we were probing\n }\n supportedServerSideNetworkAdaptions() {\n return [\n ServerSideNetworkAdaption_1.default.None,\n ServerSideNetworkAdaption_1.default.BandwidthProbing,\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption,\n ];\n }\n getVideoPreferences() {\n let preferences = this.getCurrentVideoPreferences();\n if (!preferences) {\n const dummyPreferences = VideoPreferences_1.VideoPreferences.prepare();\n // Can't be undefined, occasionally the audio video controller\n // will call this function before the first index is received\n preferences = dummyPreferences.build();\n }\n return preferences;\n }\n wantsAllTemporalLayersInIndex() {\n return true;\n }\n}\nexports.default = VideoPriorityBasedPolicy;\nVideoPriorityBasedPolicy.DEFAULT_BANDWIDTH_KBPS = 2800;\nVideoPriorityBasedPolicy.STARTUP_PERIOD_MS = 6000;\nVideoPriorityBasedPolicy.LARGE_RATE_CHANGE_TRIGGER_PERCENT = 20;\nVideoPriorityBasedPolicy.TARGET_RATE_CHANGE_TRIGGER_PERCENT = 15;\nVideoPriorityBasedPolicy.LOW_BITRATE_THRESHOLD_KBPS = 300;\nVideoPriorityBasedPolicy.MIN_TIME_BETWEEN_PROBE_MS = 5000;\nVideoPriorityBasedPolicy.MIN_TIME_BETWEEN_SUBSCRIBE_MS = 2000;\n// We apply exponentional backoff to probe attempts if they do not\n// succeed, so we need to set a reasonable maximum.\nVideoPriorityBasedPolicy.MAX_HOLD_BEFORE_PROBE_MS = 30000;\nVideoPriorityBasedPolicy.MAX_ALLOWED_PROBE_TIME_MS = 60000;\n// Occasionally we see that on unpause or upgrade we see a single packet lost\n// or two, even in completely unconstrained scenarios. We should look into\n// why this occurs on the backend, but for now we require a non-trivial\n// amount of packets lost to fail the probe. These could also be from\n// other senders given we don't yet use TWCC.\nVideoPriorityBasedPolicy.SPURIOUS_PACKET_LOST_THRESHOLD = 2;\n// See usage\nVideoPriorityBasedPolicy.USED_BANDWIDTH_OVERRIDE_BUFFER_KBPS = 100;\n//# sourceMappingURL=VideoPriorityBasedPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ContentShareConstants_1 = __importDefault(require(\"../contentsharecontroller/ContentShareConstants\"));\nconst VideoPreference_1 = __importDefault(require(\"./VideoPreference\"));\nconst VideoPreferences_1 = require(\"./VideoPreferences\");\nconst VideoPriorityBasedPolicy_1 = __importDefault(require(\"./VideoPriorityBasedPolicy\"));\nclass VideoAdaptiveProbePolicy extends VideoPriorityBasedPolicy_1.default {\n constructor(logger) {\n super(logger);\n this.logger = logger;\n super.shouldPauseTiles = false;\n this.videoPreferences = undefined;\n }\n reset() {\n super.reset();\n super.shouldPauseTiles = false;\n this.videoPreferences = undefined;\n }\n updateIndex(videoIndex) {\n super.updateIndex(videoIndex);\n const newPreferences = VideoPreferences_1.VideoPreferences.prepare();\n let containsContent = false;\n const remoteInfos = videoIndex.remoteStreamDescriptions();\n // If there is active content then set that as high priority, and the rest at lower\n for (const info of remoteInfos) {\n // I don't know why we need to do this duplicate check.\n if (!newPreferences.some(preference => preference.attendeeId === info.attendeeId)) {\n // For now always subscribe to content even if higher bandwidth then target\n if (info.attendeeId.endsWith(ContentShareConstants_1.default.Modality)) {\n newPreferences.add(new VideoPreference_1.default(info.attendeeId, 1));\n containsContent = true;\n }\n else {\n newPreferences.add(new VideoPreference_1.default(info.attendeeId, 2));\n }\n }\n }\n if (containsContent) {\n this.videoPreferences = newPreferences.build();\n this.videoPreferencesUpdated = true;\n }\n else {\n this.videoPreferences = undefined;\n }\n }\n /**\n * [[VideoAdaptiveProbePolicy]] does not allow setting video preferences and this function\n * will be a no-op. Please use [[VideoPriorityBasedPolicy]] directly if you would like to set\n * preferences.\n */\n chooseRemoteVideoSources(_preferences) {\n this.logger.error('chooseRemoteVideoSources should not be called by VideoAdaptiveProbePolicy');\n return;\n }\n}\nexports.default = VideoAdaptiveProbePolicy;\n//# sourceMappingURL=VideoAdaptiveProbePolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nclass VideoStreamDescription {\n constructor(attendeeId, groupId, streamId, maxBitrateKbps, avgBitrateKbps) {\n this.attendeeId = '';\n this.groupId = 0;\n this.streamId = 0;\n this.ssrc = 0;\n this.trackLabel = '';\n this.maxBitrateKbps = 0;\n // average bitrate is updated every 2 seconds via bitrates messages\n this.avgBitrateKbps = 0;\n this.maxFrameRate = 0;\n this.width = 0;\n this.height = 0;\n this.timeEnabled = 0;\n // Unused, should be removed in a future release\n this.disabledByWebRTC = false;\n this.disabledByUplinkPolicy = false;\n this.rid = '';\n this.attendeeId = attendeeId;\n this.groupId = groupId;\n this.streamId = streamId;\n this.maxBitrateKbps = maxBitrateKbps;\n this.avgBitrateKbps = avgBitrateKbps;\n }\n clone() {\n const newInfo = new VideoStreamDescription();\n newInfo.attendeeId = this.attendeeId;\n newInfo.groupId = this.groupId;\n newInfo.streamId = this.streamId;\n newInfo.ssrc = this.ssrc;\n newInfo.trackLabel = this.trackLabel;\n newInfo.maxBitrateKbps = this.maxBitrateKbps;\n newInfo.avgBitrateKbps = this.avgBitrateKbps;\n newInfo.maxFrameRate = this.maxFrameRate;\n newInfo.timeEnabled = this.timeEnabled;\n newInfo.disabledByUplinkPolicy = this.disabledByUplinkPolicy;\n newInfo.width = this.width;\n newInfo.height = this.height;\n return newInfo;\n }\n toStreamDescriptor() {\n const descriptor = SignalingProtocol_js_1.SdkStreamDescriptor.create();\n descriptor.mediaType = SignalingProtocol_js_1.SdkStreamMediaType.VIDEO;\n descriptor.trackLabel = this.trackLabel;\n descriptor.attendeeId = this.attendeeId;\n descriptor.streamId = this.streamId;\n descriptor.groupId = this.groupId;\n descriptor.framerate = this.maxFrameRate;\n descriptor.maxBitrateKbps = this.disabledByUplinkPolicy ? 0 : this.maxBitrateKbps;\n descriptor.avgBitrateBps = this.avgBitrateKbps;\n return descriptor;\n }\n totalPixels() {\n return this.width * this.height;\n }\n}\nexports.default = VideoStreamDescription;\n//# sourceMappingURL=VideoStreamDescription.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"../videostreamidset/DefaultVideoStreamIdSet\"));\nconst VideoStreamDescription_1 = __importDefault(require(\"./VideoStreamDescription\"));\n/**\n * [[DefaultVideoStreamIndex]] implements [[VideoStreamIndex]] to facilitate video stream subscription\n * and includes query functions for stream id and attendee id.\n */\nclass DefaultVideoStreamIndex {\n constructor(logger) {\n this.logger = logger;\n this.currentIndex = null;\n this.indexForSubscribe = null;\n this.currentSubscribeAck = null;\n // These are based on the index at the time of the last Subscribe Ack\n this.subscribeTrackToStreamMap = null;\n this.subscribeStreamToAttendeeMap = null;\n this.subscribeStreamToExternalUserIdMap = null;\n this.subscribeSsrcToStreamMap = null;\n this.subscribeSsrcToGroupMap = null;\n // These are based on the most up to date index\n this.streamToAttendeeMap = null;\n this.groupIdToAttendeeMap = null;\n this.streamToExternalUserIdMap = null;\n this.videoStreamDescription = new VideoStreamDescription_1.default();\n this.sendVideoStreamId = 0;\n this.videoStreamDescription.trackLabel = 'AmazonChimeExpressVideo';\n this.videoStreamDescription.streamId = 2;\n this.videoStreamDescription.groupId = 2;\n }\n localStreamDescriptions() {\n // localStreamDescriptions are used to construct IndexFrame\n // old behavior for single video is to have streamId and groupId trackLabel fixed as the follows\n return [this.videoStreamDescription.clone()];\n }\n convertBpsToKbps(avgBitrateBps) {\n if (avgBitrateBps > 0 && avgBitrateBps < 1000) {\n return 1;\n }\n else {\n return Math.trunc(avgBitrateBps / 1000);\n }\n }\n remoteStreamDescriptions() {\n if (!this.currentIndex || !this.currentIndex.sources) {\n return [];\n }\n const streamInfos = [];\n this.currentIndex.sources.forEach(source => {\n const description = new VideoStreamDescription_1.default();\n description.attendeeId = source.attendeeId;\n description.groupId = source.groupId;\n description.streamId = source.streamId;\n description.maxBitrateKbps = source.maxBitrateKbps;\n description.avgBitrateKbps = this.convertBpsToKbps(source.avgBitrateBps);\n description.width = source.width;\n description.height = source.height;\n description.maxFrameRate = source.framerate;\n streamInfos.push(description);\n });\n return streamInfos;\n }\n integrateUplinkPolicyDecision(param) {\n if (!!param && param.length) {\n const encodingParam = param[0];\n this.videoStreamDescription.maxBitrateKbps = encodingParam.maxBitrate / 1000;\n this.videoStreamDescription.maxFrameRate = encodingParam.maxFramerate;\n }\n }\n integrateIndexFrame(indexFrame) {\n this.currentIndex = indexFrame;\n if (!indexFrame) {\n return;\n }\n // In the Amazon Chime SDKs, we assume a one to one mapping of group ID to profile ID when creating\n // video tiles (multiple video sources are supported through applying a `Modality` to a given profile/session token)\n //\n // We enforce this here to mitigate any possible duplicate group IDs left from a reconnection where the previous\n // signal channel hasn't been timed out yet. To guarantee we receive the latest stream we use the highest group ID\n // since they are monotonically increasing.\n const attendeeIdToMainGroupIdMap = new Map();\n // Improve performance by not filtering sources unless\n // we know the list will actually change\n let attendeeWithMultipleGroupIdsExists = false;\n for (const source of indexFrame.sources) {\n if (!attendeeIdToMainGroupIdMap.has(source.attendeeId)) {\n // We haven't see this attendee ID so just keep track of it\n attendeeIdToMainGroupIdMap.set(source.attendeeId, source.groupId);\n continue;\n }\n // Otherwise see if we should use the group ID corresponding to this source (we prefer the highest for each attendee)\n const currentGroupId = attendeeIdToMainGroupIdMap.get(source.attendeeId);\n if (currentGroupId < source.groupId) {\n this.logger.warn(`Old group ID ${currentGroupId} found for attendee ID ${source.attendeeId}, replacing with newer group ID ${source.groupId}`);\n attendeeIdToMainGroupIdMap.set(source.attendeeId, source.groupId);\n }\n attendeeWithMultipleGroupIdsExists = true;\n }\n if (attendeeWithMultipleGroupIdsExists) {\n // Only use the sources corresponding to the main group IDs for the given attendee ID\n this.currentIndex.sources = this.currentIndex.sources.filter(source => attendeeIdToMainGroupIdMap.get(source.attendeeId) === source.groupId);\n }\n // Null out cached maps, these will be recreated on demand\n this.streamToAttendeeMap = null;\n this.groupIdToAttendeeMap = null;\n this.streamToExternalUserIdMap = null;\n }\n subscribeFrameSent() {\n // This is called just as a Subscribe is being sent. Save corresponding Index\n this.indexForSubscribe = this.currentIndex;\n }\n integrateSubscribeAckFrame(subscribeAck) {\n this.currentSubscribeAck = subscribeAck;\n // These are valid until the next Subscribe Ack even if the index is updated\n this.subscribeTrackToStreamMap = this.buildTrackToStreamMap(this.currentSubscribeAck);\n this.subscribeSsrcToStreamMap = this.buildSSRCToStreamMap(this.currentSubscribeAck);\n this.subscribeSsrcToGroupMap = this.buildSSRCToGroupMap(this.currentSubscribeAck);\n this.subscribeStreamToAttendeeMap = this.buildStreamToAttendeeMap(this.indexForSubscribe);\n this.subscribeStreamToExternalUserIdMap = this.buildStreamExternalUserIdMap(this.indexForSubscribe);\n this.sendVideoStreamId = 0;\n if (subscribeAck.allocations &&\n subscribeAck.allocations !== undefined &&\n subscribeAck.allocations.length > 0) {\n this.sendVideoStreamId = subscribeAck.allocations[0].streamId;\n }\n }\n integrateBitratesFrame(bitrates) {\n if (this.currentIndex) {\n for (const bitrate of bitrates.bitrates) {\n const source = this.currentIndex.sources.find(source => source.streamId === bitrate.sourceStreamId);\n if (source !== undefined) {\n source.avgBitrateBps = bitrate.avgBitrateBps;\n }\n }\n }\n }\n allStreams() {\n const set = new DefaultVideoStreamIdSet_1.default();\n if (this.currentIndex) {\n for (const source of this.currentIndex.sources) {\n set.add(source.streamId);\n }\n }\n return set;\n }\n allVideoSendingSourcesExcludingSelf(selfAttendeeId) {\n const videoSources = [];\n const attendeeSet = new Set();\n if (this.currentIndex) {\n if (this.currentIndex.sources && this.currentIndex.sources.length) {\n for (const stream of this.currentIndex.sources) {\n const { attendeeId, externalUserId, mediaType } = stream;\n if (attendeeId !== selfAttendeeId && mediaType === SignalingProtocol_js_1.SdkStreamMediaType.VIDEO) {\n if (!attendeeSet.has(attendeeId)) {\n videoSources.push({ attendee: { attendeeId, externalUserId } });\n attendeeSet.add(attendeeId);\n }\n }\n }\n }\n }\n return videoSources;\n }\n streamSelectionUnderBandwidthConstraint(selfAttendeeId, largeTileAttendeeIds, smallTileAttendeeIds, bandwidthKbps) {\n const newAttendees = new Set();\n if (this.currentIndex) {\n for (const stream of this.currentIndex.sources) {\n if (stream.attendeeId === selfAttendeeId || stream.mediaType !== SignalingProtocol_js_1.SdkStreamMediaType.VIDEO) {\n continue;\n }\n if (!largeTileAttendeeIds.has(stream.attendeeId) &&\n !smallTileAttendeeIds.has(stream.attendeeId)) {\n newAttendees.add(stream.attendeeId);\n }\n }\n }\n const attendeeToStreamDescriptorMap = this.buildAttendeeToSortedStreamDescriptorMapExcludingSelf(selfAttendeeId);\n const selectionMap = new Map();\n let usage = 0;\n attendeeToStreamDescriptorMap.forEach((streams, attendeeId) => {\n selectionMap.set(attendeeId, streams[0]);\n usage += streams[0].maxBitrateKbps;\n });\n usage = this.trySelectHighBitrateForAttendees(attendeeToStreamDescriptorMap, largeTileAttendeeIds, usage, bandwidthKbps, selectionMap);\n this.trySelectHighBitrateForAttendees(attendeeToStreamDescriptorMap, newAttendees, usage, bandwidthKbps, selectionMap);\n const streamSelectionSet = new DefaultVideoStreamIdSet_1.default();\n for (const source of selectionMap.values()) {\n streamSelectionSet.add(source.streamId);\n }\n return streamSelectionSet;\n }\n highestQualityStreamFromEachGroupExcludingSelf(selfAttendeeId) {\n const set = new DefaultVideoStreamIdSet_1.default();\n if (this.currentIndex) {\n const maxes = new Map();\n for (const source of this.currentIndex.sources) {\n if (source.attendeeId === selfAttendeeId || source.mediaType !== SignalingProtocol_js_1.SdkStreamMediaType.VIDEO) {\n continue;\n }\n if (!maxes.has(source.groupId) ||\n source.maxBitrateKbps > maxes.get(source.groupId).maxBitrateKbps) {\n maxes.set(source.groupId, source);\n }\n }\n for (const source of maxes.values()) {\n set.add(source.streamId);\n }\n }\n return set;\n }\n numberOfVideoPublishingParticipantsExcludingSelf(selfAttendeeId) {\n return this.highestQualityStreamFromEachGroupExcludingSelf(selfAttendeeId).array().length;\n }\n numberOfParticipants() {\n if (!!this.currentIndex.numParticipants) {\n return this.currentIndex.numParticipants;\n }\n return -1;\n }\n attendeeIdForTrack(trackId) {\n const streamId = this.streamIdForTrack(trackId);\n if (streamId === undefined || !this.subscribeStreamToAttendeeMap) {\n this.logger.warn(`no attendee found for track ${trackId}`);\n return '';\n }\n const attendeeId = this.subscribeStreamToAttendeeMap.get(streamId);\n if (!attendeeId) {\n this.logger.info(`track ${trackId} (stream ${streamId}) does not correspond to a known attendee`);\n return '';\n }\n return attendeeId;\n }\n externalUserIdForTrack(trackId) {\n const streamId = this.streamIdForTrack(trackId);\n if (streamId === undefined || !this.subscribeStreamToExternalUserIdMap) {\n this.logger.warn(`no external user id found for track ${trackId}`);\n return '';\n }\n const externalUserId = this.subscribeStreamToExternalUserIdMap.get(streamId);\n if (!externalUserId) {\n this.logger.info(`track ${trackId} (stream ${streamId}) does not correspond to a known externalUserId`);\n return '';\n }\n return externalUserId;\n }\n attendeeIdForStreamId(streamId) {\n if (!this.streamToAttendeeMap) {\n if (this.currentIndex) {\n this.streamToAttendeeMap = this.buildStreamToAttendeeMap(this.currentIndex);\n }\n else {\n return '';\n }\n }\n const attendeeId = this.streamToAttendeeMap.get(streamId);\n if (!attendeeId) {\n this.logger.info(`stream ID ${streamId} does not correspond to a known attendee`);\n return '';\n }\n return attendeeId;\n }\n attendeeIdForGroupId(groupId) {\n if (!this.groupIdToAttendeeMap) {\n if (this.currentIndex) {\n this.groupIdToAttendeeMap = this.buildGroupIdToAttendeeMap(this.currentIndex);\n }\n else {\n return '';\n }\n }\n const attendeeId = this.groupIdToAttendeeMap.get(groupId);\n if (!attendeeId) {\n this.logger.info(`group ID ${groupId} does not correspond to a known attendee`);\n return '';\n }\n return attendeeId;\n }\n groupIdForStreamId(streamId) {\n if (!this.currentIndex || !this.currentIndex.sources) {\n return undefined;\n }\n for (const source of this.currentIndex.sources) {\n if (source.streamId === streamId) {\n return source.groupId;\n }\n }\n // If wasn't found in current index, then it could be in index used in last subscribe\n if (!!this.indexForSubscribe) {\n for (const source of this.indexForSubscribe.sources) {\n if (source.streamId === streamId) {\n return source.groupId;\n }\n }\n }\n return undefined;\n }\n StreamIdsInSameGroup(streamId1, streamId2) {\n if (this.groupIdForStreamId(streamId1) === this.groupIdForStreamId(streamId2)) {\n return true;\n }\n return false;\n }\n streamIdForTrack(trackId) {\n if (!this.subscribeTrackToStreamMap) {\n return undefined;\n }\n return this.subscribeTrackToStreamMap.get(trackId);\n }\n streamIdForSSRC(ssrcId) {\n if (!this.subscribeSsrcToStreamMap) {\n return undefined;\n }\n return this.subscribeSsrcToStreamMap.get(ssrcId);\n }\n overrideStreamIdMappings(previous, current) {\n if (this.subscribeTrackToStreamMap) {\n for (const [track, streamId] of this.subscribeTrackToStreamMap.entries()) {\n if (previous === streamId) {\n this.subscribeTrackToStreamMap.set(track, current);\n break;\n }\n }\n }\n if (this.subscribeSsrcToStreamMap) {\n for (const [ssrc, streamId] of this.subscribeSsrcToStreamMap.entries()) {\n if (previous === streamId) {\n this.subscribeSsrcToStreamMap.set(ssrc, current);\n break;\n }\n }\n }\n }\n groupIdForSSRC(ssrcId) {\n if (!this.subscribeSsrcToGroupMap) {\n return undefined;\n }\n return this.subscribeSsrcToGroupMap.get(ssrcId);\n }\n streamsPausedAtSource() {\n const paused = new DefaultVideoStreamIdSet_1.default();\n if (this.currentIndex) {\n for (const streamId of this.currentIndex.pausedAtSourceIds) {\n paused.add(streamId);\n }\n }\n return paused;\n }\n sendVideoStreamIdFromRid(_rid) {\n return this.sendVideoStreamId;\n }\n buildTrackToStreamMap(subscribeAck) {\n const map = new Map();\n this.logger.debug(() => `trackMap ${JSON.stringify(subscribeAck.tracks)}`);\n for (const trackMapping of subscribeAck.tracks) {\n if (trackMapping.trackLabel.length > 0 && trackMapping.streamId > 0) {\n map.set(trackMapping.trackLabel, trackMapping.streamId);\n }\n }\n return map;\n }\n buildSSRCToStreamMap(subscribeAck) {\n const map = new Map();\n this.logger.debug(() => `ssrcMap ${JSON.stringify(subscribeAck.tracks)}`);\n for (const trackMapping of subscribeAck.tracks) {\n if (trackMapping.trackLabel.length > 0 && trackMapping.streamId > 0) {\n map.set(trackMapping.ssrc, trackMapping.streamId);\n }\n }\n return map;\n }\n buildSSRCToGroupMap(subscribeAck) {\n const map = new Map();\n for (const trackMapping of subscribeAck.tracks) {\n if (trackMapping.trackLabel.length > 0 && trackMapping.streamId > 0) {\n map.set(trackMapping.ssrc, this.groupIdForStreamId(trackMapping.streamId));\n }\n }\n return map;\n }\n buildStreamToAttendeeMap(indexFrame) {\n const map = new Map();\n if (indexFrame) {\n for (const source of indexFrame.sources) {\n map.set(source.streamId, source.attendeeId);\n }\n }\n return map;\n }\n buildGroupIdToAttendeeMap(indexFrame) {\n const map = new Map();\n for (const source of indexFrame.sources) {\n map.set(source.groupId, source.attendeeId);\n }\n return map;\n }\n buildStreamExternalUserIdMap(indexFrame) {\n const map = new Map();\n if (indexFrame) {\n for (const source of indexFrame.sources) {\n if (!!source.externalUserId) {\n map.set(source.streamId, source.externalUserId);\n }\n }\n }\n return map;\n }\n trySelectHighBitrateForAttendees(attendeeToStreamDescriptorMap, highAttendees, currentUsage, bandwidthKbps, currentSelectionRef) {\n for (const attendeeId of highAttendees) {\n if (currentUsage >= bandwidthKbps) {\n break;\n }\n if (attendeeToStreamDescriptorMap.has(attendeeId)) {\n const streams = attendeeToStreamDescriptorMap.get(attendeeId);\n for (const l of streams.reverse()) {\n if (currentUsage - currentSelectionRef.get(attendeeId).maxBitrateKbps + l.maxBitrateKbps <\n bandwidthKbps) {\n currentUsage =\n currentUsage - currentSelectionRef.get(attendeeId).maxBitrateKbps + l.maxBitrateKbps;\n currentSelectionRef.set(attendeeId, l);\n break;\n }\n }\n }\n }\n return currentUsage;\n }\n buildAttendeeToSortedStreamDescriptorMapExcludingSelf(selfAttendeeId) {\n const attendeeToStreamDescriptorMap = new Map();\n if (this.currentIndex) {\n for (const source of this.currentIndex.sources) {\n if (source.attendeeId === selfAttendeeId || source.mediaType !== SignalingProtocol_js_1.SdkStreamMediaType.VIDEO) {\n continue;\n }\n if (attendeeToStreamDescriptorMap.has(source.attendeeId)) {\n attendeeToStreamDescriptorMap.get(source.attendeeId).push(source);\n }\n else {\n attendeeToStreamDescriptorMap.set(source.attendeeId, [source]);\n }\n }\n }\n attendeeToStreamDescriptorMap.forEach((streams, _attendeeId) => {\n streams.sort((stream1, stream2) => {\n if (stream1.maxBitrateKbps > stream2.maxBitrateKbps) {\n return 1;\n }\n else if (stream1.maxBitrateKbps < stream2.maxBitrateKbps) {\n return -1;\n }\n else {\n return 0;\n }\n });\n });\n return attendeeToStreamDescriptorMap;\n }\n}\nexports.default = DefaultVideoStreamIndex;\n//# sourceMappingURL=DefaultVideoStreamIndex.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst DefaultVideoStreamIndex_1 = __importDefault(require(\"./DefaultVideoStreamIndex\"));\nconst VideoStreamDescription_1 = __importDefault(require(\"./VideoStreamDescription\"));\n/**\n * [[SimulcastTransceiverController]] implements [[VideoStreamIndex]] to facilitate video stream\n * subscription and includes query functions for stream id and attendee id.\n */\nclass SimulcastVideoStreamIndex extends DefaultVideoStreamIndex_1.default {\n constructor() {\n super(...arguments);\n this.streamIdToBitrateKbpsMap = new Map();\n this._localStreamInfos = [];\n // Map send rid to stream Id\n this._sendRidToVideoStreamIdMap = new Map();\n }\n localStreamDescriptions() {\n const clonedDescriptions = [];\n this._localStreamInfos.forEach(desc => {\n clonedDescriptions.push(desc.clone());\n });\n return clonedDescriptions;\n }\n integrateUplinkPolicyDecision(encodingParams) {\n // Reuse local streams (that might already have stream IDs allocated) until\n // there are no more and then add as many new local streams as needed\n let hasStreamsToReuse = true;\n let localStreamIndex = 0;\n for (let i = 0; i < encodingParams.length; i++) {\n const targetMaxBitrateKbps = encodingParams[i].maxBitrate / 1000;\n const targetMaxFrameRate = encodingParams[i].maxFramerate;\n if (!hasStreamsToReuse || i === this._localStreamInfos.length) {\n hasStreamsToReuse = false;\n const newInfo = new VideoStreamDescription_1.default();\n newInfo.maxBitrateKbps = targetMaxBitrateKbps;\n newInfo.maxFrameRate = targetMaxFrameRate;\n newInfo.disabledByUplinkPolicy = targetMaxBitrateKbps === 0 ? true : false;\n newInfo.rid = encodingParams[i].rid;\n if (targetMaxBitrateKbps !== 0) {\n newInfo.timeEnabled = Date.now();\n }\n this._localStreamInfos.push(newInfo);\n localStreamIndex++;\n continue;\n }\n if (this._localStreamInfos[localStreamIndex].maxBitrateKbps === 0 &&\n targetMaxBitrateKbps > 0) {\n this._localStreamInfos[localStreamIndex].timeEnabled = Date.now();\n }\n this._localStreamInfos[localStreamIndex].maxBitrateKbps = targetMaxBitrateKbps;\n this._localStreamInfos[localStreamIndex].maxFrameRate = targetMaxFrameRate;\n this._localStreamInfos[localStreamIndex].disabledByUplinkPolicy =\n targetMaxBitrateKbps === 0 ? true : false;\n localStreamIndex++;\n }\n if (hasStreamsToReuse) {\n // splice is zero-based, remove stream starting from localStreamIndex\n this._localStreamInfos.splice(localStreamIndex);\n }\n }\n integrateBitratesFrame(bitrateFrame) {\n super.integrateBitratesFrame(bitrateFrame);\n const stillSending = new Set();\n const existingSet = new Set(this.streamIdToBitrateKbpsMap.keys());\n for (const bitrateMsg of bitrateFrame.bitrates) {\n stillSending.add(bitrateMsg.sourceStreamId);\n this.streamIdToBitrateKbpsMap.set(bitrateMsg.sourceStreamId, this.convertBpsToKbps(bitrateMsg.avgBitrateBps));\n }\n for (const id of existingSet) {\n if (!stillSending.has(id)) {\n const avgBitrateBps = this.streamIdToBitrateKbpsMap.get(id);\n if (avgBitrateBps === SimulcastVideoStreamIndex.UNSEEN_STREAM_BITRATE) {\n this.streamIdToBitrateKbpsMap.set(id, SimulcastVideoStreamIndex.RECENTLY_INACTIVE_STREAM_BITRATE);\n }\n else {\n this.streamIdToBitrateKbpsMap.set(id, SimulcastVideoStreamIndex.NOT_SENDING_STREAM_BITRATE);\n }\n }\n }\n this.logLocalStreamDescriptions();\n }\n logLocalStreamDescriptions() {\n let msg = '';\n for (const desc of this._localStreamInfos) {\n msg += `streamId=${desc.streamId} maxBitrate=${desc.maxBitrateKbps} disabledByUplink=${desc.disabledByUplinkPolicy}\\n`;\n }\n this.logger.debug(() => {\n return msg;\n });\n }\n integrateIndexFrame(indexFrame) {\n super.integrateIndexFrame(indexFrame);\n const newIndexStreamIdSet = new Set();\n const existingSet = new Set(this.streamIdToBitrateKbpsMap.keys());\n for (const stream of this.currentIndex.sources) {\n if (stream.mediaType !== SignalingProtocol_js_1.SdkStreamMediaType.VIDEO) {\n continue;\n }\n newIndexStreamIdSet.add(stream.streamId);\n if (!this.streamIdToBitrateKbpsMap.has(stream.streamId)) {\n this.streamIdToBitrateKbpsMap.set(stream.streamId, SimulcastVideoStreamIndex.UNSEEN_STREAM_BITRATE);\n }\n }\n for (const id of existingSet) {\n if (!newIndexStreamIdSet.has(id)) {\n this.streamIdToBitrateKbpsMap.delete(id);\n }\n }\n }\n integrateSubscribeAckFrame(subscribeAck) {\n super.integrateSubscribeAckFrame(subscribeAck);\n if (!subscribeAck.allocations || subscribeAck.allocations === undefined) {\n return;\n }\n let localStreamStartIndex = 0;\n this._sendRidToVideoStreamIdMap.clear();\n for (const allocation of subscribeAck.allocations) {\n // track label is what we offered to the server\n if (this._localStreamInfos.length < localStreamStartIndex + 1) {\n this.logger.info('simulcast: allocation has more than number of local streams');\n break;\n }\n this._localStreamInfos[localStreamStartIndex].groupId = allocation.groupId;\n this._localStreamInfos[localStreamStartIndex].streamId = allocation.streamId;\n if (!this.streamIdToBitrateKbpsMap.has(allocation.streamId)) {\n this.streamIdToBitrateKbpsMap.set(allocation.streamId, SimulcastVideoStreamIndex.UNSEEN_STREAM_BITRATE);\n }\n this._sendRidToVideoStreamIdMap.set(this._localStreamInfos[localStreamStartIndex].rid, allocation.streamId);\n localStreamStartIndex++;\n }\n }\n sendVideoStreamIdFromRid(rid) {\n let res = 0;\n if (this._sendRidToVideoStreamIdMap.has(rid)) {\n res = this._sendRidToVideoStreamIdMap.get(rid);\n }\n return res;\n }\n}\nexports.default = SimulcastVideoStreamIndex;\n// First time when the bitrate of a stream id is missing from bitrate message, mark it as UNSEEN\nSimulcastVideoStreamIndex.UNSEEN_STREAM_BITRATE = -2;\n// Second time when the bitrate is missing, mark it as recently inactive\nSimulcastVideoStreamIndex.RECENTLY_INACTIVE_STREAM_BITRATE = -1;\n// Third time when bitrate is missing, mark it as not sending\nSimulcastVideoStreamIndex.NOT_SENDING_STREAM_BITRATE = 0;\nSimulcastVideoStreamIndex.BitratesMsgFrequencyMs = 4000;\n//# sourceMappingURL=SimulcastVideoStreamIndex.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DefaultDevicePixelRatioMonitor {\n constructor(devicePixelRatioSource, logger) {\n this.devicePixelRatioSource = devicePixelRatioSource;\n this.observerQueue = new Set();\n this.mediaQueryListener = () => {\n this.observerQueue.forEach(tileObserver => {\n tileObserver.devicePixelRatioChanged(this.devicePixelRatioSource.devicePixelRatio());\n });\n };\n if (typeof window === 'undefined') {\n return;\n }\n const mediaQueryList = matchMedia(`(resolution: ${this.devicePixelRatioSource.devicePixelRatio()}dppx)`);\n if (typeof mediaQueryList.addEventListener === 'function') {\n mediaQueryList.addEventListener('change', this.mediaQueryListener);\n this.mediaQueryList = mediaQueryList;\n }\n else if (typeof mediaQueryList.addListener === 'function') {\n mediaQueryList.addListener(this.mediaQueryListener);\n this.mediaQueryList = mediaQueryList;\n }\n else {\n logger.warn('ignoring DefaultDevicePixelRatioMonitor');\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.mediaQueryList) {\n if (typeof this.mediaQueryList.addEventListener === 'function') {\n this.mediaQueryList.removeEventListener('change', this.mediaQueryListener);\n }\n else {\n this.mediaQueryList.removeListener(this.mediaQueryListener);\n }\n }\n delete this.mediaQueryListener;\n this.observerQueue.clear();\n });\n }\n registerObserver(observer) {\n this.observerQueue.add(observer);\n observer.devicePixelRatioChanged(this.devicePixelRatioSource.devicePixelRatio());\n }\n removeObserver(observer) {\n this.observerQueue.delete(observer);\n }\n}\nexports.default = DefaultDevicePixelRatioMonitor;\n//# sourceMappingURL=DefaultDevicePixelRatioMonitor.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DevicePixelRatioWindowSource {\n devicePixelRatio() {\n if (typeof window === 'undefined' || !window || !window.devicePixelRatio) {\n return 1;\n }\n return window.devicePixelRatio;\n }\n}\nexports.default = DevicePixelRatioWindowSource;\n//# sourceMappingURL=DevicePixelRatioWindowSource.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst VideoQualitySettings_1 = __importDefault(require(\"../devicecontroller/VideoQualitySettings\"));\nconst DefaultDevicePixelRatioMonitor_1 = __importDefault(require(\"../devicepixelratiomonitor/DefaultDevicePixelRatioMonitor\"));\nconst DevicePixelRatioWindowSource_1 = __importDefault(require(\"../devicepixelratiosource/DevicePixelRatioWindowSource\"));\nconst Types_1 = require(\"../utils/Types\");\nconst DefaultVideoTile_1 = __importDefault(require(\"../videotile/DefaultVideoTile\"));\nclass DefaultVideoTileController {\n constructor(tileFactory, audioVideoController, logger) {\n this.tileFactory = tileFactory;\n this.audioVideoController = audioVideoController;\n this.logger = logger;\n this.tileMap = new Map();\n this.nextTileId = 1;\n this.currentLocalTile = null;\n this.currentPausedTilesByIds = new Set();\n this.keepLastFrameWhenPaused = false;\n this.keepLastFrameWhenPaused = audioVideoController.configuration.keepLastFrameWhenPaused;\n }\n createDevicePixelRatioMonitorIfNeeded() {\n if (this.devicePixelRatioMonitor) {\n return;\n }\n this.devicePixelRatioMonitor = new DefaultDevicePixelRatioMonitor_1.default(new DevicePixelRatioWindowSource_1.default(), this.logger);\n }\n discardDevicePixelRatioMonitorIfNotNeeded() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.tileMap.size || !this.devicePixelRatioMonitor) {\n return;\n }\n const monitor = this.devicePixelRatioMonitor;\n this.devicePixelRatioMonitor = undefined;\n return monitor.destroy();\n });\n }\n bindVideoElement(tileId, videoElement) {\n const tile = this.getVideoTile(tileId);\n if (tile === null) {\n this.logger.warn(`Ignoring video element binding for unknown tile id ${tileId}`);\n return;\n }\n tile.bindVideoElement(videoElement);\n }\n unbindVideoElement(tileId, cleanUpVideoElement = true) {\n const tile = this.getVideoTile(tileId);\n if (tile === null) {\n this.logger.warn(`Ignoring video element unbinding for unknown tile id ${tileId}`);\n return;\n }\n this.logger.info('Unbinding the video element');\n const videoElement = tile.stateRef().boundVideoElement;\n tile.bindVideoElement(null);\n if (cleanUpVideoElement) {\n this.logger.info('Cleaning up the video element');\n DefaultVideoTile_1.default.disconnectVideoStreamFromVideoElement(videoElement, false);\n }\n }\n startLocalVideoTile() {\n if (this.audioVideoController.configuration.meetingFeatures.videoMaxResolution ===\n VideoQualitySettings_1.default.VideoDisabled) {\n this.logger.warn('Could not start camera video because max video resolution was set to None');\n return -1;\n }\n const tile = this.findOrCreateLocalVideoTile();\n this.currentLocalTile.stateRef().localTileStarted = true;\n this.audioVideoController.update({ needsRenegotiation: true });\n return tile.id();\n }\n stopLocalVideoTile() {\n if (!this.currentLocalTile) {\n return;\n }\n this.currentLocalTile.stateRef().localTileStarted = false;\n this.currentLocalTile.bindVideoStream(this.audioVideoController.configuration.credentials.attendeeId, true, null, null, null, null, this.audioVideoController.configuration.credentials.externalUserId);\n this.audioVideoController.update({ needsRenegotiation: true });\n }\n hasStartedLocalVideoTile() {\n return !!(this.currentLocalTile && this.currentLocalTile.stateRef().localTileStarted);\n }\n removeLocalVideoTile() {\n if (this.currentLocalTile) {\n this.removeVideoTile(this.currentLocalTile.id());\n }\n }\n getLocalVideoTile() {\n return this.currentLocalTile;\n }\n pauseVideoTile(tileId) {\n const tile = this.getVideoTile(tileId);\n if (tile) {\n if (!this.currentPausedTilesByIds.has(tileId)) {\n this.audioVideoController.pauseReceivingStream(tile.stateRef().streamId);\n this.currentPausedTilesByIds.add(tileId);\n }\n tile.pause();\n }\n }\n unpauseVideoTile(tileId) {\n const tile = this.getVideoTile(tileId);\n if (tile) {\n if (this.currentPausedTilesByIds.has(tileId)) {\n this.audioVideoController.resumeReceivingStream(tile.stateRef().streamId);\n this.currentPausedTilesByIds.delete(tileId);\n }\n tile.unpause();\n }\n }\n getVideoTile(tileId) {\n return this.tileMap.has(tileId) ? this.tileMap.get(tileId) : null;\n }\n getVideoTileArea(tile) {\n const state = tile.state();\n let tileHeight = 0;\n let tileWidth = 0;\n if (state.boundVideoElement) {\n tileHeight = state.boundVideoElement.clientHeight * state.devicePixelRatio;\n tileWidth = state.boundVideoElement.clientWidth * state.devicePixelRatio;\n }\n return tileHeight * tileWidth;\n }\n getAllRemoteVideoTiles() {\n const result = new Array();\n this.tileMap.forEach((tile, tileId) => {\n if (!this.currentLocalTile || tileId !== this.currentLocalTile.id()) {\n result.push(tile);\n }\n });\n return result;\n }\n getAllVideoTiles() {\n return Array.from(this.tileMap.values());\n }\n addVideoTile(localTile = false) {\n const tileId = this.nextTileId;\n this.nextTileId += 1;\n this.createDevicePixelRatioMonitorIfNeeded();\n const tile = this.tileFactory.makeTile(tileId, localTile, this, this.devicePixelRatioMonitor);\n this.tileMap.set(tileId, tile);\n return tile;\n }\n removeVideoTile(tileId) {\n if (!this.tileMap.has(tileId)) {\n return;\n }\n const tile = this.tileMap.get(tileId);\n if (this.currentLocalTile === tile) {\n this.currentLocalTile = null;\n }\n tile.destroy();\n this.tileMap.delete(tileId);\n this.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.videoTileWasRemoved).map(f => f.bind(observer)(tileId));\n });\n this.discardDevicePixelRatioMonitorIfNotNeeded();\n }\n removeVideoTilesByAttendeeId(attendeeId) {\n const tilesRemoved = [];\n for (const tile of this.getAllVideoTiles()) {\n const state = tile.state();\n if (state.boundAttendeeId === attendeeId) {\n this.removeVideoTile(state.tileId);\n tilesRemoved.push(state.tileId);\n }\n }\n return tilesRemoved;\n }\n removeAllVideoTiles() {\n const tileIds = Array.from(this.tileMap.keys());\n for (const tileId of tileIds) {\n this.removeVideoTile(tileId);\n }\n }\n sendTileStateUpdate(tileState) {\n this.audioVideoController.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.videoTileDidUpdate).map(f => f.bind(observer)(tileState));\n });\n }\n haveVideoTilesWithStreams() {\n for (const tile of this.getAllVideoTiles()) {\n if (tile.state().boundVideoStream) {\n return true;\n }\n }\n return false;\n }\n haveVideoTileForAttendeeId(attendeeId) {\n return !!this.getVideoTileForAttendeeId(attendeeId);\n }\n getVideoTileForAttendeeId(attendeeId) {\n for (const tile of this.getAllVideoTiles()) {\n const state = tile.state();\n if (state.boundAttendeeId === attendeeId) {\n return tile;\n }\n }\n return undefined;\n }\n captureVideoTile(tileId) {\n const tile = this.getVideoTile(tileId);\n if (!tile) {\n return null;\n }\n return tile.capture();\n }\n findOrCreateLocalVideoTile() {\n if (this.currentLocalTile) {\n return this.currentLocalTile;\n }\n this.currentLocalTile = this.addVideoTile(true);\n this.currentLocalTile.bindVideoStream(this.audioVideoController.configuration.credentials.attendeeId, true, null, null, null, null, this.audioVideoController.configuration.credentials.externalUserId);\n return this.currentLocalTile;\n }\n}\nexports.default = DefaultVideoTileController;\n//# sourceMappingURL=DefaultVideoTileController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultVideoTile_1 = __importDefault(require(\"../videotile/DefaultVideoTile\"));\nclass DefaultVideoTileFactory {\n makeTile(tileId, localTile, tileController, devicePixelRatioMonitor) {\n return new DefaultVideoTile_1.default(tileId, localTile, tileController, devicePixelRatioMonitor);\n }\n}\nexports.default = DefaultVideoTileFactory;\n//# sourceMappingURL=DefaultVideoTileFactory.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SimulcastLayers = void 0;\n/**\n * [[SimulcastLayers]] represents simulcast layers for selected simulcast video streams.\n */\nvar SimulcastLayers;\n(function (SimulcastLayers) {\n /**\n * Low resolution video stream.\n */\n SimulcastLayers[SimulcastLayers[\"Low\"] = 0] = \"Low\";\n /**\n * Low and medium resolution video streams.\n */\n SimulcastLayers[SimulcastLayers[\"LowAndMedium\"] = 1] = \"LowAndMedium\";\n /**\n * Low and high resolution video streams.\n */\n SimulcastLayers[SimulcastLayers[\"LowAndHigh\"] = 2] = \"LowAndHigh\";\n /**\n * Medium resolution video stream.\n */\n SimulcastLayers[SimulcastLayers[\"Medium\"] = 3] = \"Medium\";\n /**\n * Medium and high resolution video streams.\n */\n SimulcastLayers[SimulcastLayers[\"MediumAndHigh\"] = 4] = \"MediumAndHigh\";\n /**\n * High resolution video stream.\n */\n SimulcastLayers[SimulcastLayers[\"High\"] = 5] = \"High\";\n})(SimulcastLayers = exports.SimulcastLayers || (exports.SimulcastLayers = {}));\nexports.default = SimulcastLayers;\n//# sourceMappingURL=SimulcastLayers.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SimulcastLayers_1 = __importDefault(require(\"../simulcastlayers/SimulcastLayers\"));\nconst SimulcastTransceiverController_1 = __importDefault(require(\"../transceivercontroller/SimulcastTransceiverController\"));\nconst Types_1 = require(\"../utils/Types\");\nconst DefaultVideoCaptureAndEncodeParameter_1 = __importDefault(require(\"../videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter\"));\nconst BitrateParameters_1 = __importDefault(require(\"./BitrateParameters\"));\n/**\n * [[DefaultSimulcastUplinkPolicy]] determines capture and encode\n * parameters that reacts to estimated uplink bandwidth\n */\nclass DefaultSimulcastUplinkPolicy {\n constructor(selfAttendeeId, logger) {\n this.selfAttendeeId = selfAttendeeId;\n this.logger = logger;\n this.numSenders = 0;\n // Simulcast is disabled when there are only 2 or fewer attendees, because in that case the backend will forward REMBs from\n // receiver to sender. Therefore there is no need for simulcast based adaption.\n this.shouldDisableSimulcast = false;\n this.newQualityMap = new Map();\n this.currentQualityMap = new Map();\n this.newActiveStreams = 1 /* kHiAndLow */;\n this.videoIndex = null;\n this.observerQueue = new Set();\n this.hiTargetBitrateKbps = DefaultSimulcastUplinkPolicy.kHiTargetBitrateKbpsHd;\n this.midTargetBitrateKbps = DefaultSimulcastUplinkPolicy.kMidTargetBitrateKbpsHd;\n this.lowTargetBitrateKbps = DefaultSimulcastUplinkPolicy.kLowTargetBitrateKbpsHd;\n this.enableFhdVideo = false;\n this.optimalParameters = new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, true);\n this.parametersInEffect = new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, true);\n this.currentQualityMap = this.fillEncodingParamWithBitrates([\n this.lowTargetBitrateKbps,\n 0,\n this.hiTargetBitrateKbps,\n ]);\n this.newQualityMap = this.fillEncodingParamWithBitrates([\n this.lowTargetBitrateKbps,\n 0,\n this.hiTargetBitrateKbps,\n ]);\n }\n updateConnectionMetric(_metrics) { }\n calculateEncodingParameters() {\n // bitrates parameter min is not used for now\n const newBitrates = [\n new BitrateParameters_1.default(),\n new BitrateParameters_1.default(),\n new BitrateParameters_1.default(),\n ];\n if (this.shouldDisableSimulcast) {\n // See comment above `shouldDisableSimulcast` for usage.\n //\n // The value of `newActiveStreams` is somewhat irrelevant since in one to one calls\n // we forward REMBs, so this single stream will adapt anywhere from < 100 kbps to 1200 kbps\n // based on both sender and receiver network conditions. E.g. A receiver may calculate it's\n // receive BWE as 300 kbps, send that in a REMB which is forwarded, and on receipt the sender\n // will set its own BWE at 300 kbps, and start sending that as well (again, only for one-to-one\n // calls). Additionally the value `kHi` is only relevant to the send side (via\n // `encodingSimulcastLayersDidChange`) as it is not transmitted in anyform to the receiver.\n //\n // We use middle layer here to work around a bug in Chromium where\n // it seems when a transceiver is created when BWE is low (e.g. on a reconnection),\n // it will never reset the encoder even when `setParameters` is called. WebRTC bug\n // #12788 seems to call a similar issue out as fixed for VP8, it's not clear if this\n // is the same issue for H.264. Additionally we are not able to force a keyframe\n // request from the backend since it will only be sending padding (which also\n // don't have MID due to #10822). Since we don't scale when simulcast is disabled\n // this doesn't have any end-user effect.\n //\n // Note that this still relies on a little bit (5-6 packets) of padding on reconnect\n // and that technically the browser will still eventually try to send all 3 streams.\n //\n // Also note that due to some uninvestigated logic in bitrate allocation, Chromium\n // will skip the bottom layer if we try setting it to 1200 kbps instead so it will\n // still take a while to recover (as it needs to send padding until it reaches around\n // 1000 kbps).\n this.newActiveStreams = 0 /* kHi */;\n newBitrates[0].maxBitrateKbps = 0;\n newBitrates[1].maxBitrateKbps = this.hiTargetBitrateKbps;\n newBitrates[2].maxBitrateKbps = 0;\n }\n else if (this.numSenders <= 4) {\n // E.g., 320x192+ (640x384) + 1280x768\n this.newActiveStreams = 1 /* kHiAndLow */;\n newBitrates[0].maxBitrateKbps = this.lowTargetBitrateKbps;\n newBitrates[1].maxBitrateKbps = 0;\n newBitrates[2].maxBitrateKbps = this.hiTargetBitrateKbps;\n }\n else {\n // E.g., 320x192 + 640x384 + (1280x768)\n this.newActiveStreams = 2 /* kMidAndLow */;\n // Given the high number of senders, we reduce the low bitrate marginally to\n // make it easier to obtain videos from all remote senders\n newBitrates[0].maxBitrateKbps = (this.lowTargetBitrateKbps * 2) / 3;\n newBitrates[1].maxBitrateKbps =\n this.numSenders <= 6 ? this.midTargetBitrateKbps : this.midTargetBitrateKbps * 0.6;\n newBitrates[2].maxBitrateKbps = 0;\n }\n const bitrates = newBitrates.map((v, _i, _a) => {\n return v.maxBitrateKbps;\n });\n this.newQualityMap = this.fillEncodingParamWithBitrates(bitrates);\n if (!this.encodingParametersEqual()) {\n this.logger.info(`simulcast: policy:calculateEncodingParameters numSources:${this.numSenders} shouldDisableSimulcast:${this.shouldDisableSimulcast} newQualityMap: ${this.getQualityMapString(this.newQualityMap)}`);\n }\n return this.newQualityMap;\n }\n chooseMediaTrackConstraints() {\n return undefined;\n }\n chooseEncodingParameters() {\n this.currentQualityMap = this.newQualityMap;\n if (this.activeStreamsToPublish !== this.newActiveStreams) {\n this.activeStreamsToPublish = this.newActiveStreams;\n this.publishEncodingSimulcastLayer();\n }\n return this.currentQualityMap;\n }\n updateIndex(videoIndex) {\n // the +1 for self is assuming that we intend to send video, since\n // the context here is VideoUplinkBandwidthPolicy\n const numSenders = videoIndex.numberOfVideoPublishingParticipantsExcludingSelf(this.selfAttendeeId) + 1;\n const numSendersChanged = numSenders !== this.numSenders;\n // See comment above `shouldDisableSimulcast`\n const numParticipants = videoIndex.numberOfParticipants();\n const newShouldDisableSimulcast = numParticipants >= 0 && numParticipants <= 2;\n const shouldDisableSimulcastChanged = this.shouldDisableSimulcast !== newShouldDisableSimulcast;\n this.numSenders = numSenders;\n this.shouldDisableSimulcast = newShouldDisableSimulcast;\n this.optimalParameters = new DefaultVideoCaptureAndEncodeParameter_1.default(this.captureWidth(), this.captureHeight(), this.captureFrameRate(), this.maxBandwidthKbps(), false);\n this.videoIndex = videoIndex;\n if (numSendersChanged || shouldDisableSimulcastChanged) {\n this.newQualityMap = this.calculateEncodingParameters();\n }\n }\n wantsResubscribe() {\n return !this.encodingParametersEqual();\n }\n compareEncodingParameter(encoding1, encoding2) {\n return JSON.stringify(encoding1) === JSON.stringify(encoding2);\n }\n encodingParametersEqual() {\n let different = false;\n for (const ridName of SimulcastTransceiverController_1.default.NAME_ARR_ASCENDING) {\n different =\n different ||\n !this.compareEncodingParameter(this.newQualityMap.get(ridName), this.currentQualityMap.get(ridName));\n if (different) {\n break;\n }\n }\n return !different;\n }\n chooseCaptureAndEncodeParameters() {\n // should deprecate in this policy\n this.parametersInEffect = this.optimalParameters.clone();\n return this.parametersInEffect.clone();\n }\n captureWidth() {\n // should deprecate in this policy\n const width = this.enableFhdVideo ? 1920 : 1280;\n return width;\n }\n captureHeight() {\n // should deprecate in this policy\n const height = this.enableFhdVideo ? 1080 : 768;\n return height;\n }\n captureFrameRate() {\n // should deprecate in this policy\n return 15;\n }\n maxBandwidthKbps() {\n // should deprecate in this policy\n return this.enableFhdVideo ? 2500 : 1400;\n }\n setIdealMaxBandwidthKbps(_idealMaxBandwidthKbps) { }\n setHasBandwidthPriority(_hasBandwidthPriority) { }\n setHighResolutionFeatureEnabled(enabled) {\n this.enableFhdVideo = enabled;\n // Raise the bitrates if we are sending FHD\n this.hiTargetBitrateKbps = enabled\n ? DefaultSimulcastUplinkPolicy.kHiTargetBitrateKbpsFhd\n : DefaultSimulcastUplinkPolicy.kHiTargetBitrateKbpsHd;\n this.midTargetBitrateKbps = enabled\n ? DefaultSimulcastUplinkPolicy.kMidTargetBitrateKbpsFhd\n : DefaultSimulcastUplinkPolicy.kMidTargetBitrateKbpsHd;\n this.lowTargetBitrateKbps = enabled\n ? DefaultSimulcastUplinkPolicy.kLowTargetBitrateKbpsFhd\n : DefaultSimulcastUplinkPolicy.kLowTargetBitrateKbpsHd;\n }\n wantsVideoDependencyDescriptorRtpHeaderExtension() {\n return true;\n }\n fillEncodingParamWithBitrates(bitratesKbps) {\n const newMap = new Map();\n const toBps = 1000;\n const nameArr = SimulcastTransceiverController_1.default.NAME_ARR_ASCENDING;\n const bitrateArr = bitratesKbps;\n // Don't scale the single simulcast stream regardless of its layer.\n let scale = this.shouldDisableSimulcast ? 1 : 4;\n for (let i = 0; i < nameArr.length; i++) {\n const ridName = nameArr[i];\n newMap.set(ridName, {\n rid: ridName,\n active: bitrateArr[i] > 0,\n scaleResolutionDownBy: Math.max(scale, 1),\n maxBitrate: bitrateArr[i] * toBps,\n });\n scale = scale / 2;\n }\n return newMap;\n }\n getQualityMapString(params) {\n let qualityString = '';\n const localDescriptions = this.videoIndex.localStreamDescriptions();\n if (localDescriptions.length === 3) {\n params.forEach((value) => {\n qualityString += `{ rid: ${value.rid} active:${value.active} maxBitrate:${value.maxBitrate}}`;\n });\n }\n return qualityString;\n }\n getEncodingSimulcastLayer(activeStreams) {\n switch (activeStreams) {\n case 0 /* kHi */:\n return SimulcastLayers_1.default.High;\n case 1 /* kHiAndLow */:\n return SimulcastLayers_1.default.LowAndHigh;\n case 2 /* kMidAndLow */:\n return SimulcastLayers_1.default.LowAndMedium;\n }\n }\n publishEncodingSimulcastLayer() {\n const simulcastLayers = this.getEncodingSimulcastLayer(this.activeStreamsToPublish);\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.encodingSimulcastLayersDidChange).map(f => f.bind(observer)(simulcastLayers));\n });\n }\n addObserver(observer) {\n this.logger.info('adding simulcast uplink observer');\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.logger.info('removing simulcast uplink observer');\n this.observerQueue.delete(observer);\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n observerFunc(observer);\n }\n }\n}\nexports.default = DefaultSimulcastUplinkPolicy;\nDefaultSimulcastUplinkPolicy.kHiTargetBitrateKbpsHd = 1200;\nDefaultSimulcastUplinkPolicy.kMidTargetBitrateKbpsHd = 600;\nDefaultSimulcastUplinkPolicy.kLowTargetBitrateKbpsHd = 300;\nDefaultSimulcastUplinkPolicy.kHiTargetBitrateKbpsFhd = 2000;\nDefaultSimulcastUplinkPolicy.kMidTargetBitrateKbpsFhd = 1000;\nDefaultSimulcastUplinkPolicy.kLowTargetBitrateKbpsFhd = 500;\n//# sourceMappingURL=DefaultSimulcastUplinkPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultVideoCaptureAndEncodeParameter_1 = __importDefault(require(\"../videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter\"));\n/** NScaleVideoUplinkBandwidthPolicy implements capture and encode\n * parameters that are nearly equivalent to those chosen by the\n * traditional native clients, except for a modification to\n * maxBandwidthKbps and scaleResolutionDownBy described below. */\nclass NScaleVideoUplinkBandwidthPolicy {\n constructor(selfAttendeeId, scaleResolution = true, logger = undefined, browserBehavior = undefined) {\n this.selfAttendeeId = selfAttendeeId;\n this.scaleResolution = scaleResolution;\n this.logger = logger;\n this.browserBehavior = browserBehavior;\n this.numberOfPublishedVideoSources = undefined;\n this.idealMaxBandwidthKbps = 1500;\n this.hasBandwidthPriority = false;\n this.encodingParamMap = new Map();\n this.enableHighResolutionFeature = false;\n this.enableSVC = false;\n this.isUsingSVCCodec = true;\n this.numParticipants = 0;\n this.reset();\n }\n reset() {\n // Don't reset `idealMaxBandwidthKbps` or `hasBandwidthPriority` which are set via builder API paths\n this.numberOfPublishedVideoSources = undefined;\n this.optimalParameters = new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, false);\n this.parametersInEffect = new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, false);\n this.encodingParamMap.set(NScaleVideoUplinkBandwidthPolicy.encodingMapKey, {\n maxBitrate: 0,\n });\n }\n updateConnectionMetric(_metrics) {\n return;\n }\n chooseMediaTrackConstraints() {\n return {};\n }\n chooseEncodingParameters() {\n return new Map();\n }\n updateIndex(videoIndex) {\n var _a;\n let hasLocalVideo = true;\n if (this.transceiverController) {\n hasLocalVideo = this.transceiverController.hasVideoInput();\n }\n // the +1 for self is assuming that we intend to send video, since\n // the context here is VideoUplinkBandwidthPolicy\n const numberOfPublishedVideoSources = videoIndex.numberOfVideoPublishingParticipantsExcludingSelf(this.selfAttendeeId) +\n (hasLocalVideo ? 1 : 0);\n const numParticipants = videoIndex.numberOfParticipants();\n if (this.numParticipants === numParticipants &&\n this.numberOfPublishedVideoSources === numberOfPublishedVideoSources) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('Skipping update index; Number of participants has not changed');\n return;\n }\n this.numberOfPublishedVideoSources = numberOfPublishedVideoSources;\n this.numParticipants = numParticipants;\n this.updateOptimalParameters();\n }\n wantsResubscribe() {\n return !this.parametersInEffect.equal(this.optimalParameters);\n }\n chooseCaptureAndEncodeParameters() {\n this.parametersInEffect = this.optimalParameters.clone();\n return this.parametersInEffect.clone();\n }\n updateOptimalParameters() {\n let scale = 1;\n if (this.transceiverController) {\n const settings = this.getStreamCaptureSetting();\n if (settings) {\n const encodingParams = this.calculateEncodingParameters(settings);\n scale = encodingParams.scaleResolutionDownBy;\n }\n }\n this.optimalParameters = new DefaultVideoCaptureAndEncodeParameter_1.default(this.captureWidth(), this.captureHeight(), this.captureFrameRate(), this.maxBandwidthKbps(), false, scale, this.enableSVC && this.numParticipants > 2 && this.isUsingSVCCodec);\n }\n captureWidth() {\n let width = 640;\n if (this.getNumberOfPublishedVideoSources() > 4) {\n width = 320;\n }\n return width;\n }\n captureHeight() {\n let height = 384;\n if (this.getNumberOfPublishedVideoSources() > 4) {\n height = 192;\n }\n return height;\n }\n captureFrameRate() {\n return 15;\n }\n maxBandwidthKbps() {\n if (this.hasBandwidthPriority) {\n return Math.trunc(this.idealMaxBandwidthKbps);\n }\n let rate = 0;\n if (this.getNumberOfPublishedVideoSources() <= 2) {\n rate = this.idealMaxBandwidthKbps;\n }\n else if (this.getNumberOfPublishedVideoSources() <= 4) {\n rate = (this.idealMaxBandwidthKbps * 2) / 3;\n }\n else {\n rate =\n ((544 / 11 + 14880 / (11 * this.getNumberOfPublishedVideoSources())) / 600) *\n this.idealMaxBandwidthKbps;\n }\n return Math.trunc(rate);\n }\n setIdealMaxBandwidthKbps(idealMaxBandwidthKbps) {\n this.idealMaxBandwidthKbps = idealMaxBandwidthKbps;\n }\n setHasBandwidthPriority(hasBandwidthPriority) {\n this.hasBandwidthPriority = hasBandwidthPriority;\n }\n setTransceiverController(transceiverController) {\n this.transceiverController = transceiverController;\n }\n setSVCEnabled(enable) {\n var _a;\n this.enableSVC = enable;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.info(`setSVCEnabled, enable: ${enable}}`);\n }\n setHighResolutionFeatureEnabled(enabled) {\n this.enableHighResolutionFeature = enabled;\n }\n updateTransceiverController() {\n return __awaiter(this, void 0, void 0, function* () {\n const settings = this.getStreamCaptureSetting();\n if (!settings) {\n return;\n }\n const encodingParams = this.calculateEncodingParameters(settings);\n if (this.shouldUpdateEndcodingParameters(encodingParams)) {\n this.encodingParamMap.set(NScaleVideoUplinkBandwidthPolicy.encodingMapKey, encodingParams);\n this.transceiverController.setEncodingParameters(this.encodingParamMap);\n }\n });\n }\n shouldUpdateEndcodingParameters(encoding) {\n var _a, _b;\n const transceiverEncoding = (_b = (_a = this.transceiverController\n .localVideoTransceiver()\n .sender.getParameters()) === null || _a === void 0 ? void 0 : _a.encodings) === null || _b === void 0 ? void 0 : _b[0];\n /* istanbul ignore next: transceiverEncoding?.scaleResolutionDownBy cannot be covered */\n return (encoding.maxBitrate !== (transceiverEncoding === null || transceiverEncoding === void 0 ? void 0 : transceiverEncoding.maxBitrate) ||\n encoding.scaleResolutionDownBy !== (transceiverEncoding === null || transceiverEncoding === void 0 ? void 0 : transceiverEncoding.scaleResolutionDownBy) ||\n // @ts-ignore\n (encoding === null || encoding === void 0 ? void 0 : encoding.scalabilityMode) !== (transceiverEncoding === null || transceiverEncoding === void 0 ? void 0 : transceiverEncoding.scalabilityMode));\n }\n calculateEncodingParameters(setting) {\n var _a, _b, _c;\n const maxBitrate = this.maxBandwidthKbps() * 1000;\n let scale = 1;\n let targetHeight = 720;\n if (setting.height !== undefined &&\n setting.width !== undefined &&\n this.scaleResolution &&\n !this.hasBandwidthPriority &&\n this.getNumberOfPublishedVideoSources() > 2) {\n targetHeight =\n NScaleVideoUplinkBandwidthPolicy.targetHeightArray[Math.min(this.getNumberOfPublishedVideoSources(), NScaleVideoUplinkBandwidthPolicy.targetHeightArray.length - 1)][this.enableHighResolutionFeature ? 1 : 0];\n //Workaround for issue https://github.com/aws/amazon-chime-sdk-js/issues/2002\n if (targetHeight === 480 && ((_a = this.browserBehavior) === null || _a === void 0 ? void 0 : _a.disable480pResolutionScaleDown())) {\n targetHeight = 360;\n }\n scale = Math.max(Math.min(setting.height, setting.width) / targetHeight, 1);\n (_b = this.logger) === null || _b === void 0 ? void 0 : _b.info(`Resolution scale factor is ${scale} for capture resolution ${setting.width}x${setting.height}. New dimension is ${setting.width / scale}x${setting.height / scale}`);\n }\n if (this.enableSVC) {\n let scalabilityMode;\n if ((this.numParticipants >= 0 && this.numParticipants < 3) || !this.isUsingSVCCodec) {\n scalabilityMode = 'L1T1';\n }\n else {\n scalabilityMode = targetHeight >= 720 ? 'L3T3' : targetHeight >= 360 ? 'L2T3' : 'L1T3';\n }\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.info(`calculateEncodingParameters: SVC: ${this.enableSVC} participants: ${this.numParticipants} publishers: ${this.getNumberOfPublishedVideoSources()} bitrate: ${maxBitrate} targetHeight: ${targetHeight} scalabilityMode: ${scalabilityMode} isUsingSVCCodec: ${this.isUsingSVCCodec}`);\n return {\n scaleResolutionDownBy: scale,\n maxBitrate: maxBitrate,\n // @ts-ignore\n scalabilityMode: scalabilityMode,\n };\n }\n else {\n return {\n scaleResolutionDownBy: scale,\n maxBitrate: maxBitrate,\n };\n }\n }\n getStreamCaptureSetting() {\n var _a, _b, _c, _d;\n return (_d = (_c = (_b = (_a = this.transceiverController) === null || _a === void 0 ? void 0 : _a.localVideoTransceiver()) === null || _b === void 0 ? void 0 : _b.sender) === null || _c === void 0 ? void 0 : _c.track) === null || _d === void 0 ? void 0 : _d.getSettings();\n }\n getNumberOfPublishedVideoSources() {\n var _a;\n /* istanbul ignore next: policy calculation is dependent on index so this is never undefined at time of use */\n return (_a = this.numberOfPublishedVideoSources) !== null && _a !== void 0 ? _a : 0;\n }\n wantsVideoDependencyDescriptorRtpHeaderExtension() {\n return this.enableSVC;\n }\n setMeetingSupportedVideoSendCodecs(meetingSupportedVideoSendCodecPreferences, videoSendCodecPreferences) {\n const codecs = meetingSupportedVideoSendCodecPreferences !== null && meetingSupportedVideoSendCodecPreferences !== void 0 ? meetingSupportedVideoSendCodecPreferences : videoSendCodecPreferences;\n const isUsingSVCCodec = codecs.length > 0 &&\n NScaleVideoUplinkBandwidthPolicy.SVCCodecNames.includes(codecs[0].codecName);\n if (isUsingSVCCodec !== this.isUsingSVCCodec) {\n this.isUsingSVCCodec = isUsingSVCCodec;\n this.updateOptimalParameters();\n }\n }\n}\nexports.default = NScaleVideoUplinkBandwidthPolicy;\nNScaleVideoUplinkBandwidthPolicy.encodingMapKey = 'video';\n// 0, 1, 2 have dummy value as we keep the original resolution if we have less than 2 videos.\n// For each video cource, we define a target height for low resoultion and high resolution,\n// respectively. This is corresponding to the meeting feature specified for the meeting.\nNScaleVideoUplinkBandwidthPolicy.targetHeightArray = [\n [0, 0],\n [0, 0],\n [0, 0],\n [540, 720],\n [540, 720],\n [480, 540],\n [480, 540],\n [480, 540],\n [480, 540],\n [360, 480],\n [360, 480],\n [360, 480],\n [360, 480],\n [270, 360],\n [270, 360],\n [270, 360],\n [270, 360],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270],\n [180, 270], // 25\n];\nNScaleVideoUplinkBandwidthPolicy.SVCCodecNames = ['VP9'];\n//# sourceMappingURL=NScaleVideoUplinkBandwidthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass DefaultVolumeIndicatorAdapter {\n constructor(logger, realtimeController, minVolumeDecibels, maxVolumeDecibels, selfAttendeeId) {\n this.logger = logger;\n this.realtimeController = realtimeController;\n this.minVolumeDecibels = minVolumeDecibels;\n this.maxVolumeDecibels = maxVolumeDecibels;\n this.selfAttendeeId = selfAttendeeId;\n this.streamIdToAttendeeId = {};\n this.streamIdToExternalUserId = {};\n this.warnedAboutMissingStreamIdMapping = {};\n this.attendeeIdToStreamId = {};\n this.sessionReconnected = false;\n }\n onReconnect() {\n this.sessionReconnected = true;\n }\n sendRealtimeUpdatesForAudioStreamIdInfo(info) {\n let streamIndex = 0;\n for (const stream of info.streams) {\n const hasAttendeeId = !!stream.attendeeId;\n const hasExternalUserId = !!stream.externalUserId;\n const hasMuted = stream.hasOwnProperty('muted');\n const hasDropped = !!stream.dropped;\n if (hasAttendeeId) {\n if (!!this.attendeeIdToStreamId[stream.attendeeId] &&\n this.attendeeIdToStreamId[stream.attendeeId] < stream.audioStreamId) {\n delete this.attendeeIdToStreamId[stream.attendeeId];\n }\n this.streamIdToAttendeeId[stream.audioStreamId] = stream.attendeeId;\n const externalUserId = hasExternalUserId ? stream.externalUserId : stream.attendeeId;\n this.streamIdToExternalUserId[stream.audioStreamId] = externalUserId;\n this.attendeeIdToStreamId[stream.attendeeId] = stream.audioStreamId;\n this.realtimeController.realtimeSetAttendeeIdPresence(stream.attendeeId, true, externalUserId, false, { attendeeIndex: streamIndex++, attendeesInFrame: info.streams.length });\n }\n if (hasMuted) {\n const attendeeId = this.streamIdToAttendeeId[stream.audioStreamId];\n const externalUserId = this.streamIdToExternalUserId[stream.audioStreamId];\n this.realtimeController.realtimeUpdateVolumeIndicator(attendeeId, null, stream.muted, null, externalUserId);\n }\n if (!hasAttendeeId && !hasMuted) {\n const attendeeId = this.streamIdToAttendeeId[stream.audioStreamId];\n if (attendeeId) {\n const externalUserId = this.streamIdToExternalUserId[stream.audioStreamId];\n delete this.streamIdToAttendeeId[stream.audioStreamId];\n delete this.streamIdToExternalUserId[stream.audioStreamId];\n delete this.warnedAboutMissingStreamIdMapping[stream.audioStreamId];\n if (this.attendeeIdToStreamId[attendeeId] === stream.audioStreamId) {\n delete this.attendeeIdToStreamId[attendeeId];\n }\n let attendeeHasNewStreamId = false;\n for (const otherStreamId of Object.keys(this.streamIdToAttendeeId)) {\n const otherStreamIdNumber = parseInt(otherStreamId);\n if (otherStreamIdNumber > stream.audioStreamId &&\n this.streamIdToAttendeeId[otherStreamIdNumber] === attendeeId) {\n attendeeHasNewStreamId = true;\n break;\n }\n }\n if (!attendeeHasNewStreamId) {\n this.realtimeController.realtimeSetAttendeeIdPresence(attendeeId, false, externalUserId, hasDropped, { attendeeIndex: streamIndex++, attendeesInFrame: info.streams.length });\n }\n }\n }\n }\n if (this.sessionReconnected) {\n this.cleanUpState(info);\n this.sessionReconnected = false;\n }\n }\n cleanUpState(info) {\n const localAttendeeIds = Object.values(this.streamIdToAttendeeId);\n const remoteAttendeeIds = info.streams.map(stream => stream.attendeeId);\n const deletedAttendeeIds = localAttendeeIds.filter(id => {\n return !remoteAttendeeIds.includes(id);\n });\n for (const [index, deletedAttendeeId] of deletedAttendeeIds.entries()) {\n const streamId = this.attendeeIdToStreamId[deletedAttendeeId];\n const externalUserId = this.streamIdToExternalUserId[streamId];\n delete this.streamIdToAttendeeId[streamId];\n delete this.streamIdToExternalUserId[streamId];\n delete this.warnedAboutMissingStreamIdMapping[streamId];\n delete this.attendeeIdToStreamId[deletedAttendeeId];\n // During reconnection, the audio info frame might not include self attendee.\n // However, if that happens, there would be another audio info frame with the self attendee after reconnection.\n // So we should not send leave event here for self attendee.\n if (deletedAttendeeId === this.selfAttendeeId) {\n this.logger.warn(`the volume indicator adapter cleans up the current attendee (presence = false) after reconnection`);\n continue;\n }\n // The reconnect event does not have information whether the attendee is dropped/left.\n // Defaulting to attendee leaving the meeting\n this.realtimeController.realtimeSetAttendeeIdPresence(deletedAttendeeId, false, externalUserId, false, { attendeeIndex: index, attendeesInFrame: deletedAttendeeId.length });\n }\n }\n sendRealtimeUpdatesForAudioMetadata(metadata) {\n let volumes = null;\n let signalStrengths = null;\n for (const state of metadata.attendeeStates) {\n const attendeeId = this.attendeeIdForStreamId(state.audioStreamId);\n if (state.hasOwnProperty('volume')) {\n if (volumes === null) {\n volumes = {};\n }\n if (attendeeId !== null) {\n // @ts-ignore: TODO fix this protobufjs issue\n volumes[attendeeId] = this.normalizedVolume(state);\n }\n }\n if (state.hasOwnProperty('signalStrength')) {\n if (signalStrengths === null) {\n signalStrengths = {};\n }\n if (attendeeId !== null) {\n // @ts-ignore: TODO fix this protobufjs issue\n signalStrengths[attendeeId] = this.normalizedSignalStrength(state);\n }\n }\n }\n this.applyRealtimeUpdatesForAudioMetadata(volumes, signalStrengths);\n }\n normalizedVolume(state) {\n const dBVolume = -state.volume;\n const normalized = 1.0 - (dBVolume - this.maxVolumeDecibels) / (this.minVolumeDecibels - this.maxVolumeDecibels);\n const clipped = Math.min(Math.max(normalized, 0.0), 1.0);\n return clipped;\n }\n normalizedSignalStrength(state) {\n const normalized = state.signalStrength / DefaultVolumeIndicatorAdapter.MAX_SIGNAL_STRENGTH_LEVELS;\n const clipped = Math.min(Math.max(normalized, 0.0), 1.0);\n return clipped;\n }\n applyRealtimeUpdatesForAudioMetadata(volumes, signalStrengths) {\n for (const streamId in this.streamIdToAttendeeId) {\n const attendeeId = this.streamIdToAttendeeId[streamId];\n const externalUserId = this.streamIdToExternalUserId[streamId];\n let volumeUpdate = null;\n let signalStrengthUpdate = null;\n if (volumes !== null) {\n if (volumes.hasOwnProperty(attendeeId)) {\n volumeUpdate = volumes[attendeeId];\n }\n else {\n volumeUpdate = DefaultVolumeIndicatorAdapter.IMPLICIT_VOLUME;\n }\n }\n if (signalStrengths !== null) {\n if (signalStrengths.hasOwnProperty(attendeeId)) {\n signalStrengthUpdate = signalStrengths[attendeeId];\n }\n else {\n signalStrengthUpdate = DefaultVolumeIndicatorAdapter.IMPLICIT_SIGNAL_STRENGTH;\n }\n }\n if (volumeUpdate !== null || signalStrengthUpdate !== null) {\n this.realtimeController.realtimeUpdateVolumeIndicator(attendeeId, volumeUpdate, null, signalStrengthUpdate, externalUserId);\n }\n }\n }\n attendeeIdForStreamId(streamId) {\n if (streamId === 0) {\n return null;\n }\n const attendeeId = this.streamIdToAttendeeId[streamId];\n if (attendeeId) {\n return attendeeId;\n }\n if (!this.warnedAboutMissingStreamIdMapping[streamId]) {\n this.warnedAboutMissingStreamIdMapping[streamId] = true;\n this.logger.warn(`volume indicator stream id ${streamId} seen before being defined`);\n }\n return null;\n }\n}\nexports.default = DefaultVolumeIndicatorAdapter;\nDefaultVolumeIndicatorAdapter.MAX_SIGNAL_STRENGTH_LEVELS = 2;\nDefaultVolumeIndicatorAdapter.IMPLICIT_VOLUME = 0;\nDefaultVolumeIndicatorAdapter.IMPLICIT_SIGNAL_STRENGTH = 1;\n//# sourceMappingURL=DefaultVolumeIndicatorAdapter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultActiveSpeakerDetector_1 = __importDefault(require(\"../activespeakerdetector/DefaultActiveSpeakerDetector\"));\nconst DefaultAudioMixController_1 = __importDefault(require(\"../audiomixcontroller/DefaultAudioMixController\"));\nconst AudioProfile_1 = __importDefault(require(\"../audioprofile/AudioProfile\"));\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst ConnectionHealthData_1 = __importDefault(require(\"../connectionhealthpolicy/ConnectionHealthData\"));\nconst SignalingAndMetricsConnectionMonitor_1 = __importDefault(require(\"../connectionmonitor/SignalingAndMetricsConnectionMonitor\"));\nconst VideoQualitySettings_1 = __importDefault(require(\"../devicecontroller/VideoQualitySettings\"));\nconst MeetingSessionStatus_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatus\"));\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst MeetingSessionVideoAvailability_1 = __importDefault(require(\"../meetingsession/MeetingSessionVideoAvailability\"));\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst DefaultPingPong_1 = __importDefault(require(\"../pingpong/DefaultPingPong\"));\nconst DefaultRealtimeController_1 = __importDefault(require(\"../realtimecontroller/DefaultRealtimeController\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst DefaultSessionStateController_1 = __importDefault(require(\"../sessionstatecontroller/DefaultSessionStateController\"));\nconst SessionStateControllerAction_1 = __importDefault(require(\"../sessionstatecontroller/SessionStateControllerAction\"));\nconst SessionStateControllerState_1 = __importDefault(require(\"../sessionstatecontroller/SessionStateControllerState\"));\nconst SessionStateControllerTransitionResult_1 = __importDefault(require(\"../sessionstatecontroller/SessionStateControllerTransitionResult\"));\nconst DefaultSignalingClient_1 = __importDefault(require(\"../signalingclient/DefaultSignalingClient\"));\nconst ServerSideNetworkAdaption_1 = __importStar(require(\"../signalingclient/ServerSideNetworkAdaption\"));\nconst SignalingClientEventType_1 = __importDefault(require(\"../signalingclient/SignalingClientEventType\"));\nconst SignalingClientVideoSubscriptionConfiguration_1 = __importDefault(require(\"../signalingclient/SignalingClientVideoSubscriptionConfiguration\"));\nconst SignalingProtocol_js_1 = require(\"../signalingprotocol/SignalingProtocol.js\");\nconst StatsCollector_1 = __importDefault(require(\"../statscollector/StatsCollector\"));\nconst AttachMediaInputTask_1 = __importDefault(require(\"../task/AttachMediaInputTask\"));\nconst CleanRestartedSessionTask_1 = __importDefault(require(\"../task/CleanRestartedSessionTask\"));\nconst CleanStoppedSessionTask_1 = __importDefault(require(\"../task/CleanStoppedSessionTask\"));\nconst CreatePeerConnectionTask_1 = __importDefault(require(\"../task/CreatePeerConnectionTask\"));\nconst CreateSDPTask_1 = __importDefault(require(\"../task/CreateSDPTask\"));\nconst FinishGatheringICECandidatesTask_1 = __importDefault(require(\"../task/FinishGatheringICECandidatesTask\"));\nconst JoinAndReceiveIndexTask_1 = __importDefault(require(\"../task/JoinAndReceiveIndexTask\"));\nconst LeaveAndReceiveLeaveAckTask_1 = __importDefault(require(\"../task/LeaveAndReceiveLeaveAckTask\"));\nconst ListenForVolumeIndicatorsTask_1 = __importDefault(require(\"../task/ListenForVolumeIndicatorsTask\"));\nconst MonitorTask_1 = __importDefault(require(\"../task/MonitorTask\"));\nconst OpenSignalingConnectionTask_1 = __importDefault(require(\"../task/OpenSignalingConnectionTask\"));\nconst ParallelGroupTask_1 = __importDefault(require(\"../task/ParallelGroupTask\"));\nconst PromoteToPrimaryMeetingTask_1 = __importDefault(require(\"../task/PromoteToPrimaryMeetingTask\"));\nconst ReceiveAudioInputTask_1 = __importDefault(require(\"../task/ReceiveAudioInputTask\"));\nconst ReceiveRemoteVideoPauseResumeTask_1 = __importDefault(require(\"../task/ReceiveRemoteVideoPauseResumeTask\"));\nconst ReceiveVideoInputTask_1 = __importDefault(require(\"../task/ReceiveVideoInputTask\"));\nconst ReceiveVideoStreamIndexTask_1 = __importDefault(require(\"../task/ReceiveVideoStreamIndexTask\"));\nconst SendAndReceiveDataMessagesTask_1 = __importDefault(require(\"../task/SendAndReceiveDataMessagesTask\"));\nconst SerialGroupTask_1 = __importDefault(require(\"../task/SerialGroupTask\"));\nconst SetLocalDescriptionTask_1 = __importDefault(require(\"../task/SetLocalDescriptionTask\"));\nconst SetRemoteDescriptionTask_1 = __importDefault(require(\"../task/SetRemoteDescriptionTask\"));\nconst SubscribeAndReceiveSubscribeAckTask_1 = __importDefault(require(\"../task/SubscribeAndReceiveSubscribeAckTask\"));\nconst TimeoutTask_1 = __importDefault(require(\"../task/TimeoutTask\"));\nconst WaitForAttendeePresenceTask_1 = __importDefault(require(\"../task/WaitForAttendeePresenceTask\"));\nconst DefaultTransceiverController_1 = __importDefault(require(\"../transceivercontroller/DefaultTransceiverController\"));\nconst SimulcastContentShareTransceiverController_1 = __importDefault(require(\"../transceivercontroller/SimulcastContentShareTransceiverController\"));\nconst SimulcastTransceiverController_1 = __importDefault(require(\"../transceivercontroller/SimulcastTransceiverController\"));\nconst VideoOnlyTransceiverController_1 = __importDefault(require(\"../transceivercontroller/VideoOnlyTransceiverController\"));\nconst Types_1 = require(\"../utils/Types\");\nconst DefaultVideoCaptureAndEncodeParameter_1 = __importDefault(require(\"../videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter\"));\nconst AllHighestVideoBandwidthPolicy_1 = __importDefault(require(\"../videodownlinkbandwidthpolicy/AllHighestVideoBandwidthPolicy\"));\nconst VideoAdaptiveProbePolicy_1 = __importDefault(require(\"../videodownlinkbandwidthpolicy/VideoAdaptiveProbePolicy\"));\nconst VideoPreferences_1 = require(\"../videodownlinkbandwidthpolicy/VideoPreferences\");\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"../videostreamidset/DefaultVideoStreamIdSet\"));\nconst DefaultVideoStreamIndex_1 = __importDefault(require(\"../videostreamindex/DefaultVideoStreamIndex\"));\nconst SimulcastVideoStreamIndex_1 = __importDefault(require(\"../videostreamindex/SimulcastVideoStreamIndex\"));\nconst DefaultVideoTileController_1 = __importDefault(require(\"../videotilecontroller/DefaultVideoTileController\"));\nconst DefaultVideoTileFactory_1 = __importDefault(require(\"../videotilefactory/DefaultVideoTileFactory\"));\nconst DefaultSimulcastUplinkPolicy_1 = __importDefault(require(\"../videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy\"));\nconst NScaleVideoUplinkBandwidthPolicy_1 = __importDefault(require(\"../videouplinkbandwidthpolicy/NScaleVideoUplinkBandwidthPolicy\"));\nconst DefaultVolumeIndicatorAdapter_1 = __importDefault(require(\"../volumeindicatoradapter/DefaultVolumeIndicatorAdapter\"));\nconst AudioVideoControllerState_1 = __importDefault(require(\"./AudioVideoControllerState\"));\nclass DefaultAudioVideoController {\n constructor(configuration, logger, webSocketAdapter, mediaStreamBroker, reconnectController, eventController) {\n this._audioProfile = new AudioProfile_1.default();\n this.connectionHealthData = new ConnectionHealthData_1.default();\n this.observerQueue = new Set();\n this.meetingSessionContext = new AudioVideoControllerState_1.default();\n this.enableSimulcast = false;\n this.enableSVC = false;\n this.useUpdateTransceiverControllerForUplink = false;\n this.totalRetryCount = 0;\n this.startAudioVideoTimestamp = 0;\n this.mayNeedRenegotiationForSimulcastLayerChange = false;\n // Stored solely to trigger demotion callback on disconnection (expected behavior).\n //\n // We otherwise intentionally do not use this for any other behavior to avoid the complexity\n // of the added state.\n this.promotedToPrimaryMeeting = false;\n this.hasGetRTCPeerConnectionStatsDeprecationMessageBeenSent = false;\n // `connectWithPromises`, and `actionUpdateWithRenegotiation` all\n // contains a significant portion of asynchronous tasks, so we need to explicitly defer\n // any task operation which may be performed on the event queue that may modify\n // mutable state in `MeetingSessionContext`, as this mutable state needs to be consistent over the course of the update.\n //\n // Currently this includes\n // * `ReceiveVideoStreamIndexTask` which updates `videosToReceive` and `videoCaptureAndEncodeParameter`\n // * `MonitorTask` which updates `videosToReceive`\n this.receiveIndexTask = undefined;\n this.monitorTask = undefined;\n this.destroyed = false;\n this._logger = logger;\n this.sessionStateController = new DefaultSessionStateController_1.default(this._logger);\n this._configuration = configuration;\n this._webSocketAdapter = webSocketAdapter;\n this._realtimeController = new DefaultRealtimeController_1.default(mediaStreamBroker);\n this._realtimeController.realtimeSetLocalAttendeeId(configuration.credentials.attendeeId, configuration.credentials.externalUserId);\n this._mediaStreamBroker = mediaStreamBroker;\n this._reconnectController = reconnectController;\n this._videoTileController = new DefaultVideoTileController_1.default(new DefaultVideoTileFactory_1.default(), this, this._logger);\n this._audioMixController = new DefaultAudioMixController_1.default(this._logger);\n this._mediaStreamBroker.addMediaStreamBrokerObserver(this._audioMixController);\n this.meetingSessionContext.logger = this._logger;\n this._eventController = eventController;\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.observerQueue.clear();\n this._mediaStreamBroker.removeMediaStreamBrokerObserver(this._audioMixController);\n this.destroyed = true;\n });\n }\n get configuration() {\n return this._configuration;\n }\n get realtimeController() {\n return this._realtimeController;\n }\n get activeSpeakerDetector() {\n // Lazy init.\n if (!this._activeSpeakerDetector) {\n this._activeSpeakerDetector = new DefaultActiveSpeakerDetector_1.default(this._realtimeController, this._configuration.credentials.attendeeId, this.handleHasBandwidthPriority.bind(this));\n }\n return this._activeSpeakerDetector;\n }\n get videoTileController() {\n return this._videoTileController;\n }\n get audioMixController() {\n return this._audioMixController;\n }\n get logger() {\n return this._logger;\n }\n get rtcPeerConnection() {\n return (this.meetingSessionContext && this.meetingSessionContext.peer) || null;\n }\n get mediaStreamBroker() {\n return this._mediaStreamBroker;\n }\n get eventController() {\n return this._eventController;\n }\n /**\n * This API will be deprecated in favor of `ClientMetricReport.getRTCStatsReport()`.\n *\n * It makes an additional call to the `getStats` API and therefore may cause slight performance degradation.\n *\n * Please subscribe to `metricsDidReceive(clientMetricReport: ClientMetricReport)` callback,\n * and get the raw `RTCStatsReport` via `clientMetricReport.getRTCStatsReport()`.\n */\n getRTCPeerConnectionStats(selector) {\n /* istanbul ignore else */\n if (!this.hasGetRTCPeerConnectionStatsDeprecationMessageBeenSent) {\n this.logger.warn('The `getRTCPeerConnectionStats()` is on its way to be deprecated. It makes an additional call to the `getStats` API and therefore may cause slight performance degradation. Please use the new API `clientMetricReport.getRTCStatsReport()` returned by `metricsDidReceive(clientMetricReport)` callback instead.');\n this.hasGetRTCPeerConnectionStatsDeprecationMessageBeenSent = true;\n }\n if (!this.rtcPeerConnection) {\n return null;\n }\n return this.rtcPeerConnection.getStats(selector);\n }\n setAudioProfile(audioProfile) {\n this._audioProfile = audioProfile;\n }\n addObserver(observer) {\n this.logger.info('adding meeting observer');\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.logger.info('removing meeting observer');\n this.observerQueue.delete(observer);\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n AsyncScheduler_1.default.nextTick(() => {\n if (this.observerQueue.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n initSignalingClient() {\n this.connectionHealthData.reset();\n if (this.meetingSessionContext.signalingClient) {\n return;\n }\n this.meetingSessionContext = new AudioVideoControllerState_1.default();\n this.meetingSessionContext.logger = this.logger;\n this.meetingSessionContext.eventController = this.eventController;\n this.meetingSessionContext.browserBehavior = new DefaultBrowserBehavior_1.default();\n this.meetingSessionContext.videoSendCodecPreferences = this.videoSendCodecPreferences;\n this.meetingSessionContext.audioProfile = this._audioProfile;\n this.meetingSessionContext.meetingSessionConfiguration = this.configuration;\n this.meetingSessionContext.signalingClient = new DefaultSignalingClient_1.default(this._webSocketAdapter, this.logger);\n }\n uninstallPreStartObserver() {\n this.meetingSessionContext.signalingClient.removeObserver(this.preStartObserver);\n this.preStartObserver = undefined;\n }\n prestart() {\n this.logger.info('Pre-connecting signaling connection.');\n return this.createOrReuseSignalingTask()\n .run()\n .then(() => {\n const handleClosed = () => __awaiter(this, void 0, void 0, function* () {\n this.logger.info('Early connection closed; discarding signaling task.');\n this.signalingTask = undefined;\n this.uninstallPreStartObserver();\n });\n this.preStartObserver = {\n handleSignalingClientEvent(event) {\n if (event.type === SignalingClientEventType_1.default.WebSocketClosed) {\n handleClosed();\n }\n },\n };\n this.meetingSessionContext.signalingClient.registerObserver(this.preStartObserver);\n })\n .catch(e => {\n this.logger.error(`Signaling task pre-start failed: ${e}`);\n // Clean up just in case a subsequent attempt will succeed.\n this.signalingTask = undefined;\n });\n }\n start(options) {\n this.startReturningPromise(options)\n .then(() => {\n this.logger.info('start completed');\n })\n // Just-in-case error handling.\n .catch(\n /* istanbul ignore next */\n e => {\n this.logger.error(`start failed: ${e}`);\n });\n }\n // This is public (albeit marked internal) for tests only.\n /* @internal */\n startReturningPromise(options) {\n if ((options === null || options === void 0 ? void 0 : options.signalingOnly) === true) {\n return this.prestart();\n }\n // For side-effects: lazy getter.\n this.activeSpeakerDetector;\n return new Promise((resolve, reject) => {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Connect, () => {\n this.actionConnect(false).then(resolve).catch(reject);\n });\n });\n }\n // @ts-ignore\n connectWithPromises(needsToWaitForAttendeePresence) {\n const context = this.meetingSessionContext;\n // Syntactic sugar.\n const timeout = (timeoutMs, task) => {\n return new TimeoutTask_1.default(this.logger, task, timeoutMs);\n };\n // First layer.\n this.monitorTask = new MonitorTask_1.default(context, this.configuration.connectionHealthPolicyConfiguration, this.connectionHealthData);\n const monitor = this.monitorTask.once();\n // Second layer.\n const receiveAudioInput = new ReceiveAudioInputTask_1.default(context).once();\n this.receiveIndexTask = new ReceiveVideoStreamIndexTask_1.default(context);\n // See declaration (unpaused in actionFinishConnecting)\n this.monitorTask.pauseResubscribeCheck();\n this.receiveIndexTask.pauseIngestion();\n const signaling = new SerialGroupTask_1.default(this.logger, 'Signaling', [\n // If pre-connecting, this will be an existing task that has already been run.\n this.createOrReuseSignalingTask(),\n new ListenForVolumeIndicatorsTask_1.default(context),\n new SendAndReceiveDataMessagesTask_1.default(context),\n new JoinAndReceiveIndexTask_1.default(context),\n this.receiveIndexTask,\n ]).once();\n // Third layer.\n const createPeerConnection = new CreatePeerConnectionTask_1.default(context).once(signaling);\n const attachMediaInput = new AttachMediaInputTask_1.default(context).once(createPeerConnection, receiveAudioInput);\n // Mostly serial section -- kept as promises to allow for finer-grained breakdown.\n const createSDP = new CreateSDPTask_1.default(context).once(attachMediaInput);\n const setLocalDescription = new SetLocalDescriptionTask_1.default(context).once(createSDP);\n const ice = new FinishGatheringICECandidatesTask_1.default(context).once(setLocalDescription);\n const subscribeAck = new SubscribeAndReceiveSubscribeAckTask_1.default(context).once(ice);\n const receivePauseResume = new ReceiveRemoteVideoPauseResumeTask_1.default(context).once(subscribeAck);\n // The ending is a delicate time: we need the connection as a whole to have a timeout,\n // and for the attendee presence timer to not start ticking until after the subscribe/ack.\n return new SerialGroupTask_1.default(this.logger, this.wrapTaskName('AudioVideoStart'), [\n monitor,\n timeout(this.configuration.connectionTimeoutMs, new SerialGroupTask_1.default(this.logger, 'Peer', [\n // The order of these two matters. If canceled, the first one that's still running\n // will contribute any special rejection, and we don't want that to be \"attendee not found\"!\n subscribeAck,\n receivePauseResume,\n needsToWaitForAttendeePresence\n ? new TimeoutTask_1.default(this.logger, new ParallelGroupTask_1.default(this.logger, 'FinalizeConnection', [\n new WaitForAttendeePresenceTask_1.default(context),\n new SetRemoteDescriptionTask_1.default(context),\n ]), this.meetingSessionContext.meetingSessionConfiguration.attendeePresenceTimeoutMs)\n : /* istanbul ignore next */ new SetRemoteDescriptionTask_1.default(context),\n ])),\n ]);\n }\n actionConnect(reconnecting) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n this.initSignalingClient();\n // We no longer need to watch for the early connection dropping; we're back where\n // we otherwise would have been had we not pre-started.\n this.uninstallPreStartObserver();\n // Note that some of the assignments in this function exist to clean up previous connections.\n // All future 'clean up' assignments should go in `AudioVideoControllerState.resetConnectionSpecificState`\n // for consolidation purposes.\n this.meetingSessionContext.mediaStreamBroker = this._mediaStreamBroker;\n this.meetingSessionContext.realtimeController = this._realtimeController;\n this.meetingSessionContext.audioMixController = this._audioMixController;\n this.meetingSessionContext.audioVideoController = this;\n this.enableSimulcast =\n this.configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers &&\n new DefaultBrowserBehavior_1.default().hasChromiumWebRTC();\n if (this.enableSimulcast && this.configuration.enableSVC) {\n this.logger.warn('SVC cannot be enabled at the same time as simulcast. Disabling SVC, using simulcast.');\n }\n this.enableSVC =\n !this.enableSimulcast &&\n this.configuration.enableSVC &&\n new DefaultBrowserBehavior_1.default().supportsScalableVideoCoding();\n const useAudioConnection = !!this.configuration.urls.audioHostURL;\n if (!useAudioConnection) {\n this.logger.info(`Using video only transceiver controller`);\n this.meetingSessionContext.transceiverController = new VideoOnlyTransceiverController_1.default(this.logger, this.meetingSessionContext.browserBehavior, this.meetingSessionContext);\n }\n else if (this.enableSimulcast) {\n this.logger.info(`Using transceiver controller with simulcast support`);\n if (new DefaultModality_1.default(this.configuration.credentials.attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT)) {\n this.meetingSessionContext.transceiverController = new SimulcastContentShareTransceiverController_1.default(this.logger, this.meetingSessionContext.browserBehavior, this.meetingSessionContext);\n }\n else {\n this.meetingSessionContext.transceiverController = new SimulcastTransceiverController_1.default(this.logger, this.meetingSessionContext.browserBehavior, this.meetingSessionContext);\n }\n }\n else {\n this.logger.info(`Using default transceiver controller`);\n this.meetingSessionContext.transceiverController = new DefaultTransceiverController_1.default(this.logger, this.meetingSessionContext.browserBehavior, this.meetingSessionContext);\n }\n this.meetingSessionContext.volumeIndicatorAdapter = new DefaultVolumeIndicatorAdapter_1.default(this.logger, this._realtimeController, DefaultAudioVideoController.MIN_VOLUME_DECIBELS, DefaultAudioVideoController.MAX_VOLUME_DECIBELS, this.configuration.credentials.attendeeId);\n this.meetingSessionContext.videoTileController = this._videoTileController;\n this.meetingSessionContext.videoDownlinkBandwidthPolicy = this.configuration.videoDownlinkBandwidthPolicy;\n this.meetingSessionContext.videoUplinkBandwidthPolicy = this.configuration.videoUplinkBandwidthPolicy;\n this.meetingSessionContext.enableSimulcast = this.enableSimulcast;\n this.meetingSessionContext.enableSVC = this.enableSVC;\n if (this.enableSimulcast) {\n let simulcastPolicy = this.meetingSessionContext\n .videoUplinkBandwidthPolicy;\n if (!simulcastPolicy) {\n simulcastPolicy = new DefaultSimulcastUplinkPolicy_1.default(this.configuration.credentials.attendeeId, this.meetingSessionContext.logger);\n this.meetingSessionContext.videoUplinkBandwidthPolicy = simulcastPolicy;\n }\n simulcastPolicy.addObserver(this);\n if (!this.meetingSessionContext.videoDownlinkBandwidthPolicy) {\n this.meetingSessionContext.videoDownlinkBandwidthPolicy = new VideoAdaptiveProbePolicy_1.default(this.meetingSessionContext.logger);\n }\n this.meetingSessionContext.videoStreamIndex = new SimulcastVideoStreamIndex_1.default(this.logger);\n }\n else {\n this.meetingSessionContext.enableSimulcast = false;\n this.meetingSessionContext.videoStreamIndex = new DefaultVideoStreamIndex_1.default(this.logger);\n if (!this.meetingSessionContext.videoUplinkBandwidthPolicy) {\n this.meetingSessionContext.videoUplinkBandwidthPolicy = new NScaleVideoUplinkBandwidthPolicy_1.default(this.configuration.credentials.attendeeId, !this.meetingSessionContext.browserBehavior.disableResolutionScaleDown(), this.meetingSessionContext.logger, this.meetingSessionContext.browserBehavior);\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setSVCEnabled(this.enableSVC);\n }\n if (!this.meetingSessionContext.videoDownlinkBandwidthPolicy) {\n this.meetingSessionContext.videoDownlinkBandwidthPolicy = new AllHighestVideoBandwidthPolicy_1.default(this.configuration.credentials.attendeeId);\n }\n if (this.meetingSessionContext.videoUplinkBandwidthPolicy.setTransceiverController &&\n this.meetingSessionContext.videoUplinkBandwidthPolicy.updateTransceiverController) {\n this.useUpdateTransceiverControllerForUplink = true;\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setTransceiverController(this.meetingSessionContext.transceiverController);\n }\n this.meetingSessionContext.audioProfile = this._audioProfile;\n }\n if (new DefaultModality_1.default(this.configuration.credentials.attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT)) {\n const enableUhdContent = this.configuration.meetingFeatures.contentMaxResolution ===\n VideoQualitySettings_1.default.VideoResolutionUHD;\n if (enableUhdContent) {\n // Increase default bandwidth for content share since this is not yet configuration that can be exposed\n // without using simulcast\n this.setVideoMaxBandwidthKbps(2500);\n }\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setHighResolutionFeatureEnabled(enableUhdContent);\n }\n else {\n const enableFhdVideo = this.configuration.meetingFeatures.videoMaxResolution ===\n VideoQualitySettings_1.default.VideoResolutionFHD;\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setHighResolutionFeatureEnabled(enableFhdVideo);\n }\n if (this.meetingSessionContext.videoUplinkBandwidthPolicy && this.maxUplinkBandwidthKbps) {\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setIdealMaxBandwidthKbps(this.maxUplinkBandwidthKbps);\n }\n if (this.meetingSessionContext.videoDownlinkBandwidthPolicy.bindToTileController) {\n this.meetingSessionContext.videoDownlinkBandwidthPolicy.bindToTileController(this._videoTileController);\n }\n if (this.meetingSessionContext.videoDownlinkBandwidthPolicy.setWantsResubscribeObserver) {\n this.meetingSessionContext.videoDownlinkBandwidthPolicy.setWantsResubscribeObserver(() => this.update({ needsRenegotiation: false }));\n }\n this.meetingSessionContext.lastKnownVideoAvailability = new MeetingSessionVideoAvailability_1.default();\n this.meetingSessionContext.videoCaptureAndEncodeParameter = new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, false);\n this.meetingSessionContext.videosToReceive = new DefaultVideoStreamIdSet_1.default();\n this.meetingSessionContext.videosPaused = new DefaultVideoStreamIdSet_1.default();\n this.meetingSessionContext.statsCollector = new StatsCollector_1.default(this, this.logger);\n this.meetingSessionContext.connectionMonitor = new SignalingAndMetricsConnectionMonitor_1.default(this, this._realtimeController, this.connectionHealthData, new DefaultPingPong_1.default(this.meetingSessionContext.signalingClient, DefaultAudioVideoController.PING_PONG_INTERVAL_MS, this.logger), this.meetingSessionContext.statsCollector);\n this.meetingSessionContext.reconnectController = this._reconnectController;\n this.meetingSessionContext.videoDeviceInformation = {};\n if (!reconnecting) {\n this.totalRetryCount = 0;\n this._reconnectController.reset();\n this.startAudioVideoTimestamp = Date.now();\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.audioVideoDidStartConnecting).map(f => f.bind(observer)(false));\n });\n (_a = this.eventController) === null || _a === void 0 ? void 0 : _a.publishEvent('meetingStartRequested');\n }\n this.meetingSessionContext.startAudioVideoTimestamp = this.startAudioVideoTimestamp;\n if (this._reconnectController.hasStartedConnectionAttempt()) {\n // This does not reset the reconnect deadline, but declare it's not the first connection.\n this._reconnectController.startedConnectionAttempt(false);\n }\n else {\n this._reconnectController.startedConnectionAttempt(true);\n }\n // No attendee presence event will be triggered if there is no audio connection.\n // Waiting for attendee presence is explicitly executed\n // if `attendeePresenceTimeoutMs` is configured to larger than 0.\n const needsToWaitForAttendeePresence = useAudioConnection &&\n this.meetingSessionContext.meetingSessionConfiguration.attendeePresenceTimeoutMs > 0;\n this.logger.info('Needs to wait for attendee presence? ' + needsToWaitForAttendeePresence);\n const connect = this.connectWithPromises(needsToWaitForAttendeePresence);\n // The rest.\n try {\n yield connect.run();\n this.connectionHealthData.setConnectionStartTime();\n this._mediaStreamBroker.addMediaStreamBrokerObserver(this);\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishConnecting, () => {\n /* istanbul ignore else */\n if (this.eventController) {\n this.meetingSessionContext.meetingStartDurationMs =\n Date.now() - this.startAudioVideoTimestamp;\n this.eventController.publishEvent('meetingStartSucceeded', {\n maxVideoTileCount: this.meetingSessionContext.maxVideoTileCount,\n poorConnectionCount: this.meetingSessionContext.poorConnectionCount,\n retryCount: this.totalRetryCount,\n signalingOpenDurationMs: this.meetingSessionContext.signalingOpenDurationMs,\n iceGatheringDurationMs: this.meetingSessionContext.iceGatheringDurationMs,\n meetingStartDurationMs: this.meetingSessionContext.meetingStartDurationMs,\n });\n }\n this.meetingSessionContext.startTimeMs = Date.now();\n this.actionFinishConnecting();\n });\n }\n catch (error) {\n this.signalingTask = undefined;\n const status = new MeetingSessionStatus_1.default(this.getMeetingStatusCode(error) || MeetingSessionStatusCode_1.default.TaskFailed);\n this.logger.info(`Start failed: ${status} due to error ${error}.`);\n // I am not able to successfully reach this state in the test suite with mock\n // websockets -- it always ends up in 'Disconnecting' instead. As such, this\n // has to be marked for Istanbul.\n /* istanbul ignore if */\n if (this.sessionStateController.state() === SessionStateControllerState_1.default.NotConnected) {\n // There's no point trying to 'disconnect', because we're not connected.\n // The session state controller will bail.\n this.logger.info('Start failed and not connected. Not cleaning up.');\n return;\n }\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Fail, () => __awaiter(this, void 0, void 0, function* () {\n yield this.actionDisconnect(status, true, error);\n if (!this.handleMeetingSessionStatus(status, error)) {\n this.notifyStop(status, error);\n }\n }));\n }\n });\n }\n createOrReuseSignalingTask() {\n if (!this.signalingTask) {\n this.initSignalingClient();\n this.signalingTask = new TimeoutTask_1.default(this.logger, new OpenSignalingConnectionTask_1.default(this.meetingSessionContext), this.configuration.connectionTimeoutMs).once();\n }\n return this.signalingTask;\n }\n actionFinishConnecting() {\n this.signalingTask = undefined;\n this.meetingSessionContext.videoDuplexMode = SignalingProtocol_js_1.SdkStreamServiceType.RX;\n if (!this.meetingSessionContext.enableSimulcast) {\n if (this.useUpdateTransceiverControllerForUplink) {\n this.meetingSessionContext.videoUplinkBandwidthPolicy.updateTransceiverController();\n }\n else {\n this.enforceBandwidthLimitationForSender(this.meetingSessionContext.videoCaptureAndEncodeParameter.encodeBitrates()[0]);\n }\n }\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.audioVideoDidStart).map(f => f.bind(observer)());\n });\n this._reconnectController.reset();\n // `receiveIndexTask` needs to be resumed first so it can set `remoteStreamDescriptions`\n this.receiveIndexTask.resumeIngestion();\n this.monitorTask.resumeResubscribeCheck();\n }\n /* @internal */\n stopReturningPromise() {\n var _a;\n // In order to avoid breaking backward compatibility, when only the\n // signaling connection is established we appear to not be connected.\n // We handle this by simply disconnecting the websocket directly.\n if (this.sessionStateController.state() === SessionStateControllerState_1.default.NotConnected) {\n // Unfortunately, this does not return a promise.\n (_a = this.meetingSessionContext.signalingClient) === null || _a === void 0 ? void 0 : _a.closeConnection();\n this.cleanUpMediaStreamsAfterStop();\n return Promise.resolve();\n }\n /*\n Stops the current audio video meeting session.\n The stop method execution is deferred and executed after\n the current reconnection attempt completes.\n It disables any further reconnection attempts.\n Upon completion, AudioVideoObserver's `audioVideoDidStop`\n callback function is called with `MeetingSessionStatusCode.Left`.\n */\n return new Promise((resolve, reject) => {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Disconnect, () => {\n this._reconnectController.disableReconnect();\n this.logger.info('attendee left meeting, session will not be reconnected');\n this.actionDisconnect(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.Left), false, null)\n .then(resolve)\n .catch(reject);\n });\n });\n }\n stop() {\n this.stopReturningPromise();\n }\n actionDisconnect(status, reconnecting, error) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield new SerialGroupTask_1.default(this.logger, this.wrapTaskName('AudioVideoStop'), [\n new TimeoutTask_1.default(this.logger, new LeaveAndReceiveLeaveAckTask_1.default(this.meetingSessionContext), this.configuration.connectionTimeoutMs),\n ]).run();\n }\n catch (stopError) {\n this.logger.info('fail to stop');\n }\n try {\n const subtasks = [\n new TimeoutTask_1.default(this.logger, new CleanStoppedSessionTask_1.default(this.meetingSessionContext), this.configuration.connectionTimeoutMs),\n ];\n this.cleanUpMediaStreamsAfterStop();\n yield new SerialGroupTask_1.default(this.logger, this.wrapTaskName('AudioVideoClean'), subtasks).run();\n }\n catch (cleanError) {\n /* istanbul ignore next */\n this.logger.info('fail to clean');\n }\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishDisconnecting, () => {\n if (!reconnecting) {\n this.notifyStop(status, error);\n }\n });\n });\n }\n update(options = { needsRenegotiation: true }) {\n let needsRenegotiation = options.needsRenegotiation;\n // Check in case this function has been called before peer connection is set up\n // since that is necessary to try to update remote videos without the full resubscribe path\n needsRenegotiation || (needsRenegotiation = this.meetingSessionContext.peer === undefined);\n needsRenegotiation || (needsRenegotiation = !this.updateRemoteVideosFromPolicy());\n needsRenegotiation || (needsRenegotiation = !this.updateLocalVideoFromPolicy());\n // `MeetingSessionContext.lastVideosToReceive` needs to be updated regardless\n this.meetingSessionContext.lastVideosToReceive = this.meetingSessionContext.videosToReceive;\n if (!needsRenegotiation) {\n this.logger.info('Update request does not require resubscribe');\n // Call `actionFinishUpdating` to apply the new encoding parameters that may have been set in `updateLocalVideoFromPolicy`.\n this.actionFinishUpdating();\n return true; // Skip the subscribe!\n }\n this.logger.info('Update request requires resubscribe');\n const result = this.sessionStateController.perform(SessionStateControllerAction_1.default.Update, () => {\n this.actionUpdateWithRenegotiation(true);\n });\n return (result === SessionStateControllerTransitionResult_1.default.Transitioned ||\n result === SessionStateControllerTransitionResult_1.default.DeferredTransition);\n }\n // Depending on if using server-side bandwidth probing and if using server-side quality adaption,\n // decide if needs to send necessary updates, and if send through full renegotiaton.\n // It returns true if downlink policy took care of everything and no renegotiation needed.\n updateRemoteVideosFromPolicy() {\n if (this.meetingSessionContext.videoDownlinkBandwidthPolicy &&\n this.meetingSessionContext.videoDownlinkBandwidthPolicy.getVideoPreferences !== undefined &&\n this.meetingSessionContext.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption !==\n undefined &&\n !ServerSideNetworkAdaption_1.serverSideNetworkAdaptionIsNoneOrDefault(this.meetingSessionContext.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption())) {\n // Send up-to-date video preferences to server. This is fine if it includes remote sources/MIDs we need a full renegotiation for (i.e.\n // ones that were added or removed). We will re-include these updates in the subscribe.\n /* istanbul ignore if: Extremely unlikely that `videosToReceive` is null */\n if (!this.sendRemoteVideoUpdate()) {\n return false;\n }\n if (this.meetingSessionContext.videoDownlinkBandwidthPolicy.getServerSideNetworkAdaption() ===\n ServerSideNetworkAdaption_1.default.BandwidthProbingAndRemoteVideoQualityAdaption) {\n // If using server side remote video quality adaption (i.e. server is picking the encoding to send), we don't need\n // to do anything after sending the update, as long as we are not adding or removing streams, in which case\n // we need to complete a full renegotiation.\n return this.isNotAddingOrRemovingStreams();\n }\n }\n // If using client-side network adaptation, try skipping renegotitaiton if only simulcast stream swicth.\n return this.updateRemoteVideosIfNotAddingOrRemovingStreams();\n }\n // When `ServerSideNetworkAdaption.BandwidthProbingAndRemoteVideoQualityAdaption` has been signalled,\n // trigger server side video quality adaption logic through `SignalingClient.remoteVideoUpdate` and skip full subscribe.\n //\n // This function also tries to use the diff between `this.meetingSessionContext.lastVideosToReceive`\n // and `this.meetingSessionContext.videosToReceive` to determine if update is only simulcast stream switch,\n // which is accomplished through `SignalingClient.remoteVideoUpdate` rather than the full subscribe.\n //\n // It requires the caller to manage `this.meetingSessionContext.lastVideosToReceive`\n // and `this.meetingSessionContext.videosToReceive` so that `this.meetingSessionContext.lastVideosToReceive`\n // contains the stream IDs from either last time a subscribe was set, or last time this function was set.\n //\n // It will return true if successful, if false the caller must fall back to a full renegotiation\n updateRemoteVideosIfNotAddingOrRemovingStreams() {\n const streamChanges = this.detectChangesInVideosToReceive();\n /* istanbul ignore if: Extremely unlikely that `videosToReceive` is null or missing requisite functions and made it this far */\n if (streamChanges === undefined) {\n return false;\n }\n const added = streamChanges.added;\n const simulcastStreamUpdates = streamChanges.simulcastStreamUpdates;\n const removed = streamChanges.removed;\n const context = this.meetingSessionContext;\n const updatedVideoSubscriptionConfigurations = [];\n for (const [previousId, currentId] of simulcastStreamUpdates.entries()) {\n const updatedConfig = new SignalingClientVideoSubscriptionConfiguration_1.default();\n updatedConfig.streamId = currentId;\n updatedConfig.attendeeId = context.videoStreamIndex.attendeeIdForStreamId(currentId);\n updatedConfig.mid = context.transceiverController.getMidForStreamId(previousId);\n if (updatedConfig.mid === undefined) {\n this.logger.info(`No MID found for stream ID ${previousId}, cannot update stream without renegotiation`);\n return false;\n }\n updatedVideoSubscriptionConfigurations.push(updatedConfig);\n // We need to override some other components dependent on the subscribe paths for certain functionality\n context.transceiverController.setStreamIdForMid(updatedConfig.mid, currentId);\n context.videoStreamIndex.overrideStreamIdMappings(previousId, currentId);\n if (context.videoTileController.haveVideoTileForAttendeeId(updatedConfig.attendeeId)) {\n const tile = context.videoTileController.getVideoTileForAttendeeId(updatedConfig.attendeeId);\n if (!tile.setStreamId) {\n // Required function\n return false;\n }\n tile.setStreamId(currentId);\n }\n }\n // accomplish simulcast stream switches by sending removeVideoUpdate signaling frame instead of full renegotiation\n if (updatedVideoSubscriptionConfigurations.length !== 0) {\n context.signalingClient.remoteVideoUpdate(updatedVideoSubscriptionConfigurations, []);\n }\n // but cannot skip renegotiation if there are more changes than simulcast stream switch (i.e. add/remove/source switches)\n if (added.length !== 0 || removed.length !== 0) {\n return false;\n }\n // `updateRemoteVideosFromLastVideosToReceive` does not actually send a subscribe but it uses\n // `subscribeFrameSent` to cache the previous index so that we are able to do switches (not add/removes)\n // for simulcast stream layer changes. See `subscribeFrameSent` for more details.\n context.videoStreamIndex.subscribeFrameSent();\n return true;\n }\n detectChangesInVideosToReceive() {\n const context = this.meetingSessionContext;\n /* istanbul ignore next: Extremely unlikely that `videosToReceive` is null */\n if (context.videosToReceive === null) {\n return undefined;\n }\n // Check existence of all required dependencies and requisite functions\n if (!context.transceiverController ||\n !context.transceiverController.getMidForStreamId ||\n !context.transceiverController.setStreamIdForMid ||\n !context.videosToReceive.forEach ||\n !context.signalingClient.remoteVideoUpdate ||\n !context.videoStreamIndex.overrideStreamIdMappings) {\n return undefined;\n }\n let added = [];\n const simulcastStreamUpdates = new Map();\n let removed = [];\n if (context.lastVideosToReceive === null) {\n added = context.videosToReceive.array();\n }\n else {\n const index = context.videoStreamIndex;\n context.videosToReceive.forEach((currentId) => {\n if (context.lastVideosToReceive.contain(currentId)) {\n return;\n }\n // Check if group ID exists in previous set (i.e. simulcast stream switch)\n let foundUpdatedPreviousStreamId = false;\n context.lastVideosToReceive.forEach((previousId) => {\n if (foundUpdatedPreviousStreamId) {\n return; // Short circuit since we have already found it\n }\n if (index.StreamIdsInSameGroup(previousId, currentId)) {\n simulcastStreamUpdates.set(previousId, currentId);\n foundUpdatedPreviousStreamId = true;\n }\n });\n if (!foundUpdatedPreviousStreamId) {\n // Otherwise this must be a new stream\n added.push(currentId);\n }\n });\n removed = context.lastVideosToReceive.array().filter(idFromPrevious => {\n const stillReceiving = context.videosToReceive.contain(idFromPrevious);\n const isUpdated = simulcastStreamUpdates.has(idFromPrevious);\n return !stillReceiving && !isUpdated;\n });\n }\n this.logger.info(`Request to update remote videos with added: ${added}, updated: ${[\n ...simulcastStreamUpdates.entries(),\n ]}, removed: ${removed}`);\n return {\n added,\n removed,\n simulcastStreamUpdates,\n };\n }\n isNotAddingOrRemovingStreams() {\n const streamChanges = this.detectChangesInVideosToReceive();\n /* istanbul ignore if: Extremely unlikely that `videosToReceive` is null or missing requisite functions and made it this far */\n if (streamChanges === undefined) {\n return false;\n }\n const added = streamChanges.added;\n const removed = streamChanges.removed;\n // but cannot skip renegotiation if there are more changes than simulcast stream switch (i.e. add/remove/source switches)\n if (added.length !== 0 || removed.length !== 0) {\n return false;\n }\n return true;\n }\n // This funtion should be called only when any server side network adaption feature is enabled.\n // It sends `RemoteVideoUpdate` frame to server to update remote video preferences, which is needed for server side bandwidth probing.\n // The `RemoteVideoUpdate` signaling frame maybe also trigger server side video quality adaption if such feature has been signalled.\n //\n // It requires the caller to manage `this.meetingSessionContext.lastVideosToReceive`\n // and `this.meetingSessionContext.videosToReceive` so that `this.meetingSessionContext.lastVideosToReceive`\n // contains the stream IDs from either last time a subscribe was set, or last time this function was set.\n //\n // It will return false if not receiving any remote videos or found new video sources with MID not set yet.\n // It will return true if sent current preferences to server. It maybe also triggered server side quality adaption..\n sendRemoteVideoUpdate() {\n const context = this.meetingSessionContext;\n /* istanbul ignore next: Extremely unlikely that `videosToReceive` is null */\n if (context.videosToReceive === null) {\n return false;\n }\n const groupIdsToReceive = context.videosToReceive.array().map((streamId) => {\n return context.videoStreamIndex.groupIdForStreamId(streamId);\n });\n const currentConfigs = VideoPreferences_1.convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration(context, groupIdsToReceive, context.videoDownlinkBandwidthPolicy.getVideoPreferences());\n const newVideoSubscriptionConfigurationsMap = new Map();\n const addedOrUpdated = [];\n for (const config of currentConfigs) {\n let shouldIncludeInUpdate = false;\n if (!context.lastVideoSubscriptionConfiguration.has(config.groupId)) {\n shouldIncludeInUpdate = true;\n }\n else {\n const lastConfig = context.lastVideoSubscriptionConfiguration.get(config.groupId);\n if (!config.equals(lastConfig)) {\n this.logger.debug(`${JSON.stringify(config)} does not equal ${JSON.stringify(lastConfig)}, sending update`);\n shouldIncludeInUpdate = true;\n }\n }\n newVideoSubscriptionConfigurationsMap.set(config.groupId, config);\n if (shouldIncludeInUpdate) {\n addedOrUpdated.push(config);\n }\n }\n context.lastVideoSubscriptionConfiguration = newVideoSubscriptionConfigurationsMap;\n const removedMids = [];\n if (context.lastVideosToReceive !== null) {\n const groupIdsToReceiveSet = new Set(groupIdsToReceive);\n for (const streamId of context.lastVideosToReceive.array()) {\n const groupId = context.videoStreamIndex.groupIdForStreamId(streamId);\n if (!groupIdsToReceiveSet.has(groupId)) {\n const mid = context.transceiverController.getMidForGroupId(groupId);\n if (mid === undefined) {\n context.logger.warn(`Could not find MID for group ID to remove: ${groupId}`);\n continue;\n }\n removedMids.push(mid);\n }\n }\n }\n // pass updated preference configurations to server for server-side bandwdith padding/probing\n // additionally, trigger server-side video quality adaption if enabed\n if (addedOrUpdated.length !== 0 || removedMids.length !== 0) {\n context.signalingClient.remoteVideoUpdate(addedOrUpdated, removedMids);\n }\n return true;\n }\n updateLocalVideoFromPolicy() {\n // Try updating parameters without renegotiation\n if (this.meetingSessionContext.enableSimulcast) {\n // The following may result in `this.mayNeedRenegotiationForSimulcastLayerChange` being switched on\n const encodingParam = this.meetingSessionContext.videoUplinkBandwidthPolicy.chooseEncodingParameters();\n if (this.mayNeedRenegotiationForSimulcastLayerChange &&\n !this.negotiatedBitrateLayersAllocationRtpHeaderExtension()) {\n this.logger.info('Needs regenotiation for local video simulcast layer change');\n this.mayNeedRenegotiationForSimulcastLayerChange = false;\n return false;\n }\n this.meetingSessionContext.transceiverController.setEncodingParameters(encodingParam);\n }\n else {\n this.meetingSessionContext.videoCaptureAndEncodeParameter = this.meetingSessionContext.videoUplinkBandwidthPolicy.chooseCaptureAndEncodeParameters();\n // Bitrate will be set in `actionFinishUpdating`. This should never need a resubscribe.\n }\n this.logger.info('Updated local video from policy without renegotiation');\n return true;\n }\n negotiatedBitrateLayersAllocationRtpHeaderExtension() {\n if (!this.meetingSessionContext.transceiverController.localVideoTransceiver()) {\n return false;\n }\n const parameters = this.meetingSessionContext.transceiverController\n .localVideoTransceiver()\n .sender.getParameters();\n if (!parameters || !parameters.headerExtensions) {\n return false;\n }\n return parameters.headerExtensions.some(extension => extension.uri === 'http://www.webrtc.org/experiments/rtp-hdrext/video-layers-allocation00');\n }\n restartLocalVideo(callback) {\n const restartVideo = () => __awaiter(this, void 0, void 0, function* () {\n if (this._videoTileController.hasStartedLocalVideoTile()) {\n this.logger.info('stopping local video tile prior to local video restart');\n this._videoTileController.stopLocalVideoTile();\n this.logger.info('preparing local video restart update');\n yield this.actionUpdateWithRenegotiation(false);\n this.logger.info('starting local video tile for local video restart');\n this._videoTileController.startLocalVideoTile();\n }\n this.logger.info('finalizing local video restart update');\n yield this.actionUpdateWithRenegotiation(true);\n callback();\n });\n const result = this.sessionStateController.perform(SessionStateControllerAction_1.default.Update, () => {\n restartVideo();\n });\n return (result === SessionStateControllerTransitionResult_1.default.Transitioned ||\n result === SessionStateControllerTransitionResult_1.default.DeferredTransition);\n }\n replaceLocalVideo(videoStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!videoStream || videoStream.getVideoTracks().length < 1) {\n throw new Error('could not acquire video track');\n }\n if (!this.meetingSessionContext || !this.meetingSessionContext.peer) {\n throw new Error('no active meeting and peer connection');\n }\n // if there is a local tile, a video tile update event should be fired.\n const localTile = this.meetingSessionContext.videoTileController.getLocalVideoTile();\n if (localTile) {\n const state = localTile.state();\n const settings = videoStream.getVideoTracks()[0].getSettings();\n // so tile update wil be fired.\n localTile.bindVideoStream(state.boundAttendeeId, true, videoStream, settings.width, settings.height, state.streamId, state.boundExternalUserId);\n }\n yield this.meetingSessionContext.transceiverController.setVideoInput(videoStream.getVideoTracks()[0]);\n // Update the active video input on subscription context to match what we just changed\n // so that subsequent meeting actions can reuse and destroy it.\n this.meetingSessionContext.activeVideoInput = videoStream;\n this.logger.info('Local video input is updated');\n });\n }\n replaceLocalAudio(audioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!audioStream || audioStream.getAudioTracks().length < 1) {\n throw new Error('could not acquire audio track');\n }\n if (!this.meetingSessionContext || !this.meetingSessionContext.peer) {\n throw new Error('no active meeting and peer connection');\n }\n this.connectionHealthData.reset();\n this.connectionHealthData.setConnectionStartTime();\n const replaceTrackSuccess = yield this.meetingSessionContext.transceiverController.replaceAudioTrack(audioStream.getAudioTracks()[0]);\n if (!replaceTrackSuccess) {\n throw new Error('Failed to replace audio track');\n }\n this.meetingSessionContext.activeAudioInput = audioStream;\n this.logger.info('Local audio input is updated');\n });\n }\n actionUpdateWithRenegotiation(notify) {\n return __awaiter(this, void 0, void 0, function* () {\n // See declaration (unpaused in actionFinishUpdating)\n // The operations in `update` do not need this protection because they are synchronous.\n this.monitorTask.pauseResubscribeCheck();\n this.receiveIndexTask.pauseIngestion();\n // TODO: do not block other updates while waiting for video input\n try {\n yield new SerialGroupTask_1.default(this.logger, this.wrapTaskName('AudioVideoUpdate'), [\n new ReceiveVideoInputTask_1.default(this.meetingSessionContext),\n new TimeoutTask_1.default(this.logger, new SerialGroupTask_1.default(this.logger, 'UpdateSession', [\n new AttachMediaInputTask_1.default(this.meetingSessionContext),\n new CreateSDPTask_1.default(this.meetingSessionContext),\n new SetLocalDescriptionTask_1.default(this.meetingSessionContext),\n new FinishGatheringICECandidatesTask_1.default(this.meetingSessionContext),\n new SubscribeAndReceiveSubscribeAckTask_1.default(this.meetingSessionContext),\n new SetRemoteDescriptionTask_1.default(this.meetingSessionContext),\n ]), this.configuration.connectionTimeoutMs),\n ]).run();\n if (notify) {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishUpdating, () => {\n this.actionFinishUpdating();\n });\n }\n }\n catch (error) {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishUpdating, () => {\n const status = new MeetingSessionStatus_1.default(this.getMeetingStatusCode(error) || MeetingSessionStatusCode_1.default.TaskFailed);\n if (status.statusCode() !== MeetingSessionStatusCode_1.default.IncompatibleSDP) {\n this.logger.info('failed to update audio-video session');\n }\n this.handleMeetingSessionStatus(status, error);\n });\n }\n });\n }\n notifyStop(status, error) {\n var _a;\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.audioVideoDidStop).map(f => f.bind(observer)(status));\n });\n if (this.promotedToPrimaryMeeting && error) {\n this.forEachObserver(observer => {\n this.promotedToPrimaryMeeting = false;\n Types_1.Maybe.of(observer.audioVideoWasDemotedFromPrimaryMeeting).map(f => f.bind(observer)(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.SignalingInternalServerError)));\n });\n }\n /* istanbul ignore else */\n if (this.eventController) {\n const { signalingOpenDurationMs, poorConnectionCount, startTimeMs, iceGatheringDurationMs, attendeePresenceDurationMs, meetingStartDurationMs, } = this.meetingSessionContext;\n const attributes = {\n maxVideoTileCount: this.meetingSessionContext.maxVideoTileCount,\n meetingDurationMs: startTimeMs === null ? 0 : Math.round(Date.now() - startTimeMs),\n meetingStatus: MeetingSessionStatusCode_1.default[status.statusCode()],\n signalingOpenDurationMs,\n iceGatheringDurationMs,\n attendeePresenceDurationMs,\n poorConnectionCount,\n meetingStartDurationMs,\n retryCount: this.totalRetryCount,\n };\n /* istanbul ignore next: toString is optional */\n const meetingErrorMessage = (error && error.message) || ((_a = status.toString) === null || _a === void 0 ? void 0 : _a.call(status)) || '';\n if (attributes.meetingDurationMs === 0) {\n attributes.meetingErrorMessage = meetingErrorMessage;\n delete attributes.meetingDurationMs;\n delete attributes.attendeePresenceDurationMs;\n delete attributes.meetingStartDurationMs;\n this.eventController.publishEvent('meetingStartFailed', attributes);\n }\n else if (status.isFailure() || status.isAudioConnectionFailure()) {\n attributes.meetingErrorMessage = meetingErrorMessage;\n this.eventController.publishEvent('meetingFailed', attributes);\n }\n else {\n this.eventController.publishEvent('meetingEnded', attributes);\n }\n }\n }\n actionFinishUpdating() {\n // we do not update parameter for simulcast since they are updated in AttachMediaInputTask\n if (!this.meetingSessionContext.enableSimulcast) {\n if (this.useUpdateTransceiverControllerForUplink) {\n this.meetingSessionContext.videoUplinkBandwidthPolicy.updateTransceiverController();\n }\n else {\n const maxBitrateKbps = this.meetingSessionContext.videoCaptureAndEncodeParameter.encodeBitrates()[0];\n this.enforceBandwidthLimitationForSender(maxBitrateKbps);\n }\n }\n this.monitorTask.resumeResubscribeCheck();\n this.receiveIndexTask.resumeIngestion();\n this.logger.info('updated audio-video session');\n }\n reconnect(status, error) {\n const willRetry = this._reconnectController.retryWithBackoff(() => __awaiter(this, void 0, void 0, function* () {\n if (this.sessionStateController.state() === SessionStateControllerState_1.default.NotConnected) {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Connect, () => {\n this.actionConnect(true);\n });\n }\n else {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Reconnect, () => {\n this.actionReconnect(status);\n });\n }\n this.totalRetryCount += 1;\n }), () => {\n this.logger.info('canceled retry');\n });\n if (!willRetry) {\n this.sessionStateController.perform(SessionStateControllerAction_1.default.Fail, () => {\n this.actionDisconnect(status, false, error);\n });\n }\n return willRetry;\n }\n actionReconnect(status) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._reconnectController.hasStartedConnectionAttempt()) {\n this._reconnectController.startedConnectionAttempt(false);\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.audioVideoDidStartConnecting).map(f => f.bind(observer)(true));\n });\n }\n this.meetingSessionContext.volumeIndicatorAdapter.onReconnect();\n this.connectionHealthData.reset();\n try {\n yield new SerialGroupTask_1.default(this.logger, this.wrapTaskName('AudioVideoReconnect'), [\n new TimeoutTask_1.default(this.logger, new SerialGroupTask_1.default(this.logger, 'Media', [\n new CleanRestartedSessionTask_1.default(this.meetingSessionContext),\n new SerialGroupTask_1.default(this.logger, 'Signaling', [\n new OpenSignalingConnectionTask_1.default(this.meetingSessionContext),\n new JoinAndReceiveIndexTask_1.default(this.meetingSessionContext),\n ]),\n new CreatePeerConnectionTask_1.default(this.meetingSessionContext),\n ]), this.configuration.connectionTimeoutMs),\n // TODO: Do we need ReceiveVideoInputTask in the reconnect operation?\n new ReceiveVideoInputTask_1.default(this.meetingSessionContext),\n new TimeoutTask_1.default(this.logger, new SerialGroupTask_1.default(this.logger, 'UpdateSession', [\n new AttachMediaInputTask_1.default(this.meetingSessionContext),\n new CreateSDPTask_1.default(this.meetingSessionContext),\n new SetLocalDescriptionTask_1.default(this.meetingSessionContext),\n new FinishGatheringICECandidatesTask_1.default(this.meetingSessionContext),\n new SubscribeAndReceiveSubscribeAckTask_1.default(this.meetingSessionContext),\n new SetRemoteDescriptionTask_1.default(this.meetingSessionContext),\n ]), this.configuration.connectionTimeoutMs),\n ]).run();\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishConnecting, () => {\n /* istanbul ignore else */\n if (this.eventController) {\n const { signalingOpenDurationMs, poorConnectionCount, startTimeMs, iceGatheringDurationMs, attendeePresenceDurationMs, meetingStartDurationMs, } = this.meetingSessionContext;\n const attributes = {\n maxVideoTileCount: this.meetingSessionContext.maxVideoTileCount,\n meetingDurationMs: Math.round(Date.now() - startTimeMs),\n meetingStatus: MeetingSessionStatusCode_1.default[status.statusCode()],\n signalingOpenDurationMs,\n iceGatheringDurationMs,\n attendeePresenceDurationMs,\n poorConnectionCount,\n meetingStartDurationMs,\n retryCount: this.totalRetryCount,\n };\n this.eventController.publishEvent('meetingReconnected', attributes);\n }\n this.actionFinishConnecting();\n });\n }\n catch (error) {\n // To perform the \"Reconnect\" action again, the session should be in the \"Connected\" state.\n this.sessionStateController.perform(SessionStateControllerAction_1.default.FinishConnecting, () => {\n this.logger.info('failed to reconnect audio-video session');\n const status = new MeetingSessionStatus_1.default(this.getMeetingStatusCode(error) || MeetingSessionStatusCode_1.default.TaskFailed);\n this.handleMeetingSessionStatus(status, error);\n });\n }\n this.connectionHealthData.setConnectionStartTime();\n });\n }\n wrapTaskName(taskName) {\n return `${taskName}/${this.configuration.meetingId}/${this.configuration.credentials.attendeeId}`;\n }\n cleanUpMediaStreamsAfterStop() {\n this._mediaStreamBroker.removeMediaStreamBrokerObserver(this);\n this.meetingSessionContext.activeAudioInput = undefined;\n this.meetingSessionContext.activeVideoInput = undefined;\n }\n // Extract the meeting status from `Error.message`, relying on specific phrasing\n // 'the meeting status code ${CODE}`.\n //\n // e.g. reject(new Error(\n // `canceling ${this.name()} due to the meeting status code: ${MeetingSessionStatusCode.MeetingEnded}`));\n getMeetingStatusCode(error) {\n const matched = /the meeting status code: (\\d+)/.exec(error && error.message);\n if (matched && matched.length > 1) {\n return Number.parseInt(matched[1], 10);\n }\n return null;\n }\n enforceBandwidthLimitationForSender(maxBitrateKbps) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.meetingSessionContext.transceiverController.setVideoSendingBitrateKbps(maxBitrateKbps);\n });\n }\n handleMeetingSessionStatus(status, error) {\n this.logger.info(`handling status: ${MeetingSessionStatusCode_1.default[status.statusCode()]}`);\n if (!status.isTerminal()) {\n if (this.meetingSessionContext.statsCollector) {\n this.meetingSessionContext.statsCollector.logMeetingSessionStatus(status);\n }\n }\n if (status.statusCode() === MeetingSessionStatusCode_1.default.IncompatibleSDP) {\n this.restartLocalVideo(() => {\n this.logger.info('handled incompatible SDP by attempting to restart video');\n });\n return true;\n }\n if (status.statusCode() === MeetingSessionStatusCode_1.default.VideoCallSwitchToViewOnly) {\n this._videoTileController.removeLocalVideoTile();\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.videoSendDidBecomeUnavailable).map(f => f.bind(observer)());\n });\n return false;\n }\n if (status.statusCode() === MeetingSessionStatusCode_1.default.AudioVideoWasRemovedFromPrimaryMeeting) {\n this.forEachObserver((observer) => {\n Types_1.Maybe.of(observer.audioVideoWasDemotedFromPrimaryMeeting).map(f => f.bind(observer)(status));\n });\n return false;\n }\n if (status.isTerminal()) {\n this.logger.error('session will not be reconnected');\n if (this.meetingSessionContext.reconnectController) {\n this.meetingSessionContext.reconnectController.disableReconnect();\n }\n }\n if (status.isFailure() || status.isTerminal()) {\n if (this.meetingSessionContext.reconnectController) {\n const willRetry = this.reconnect(status, error);\n if (willRetry) {\n this.logger.warn(`will retry due to status code ${MeetingSessionStatusCode_1.default[status.statusCode()]}${error ? ` and error: ${error.message}` : ``}`);\n }\n else {\n this.logger.error(`failed with status code ${MeetingSessionStatusCode_1.default[status.statusCode()]}${error ? ` and error: ${error.message}` : ``}`);\n }\n return willRetry;\n }\n }\n return false;\n }\n setVideoMaxBandwidthKbps(maxBandwidthKbps) {\n if (maxBandwidthKbps <= 0) {\n throw new Error('Max bandwidth kbps has to be greater than 0');\n }\n if (this.meetingSessionContext && this.meetingSessionContext.videoUplinkBandwidthPolicy) {\n this.logger.info(`video send has ideal max bandwidth ${maxBandwidthKbps} kbps`);\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setIdealMaxBandwidthKbps(maxBandwidthKbps);\n }\n this.maxUplinkBandwidthKbps = maxBandwidthKbps;\n }\n handleHasBandwidthPriority(hasBandwidthPriority) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.meetingSessionContext &&\n this.meetingSessionContext.videoUplinkBandwidthPolicy &&\n !this.meetingSessionContext.enableSimulcast) {\n if (this.useUpdateTransceiverControllerForUplink) {\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setHasBandwidthPriority(hasBandwidthPriority);\n yield this.meetingSessionContext.videoUplinkBandwidthPolicy.updateTransceiverController();\n return;\n }\n const oldMaxBandwidth = this.meetingSessionContext.videoUplinkBandwidthPolicy.maxBandwidthKbps();\n this.meetingSessionContext.videoUplinkBandwidthPolicy.setHasBandwidthPriority(hasBandwidthPriority);\n const newMaxBandwidth = this.meetingSessionContext.videoUplinkBandwidthPolicy.maxBandwidthKbps();\n if (oldMaxBandwidth !== newMaxBandwidth) {\n this.logger.info(`video send bandwidth priority ${hasBandwidthPriority} max has changed from ${oldMaxBandwidth} kbps to ${newMaxBandwidth} kbps`);\n yield this.enforceBandwidthLimitationForSender(newMaxBandwidth);\n }\n }\n });\n }\n pauseReceivingStream(streamId) {\n if (!!this.meetingSessionContext && this.meetingSessionContext.signalingClient) {\n this.meetingSessionContext.signalingClient.pause([streamId]);\n }\n }\n resumeReceivingStream(streamId) {\n if (!!this.meetingSessionContext && this.meetingSessionContext.signalingClient) {\n this.meetingSessionContext.signalingClient.resume([streamId]);\n }\n }\n setVideoCodecSendPreferences(preferences) {\n this.videoSendCodecPreferences = preferences; // In case we haven't called `initSignalingClient` yet\n this.meetingSessionContext.videoSendCodecPreferences = preferences;\n if (this.sessionStateController.state() !== SessionStateControllerState_1.default.NotConnected) {\n this.update({ needsRenegotiation: true });\n }\n }\n getRemoteVideoSources() {\n const { videoStreamIndex } = this.meetingSessionContext;\n if (!videoStreamIndex) {\n this.logger.info('meeting has not started');\n return [];\n }\n const selfAttendeeId = this.configuration.credentials.attendeeId;\n return videoStreamIndex.allVideoSendingSourcesExcludingSelf(selfAttendeeId);\n }\n encodingSimulcastLayersDidChange(simulcastLayers) {\n this.mayNeedRenegotiationForSimulcastLayerChange = true;\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.encodingSimulcastLayersDidChange).map(f => f.bind(observer)(simulcastLayers));\n });\n }\n promoteToPrimaryMeeting(credentials) {\n return this.actionPromoteToPrimaryMeeting(credentials);\n }\n actionPromoteToPrimaryMeeting(credentials) {\n return __awaiter(this, void 0, void 0, function* () {\n let resultingStatus = new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.SignalingRequestFailed);\n yield new SerialGroupTask_1.default(this.logger, this.wrapTaskName('PromoteToPrimaryMeeting'), [\n new TimeoutTask_1.default(this.logger, new PromoteToPrimaryMeetingTask_1.default(this.meetingSessionContext, credentials, (status) => {\n resultingStatus = status;\n }), this.configuration.connectionTimeoutMs),\n ]).run();\n this.promotedToPrimaryMeeting = resultingStatus.statusCode() === MeetingSessionStatusCode_1.default.OK;\n return resultingStatus;\n });\n }\n demoteFromPrimaryMeeting() {\n this.meetingSessionContext.signalingClient.demoteFromPrimaryMeeting();\n this.forEachObserver(observer => {\n Types_1.Maybe.of(observer.audioVideoWasDemotedFromPrimaryMeeting).map(f => f.bind(observer)(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.OK)));\n });\n }\n videoInputDidChange(videoStream) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info('Receive a video input change event');\n // No active meeting, there is nothing to do\n if (!this.meetingSessionContext || !this.meetingSessionContext.peer) {\n this.logger.info('Skip updating video input because there is no active meeting and peer connection');\n return;\n }\n if (this._videoTileController.hasStartedLocalVideoTile()) {\n if (videoStream) {\n yield this.replaceLocalVideo(videoStream);\n }\n else {\n this._videoTileController.stopLocalVideoTile();\n }\n }\n });\n }\n audioInputDidChange(audioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info('Receive an audio input change event');\n // No active meeting, there is nothing to do\n if (!this.meetingSessionContext || !this.meetingSessionContext.peer) {\n this.logger.info('Skip updating audio input because there is no active meeting and peer connection');\n return;\n }\n if (!audioStream) {\n // If audio input stream stopped, try to get empty audio device from media stream broker\n try {\n audioStream = yield this.mediaStreamBroker.acquireAudioInputStream();\n }\n catch (error) {\n this.logger.error('Could not acquire audio track from mediaStreamBroker');\n return;\n }\n }\n yield this.replaceLocalAudio(audioStream);\n });\n }\n}\nexports.default = DefaultAudioVideoController;\nDefaultAudioVideoController.MIN_VOLUME_DECIBELS = -42;\nDefaultAudioVideoController.MAX_VOLUME_DECIBELS = -14;\nDefaultAudioVideoController.PING_PONG_INTERVAL_MS = 10000;\n//# sourceMappingURL=DefaultAudioVideoController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst VideoTransformDevice_1 = require(\"../devicecontroller/VideoTransformDevice\");\nclass DefaultAudioVideoFacade {\n constructor(audioVideoController, videoTileController, realtimeController, audioMixController, deviceController, contentShareController) {\n this.audioVideoController = audioVideoController;\n this.videoTileController = videoTileController;\n this.realtimeController = realtimeController;\n this.audioMixController = audioMixController;\n this.deviceController = deviceController;\n this.contentShareController = contentShareController;\n }\n addObserver(observer) {\n this.audioVideoController.addObserver(observer);\n this.trace('addObserver');\n }\n removeObserver(observer) {\n this.audioVideoController.removeObserver(observer);\n this.trace('removeObserver');\n }\n setAudioProfile(audioProfile) {\n this.trace('setAudioProfile', audioProfile);\n this.audioVideoController.setAudioProfile(audioProfile);\n }\n start(options) {\n this.audioVideoController.start(options);\n this.trace('start');\n }\n stop() {\n this.audioVideoController.stop();\n this.trace('stop');\n }\n /**\n * This API will be deprecated in favor of `ClientMetricReport.getRTCStatsReport()`.\n *\n * It makes an additional call to the `getStats` API and therefore may cause slight performance degradation.\n *\n * Please subscribe to `metricsDidReceive(clientMetricReport: ClientMetricReport)` callback,\n * and get the raw `RTCStatsReport` via `clientMetricReport.getRTCStatsReport()`.\n */\n getRTCPeerConnectionStats(selector) {\n this.trace('getRTCPeerConnectionStats', selector ? selector.id : null);\n return this.audioVideoController.getRTCPeerConnectionStats(selector);\n }\n bindAudioElement(element) {\n const result = this.audioMixController.bindAudioElement(element);\n this.trace('bindAudioElement', element.id, result);\n return result;\n }\n unbindAudioElement() {\n this.audioMixController.unbindAudioElement();\n this.trace('unbindAudioElement');\n }\n getCurrentMeetingAudioStream() {\n this.trace('getCurrentConferenceStream');\n return this.audioMixController.getCurrentMeetingAudioStream();\n }\n addAudioMixObserver(observer) {\n this.trace('addAudioMixObserver');\n this.audioMixController.addAudioMixObserver(observer);\n }\n removeAudioMixObserver(observer) {\n this.trace('removeAudioMixObserver');\n this.audioMixController.removeAudioMixObserver(observer);\n }\n bindVideoElement(tileId, videoElement) {\n this.videoTileController.bindVideoElement(tileId, videoElement);\n this.trace('bindVideoElement', { tileId: tileId, videoElementId: videoElement.id });\n }\n unbindVideoElement(tileId, cleanUpVideoElement = true) {\n this.videoTileController.unbindVideoElement(tileId, cleanUpVideoElement);\n this.trace('unbindVideoElement', { tileId: tileId, cleanUpVideoElement: cleanUpVideoElement });\n }\n startLocalVideoTile() {\n const result = this.videoTileController.startLocalVideoTile();\n this.trace('startLocalVideoTile', null, result);\n return result;\n }\n stopLocalVideoTile() {\n this.videoTileController.stopLocalVideoTile();\n this.trace('stopLocalVideoTile');\n }\n hasStartedLocalVideoTile() {\n const result = this.videoTileController.hasStartedLocalVideoTile();\n this.trace('hasStartedLocalVideoTile', null, result);\n return result;\n }\n removeLocalVideoTile() {\n this.videoTileController.removeLocalVideoTile();\n this.trace('removeLocalVideoTile');\n }\n getLocalVideoTile() {\n const result = this.videoTileController.getLocalVideoTile();\n this.trace('getLocalVideoTile');\n return result;\n }\n pauseVideoTile(tileId) {\n this.videoTileController.pauseVideoTile(tileId);\n this.trace('pauseVideoTile', tileId);\n }\n unpauseVideoTile(tileId) {\n this.videoTileController.unpauseVideoTile(tileId);\n this.trace('unpauseVideoTile', tileId);\n }\n getVideoTile(tileId) {\n const result = this.videoTileController.getVideoTile(tileId);\n this.trace('getVideoTile', tileId);\n return result;\n }\n getAllRemoteVideoTiles() {\n const result = this.videoTileController.getAllRemoteVideoTiles();\n this.trace('getAllRemoteVideoTiles');\n return result;\n }\n getAllVideoTiles() {\n const result = this.videoTileController.getAllVideoTiles();\n this.trace('getAllVideoTiles');\n return result;\n }\n addVideoTile() {\n const result = this.videoTileController.addVideoTile();\n this.trace('addVideoTile', null, result.state());\n return result;\n }\n removeVideoTile(tileId) {\n this.videoTileController.removeVideoTile(tileId);\n this.trace('removeVideoTile', tileId);\n }\n removeVideoTilesByAttendeeId(attendeeId) {\n const result = this.videoTileController.removeVideoTilesByAttendeeId(attendeeId);\n this.trace('removeVideoTilesByAttendeeId', attendeeId, result);\n return result;\n }\n removeAllVideoTiles() {\n this.videoTileController.removeAllVideoTiles();\n this.trace('removeAllVideoTiles');\n }\n captureVideoTile(tileId) {\n const result = this.videoTileController.captureVideoTile(tileId);\n this.trace('captureVideoTile', tileId);\n return result;\n }\n realtimeSubscribeToAttendeeIdPresence(callback) {\n this.realtimeController.realtimeSubscribeToAttendeeIdPresence(callback);\n this.trace('realtimeSubscribeToAttendeeIdPresence');\n }\n realtimeUnsubscribeToAttendeeIdPresence(callback) {\n this.realtimeController.realtimeUnsubscribeToAttendeeIdPresence(callback);\n this.trace('realtimeUnsubscribeToAttendeeIdPresence');\n }\n realtimeSetCanUnmuteLocalAudio(canUnmute) {\n this.realtimeController.realtimeSetCanUnmuteLocalAudio(canUnmute);\n this.trace('realtimeSetCanUnmuteLocalAudio', canUnmute);\n }\n realtimeSubscribeToSetCanUnmuteLocalAudio(callback) {\n this.realtimeController.realtimeSubscribeToSetCanUnmuteLocalAudio(callback);\n this.trace('realtimeSubscribeToSetCanUnmuteLocalAudio');\n }\n realtimeUnsubscribeToSetCanUnmuteLocalAudio(callback) {\n this.realtimeController.realtimeUnsubscribeToSetCanUnmuteLocalAudio(callback);\n this.trace('realtimeUnsubscribeToSetCanUnmuteLocalAudio');\n }\n realtimeCanUnmuteLocalAudio() {\n const result = this.realtimeController.realtimeCanUnmuteLocalAudio();\n this.trace('realtimeCanUnmuteLocalAudio', null, result);\n return result;\n }\n realtimeMuteLocalAudio() {\n this.realtimeController.realtimeMuteLocalAudio();\n this.trace('realtimeMuteLocalAudio');\n }\n realtimeUnmuteLocalAudio() {\n const result = this.realtimeController.realtimeUnmuteLocalAudio();\n this.trace('realtimeUnmuteLocalAudio');\n return result;\n }\n realtimeSubscribeToMuteAndUnmuteLocalAudio(callback) {\n this.realtimeController.realtimeSubscribeToMuteAndUnmuteLocalAudio(callback);\n this.trace('realtimeSubscribeToMuteAndUnmuteLocalAudio');\n }\n realtimeUnsubscribeToMuteAndUnmuteLocalAudio(callback) {\n this.realtimeController.realtimeUnsubscribeToMuteAndUnmuteLocalAudio(callback);\n this.trace('realtimeUnsubscribeToMuteAndUnmuteLocalAudio');\n }\n realtimeIsLocalAudioMuted() {\n const result = this.realtimeController.realtimeIsLocalAudioMuted();\n this.trace('realtimeIsLocalAudioMuted');\n return result;\n }\n realtimeSubscribeToVolumeIndicator(attendeeId, callback) {\n this.realtimeController.realtimeSubscribeToVolumeIndicator(attendeeId, callback);\n this.trace('realtimeSubscribeToVolumeIndicator', attendeeId);\n }\n realtimeUnsubscribeFromVolumeIndicator(attendeeId, callback) {\n this.realtimeController.realtimeUnsubscribeFromVolumeIndicator(attendeeId, callback);\n this.trace('realtimeUnsubscribeFromVolumeIndicator', attendeeId, callback);\n }\n realtimeSubscribeToLocalSignalStrengthChange(callback) {\n this.realtimeController.realtimeSubscribeToLocalSignalStrengthChange(callback);\n this.trace('realtimeSubscribeToLocalSignalStrengthChange');\n }\n realtimeUnsubscribeToLocalSignalStrengthChange(callback) {\n this.realtimeController.realtimeUnsubscribeToLocalSignalStrengthChange(callback);\n this.trace('realtimeUnsubscribeToLocalSignalStrengthChange');\n }\n realtimeSendDataMessage(topic, // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data, lifetimeMs) {\n this.realtimeController.realtimeSendDataMessage(topic, data, lifetimeMs);\n this.trace('realtimeSendDataMessage');\n }\n realtimeSubscribeToReceiveDataMessage(topic, callback) {\n this.realtimeController.realtimeSubscribeToReceiveDataMessage(topic, callback);\n this.trace('realtimeSubscribeToReceiveDataMessage');\n }\n realtimeUnsubscribeFromReceiveDataMessage(topic) {\n this.realtimeController.realtimeUnsubscribeFromReceiveDataMessage(topic);\n this.trace('realtimeUnsubscribeFromReceiveDataMessage');\n }\n realtimeSubscribeToFatalError(callback) {\n this.realtimeController.realtimeSubscribeToFatalError(callback);\n this.trace('realtimeSubscribeToFatalError');\n }\n realtimeUnsubscribeToFatalError(callback) {\n this.realtimeController.realtimeUnsubscribeToFatalError(callback);\n this.trace('realtimeUnsubscribeToFatalError');\n }\n subscribeToActiveSpeakerDetector(policy, callback, scoresCallback, scoresCallbackIntervalMs) {\n this.audioVideoController.activeSpeakerDetector.subscribe(policy, callback, scoresCallback, scoresCallbackIntervalMs);\n this.trace('subscribeToActiveSpeakerDetector');\n }\n unsubscribeFromActiveSpeakerDetector(callback) {\n this.audioVideoController.activeSpeakerDetector.unsubscribe(callback);\n this.trace('unsubscribeFromActiveSpeakerDetector');\n }\n listAudioInputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.deviceController.listAudioInputDevices(forceUpdate);\n this.trace('listAudioInputDevices', forceUpdate, result);\n return result;\n });\n }\n listVideoInputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.deviceController.listVideoInputDevices(forceUpdate);\n this.trace('listVideoInputDevices', forceUpdate, result);\n return result;\n });\n }\n listAudioOutputDevices(forceUpdate = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this.deviceController.listAudioOutputDevices(forceUpdate);\n this.trace('listAudioOutputDevices', forceUpdate, result);\n return result;\n });\n }\n startAudioInput(device) {\n return __awaiter(this, void 0, void 0, function* () {\n this.trace('startAudioInput', device);\n return this.deviceController.startAudioInput(device);\n });\n }\n stopAudioInput() {\n return __awaiter(this, void 0, void 0, function* () {\n this.trace('stopAudioInput');\n return this.deviceController.stopAudioInput();\n });\n }\n startVideoInput(device) {\n return __awaiter(this, void 0, void 0, function* () {\n if (VideoTransformDevice_1.isVideoTransformDevice(device)) {\n // Don't stringify the device to avoid failures when cyclic object references are present.\n this.trace('startVideoInput with transform device');\n }\n else {\n this.trace('startVideoInput', device);\n }\n return this.deviceController.startVideoInput(device);\n });\n }\n stopVideoInput() {\n return __awaiter(this, void 0, void 0, function* () {\n this.trace('stopVideoInput');\n return this.deviceController.stopVideoInput();\n });\n }\n chooseAudioOutput(deviceId) {\n const result = this.deviceController.chooseAudioOutput(deviceId);\n this.trace('chooseAudioOutput', deviceId);\n return result;\n }\n addDeviceChangeObserver(observer) {\n this.deviceController.addDeviceChangeObserver(observer);\n this.trace('addDeviceChangeObserver');\n }\n removeDeviceChangeObserver(observer) {\n this.deviceController.removeDeviceChangeObserver(observer);\n this.trace('removeDeviceChangeObserver');\n }\n createAnalyserNodeForAudioInput() {\n const result = this.deviceController.createAnalyserNodeForAudioInput();\n this.trace('createAnalyserNodeForAudioInput');\n return result;\n }\n startVideoPreviewForVideoInput(element) {\n this.deviceController.startVideoPreviewForVideoInput(element);\n this.trace('startVideoPreviewForVideoInput', element.id);\n }\n stopVideoPreviewForVideoInput(element) {\n this.deviceController.stopVideoPreviewForVideoInput(element);\n this.trace('stopVideoPreviewForVideoInput', element.id);\n }\n setDeviceLabelTrigger(trigger) {\n this.deviceController.setDeviceLabelTrigger(trigger);\n this.trace('setDeviceLabelTrigger');\n }\n mixIntoAudioInput(stream) {\n const result = this.deviceController.mixIntoAudioInput(stream);\n this.trace('mixIntoAudioInput', stream.id);\n return result;\n }\n chooseVideoInputQuality(width, height, frameRate) {\n this.deviceController.chooseVideoInputQuality(width, height, frameRate);\n this.trace('chooseVideoInputQuality', {\n width: width,\n height: height,\n frameRate: frameRate,\n });\n }\n setVideoMaxBandwidthKbps(maxBandwidthKbps) {\n this.audioVideoController.setVideoMaxBandwidthKbps(maxBandwidthKbps);\n this.trace('setVideoMaxBandwidthKbps', maxBandwidthKbps);\n }\n setVideoCodecSendPreferences(preferences) {\n this.audioVideoController.setVideoCodecSendPreferences(preferences);\n this.trace('setVideoCodecSendPreferences', preferences);\n }\n getVideoInputQualitySettings() {\n const result = this.deviceController.getVideoInputQualitySettings();\n this.trace('getVideoInputQualitySettings');\n return result;\n }\n setContentAudioProfile(audioProfile) {\n this.trace('setContentAudioProfile', audioProfile);\n this.contentShareController.setContentAudioProfile(audioProfile);\n }\n enableSimulcastForContentShare(enable, encodingParams) {\n this.trace('enableSimulcastForContentShare');\n this.contentShareController.enableSimulcastForContentShare(enable, encodingParams);\n }\n enableSVCForContentShare(enable) {\n this.trace('enableSVCForContentShare');\n this.contentShareController.enableSVCForContentShare(enable);\n }\n startContentShare(stream) {\n const result = this.contentShareController.startContentShare(stream);\n this.trace('startContentShare');\n return result;\n }\n startContentShareFromScreenCapture(sourceId, frameRate) {\n const result = this.contentShareController.startContentShareFromScreenCapture(sourceId, frameRate);\n this.trace('startContentShareFromScreenCapture');\n return result;\n }\n pauseContentShare() {\n this.contentShareController.pauseContentShare();\n this.trace('pauseContentShare');\n }\n unpauseContentShare() {\n this.contentShareController.unpauseContentShare();\n this.trace('unpauseContentShare');\n }\n stopContentShare() {\n this.contentShareController.stopContentShare();\n this.trace('stopContentShare');\n }\n addContentShareObserver(observer) {\n this.contentShareController.addContentShareObserver(observer);\n this.trace('addContentShareObserver');\n }\n removeContentShareObserver(observer) {\n this.contentShareController.removeContentShareObserver(observer);\n this.trace('removeContentShareObserver');\n }\n setContentShareVideoCodecPreferences(preferences) {\n this.contentShareController.setContentShareVideoCodecPreferences(preferences);\n this.trace('setContentShareVideoCodecPreferences');\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n trace(name, input, output) {\n const meetingId = this.audioVideoController.configuration.meetingId;\n const attendeeId = this.audioVideoController.configuration.credentials.attendeeId;\n let s = `API/DefaultAudioVideoFacade/${meetingId}/${attendeeId}/${name}`;\n if (typeof input !== 'undefined') {\n s += ` ${JSON.stringify(input)}`;\n }\n if (typeof output !== 'undefined') {\n s += ` -> ${JSON.stringify(output)}`;\n }\n this.audioVideoController.logger.info(s);\n }\n getRemoteVideoSources() {\n const result = this.audioVideoController.getRemoteVideoSources();\n this.trace('getRemoteVideoSources', null, result);\n return result;\n }\n get transcriptionController() {\n return this.realtimeController.transcriptionController;\n }\n promoteToPrimaryMeeting(credentials) {\n this.audioVideoController.removeObserver(this); // Avoid adding multiple times\n this.audioVideoController.addObserver(this); // See note in `audioVideoWasDemotedFromPrimaryMeeting`\n const result = this.audioVideoController.promoteToPrimaryMeeting(credentials);\n this.trace('promoteToPrimaryMeeting', null, result); // Don't trace credentials\n return result;\n }\n demoteFromPrimaryMeeting() {\n this.trace('demoteFromPrimaryMeeting');\n this.audioVideoController.demoteFromPrimaryMeeting();\n }\n audioVideoWasDemotedFromPrimaryMeeting(_) {\n // `DefaultContentShareController` currently does not respond to the connection ending\n // so `contentShareDidStop` will not be called even if backend cleans up the connection.\n // Thus we try to pre-emptively clean up on client side.\n this.contentShareController.stopContentShare();\n this.audioVideoController.removeObserver(this);\n }\n}\nexports.default = DefaultAudioVideoFacade;\n//# sourceMappingURL=DefaultAudioVideoFacade.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst VideoQualitySettings_1 = __importDefault(require(\"../devicecontroller/VideoQualitySettings\"));\n/**\n * [[MeetingFeatures]] contains information on meeting wide configuration which may impact the\n * client.\n */\nclass MeetingFeatures {\n constructor(videoMaxResolution = VideoQualitySettings_1.default.VideoResolutionHD, contentMaxResolution = VideoQualitySettings_1.default.VideoResolutionFHD) {\n this.videoMaxResolution = videoMaxResolution;\n this.contentMaxResolution = contentMaxResolution;\n }\n /**\n * Returns a deep copy of meeting features.\n */\n clone() {\n return new MeetingFeatures(this.videoMaxResolution, this.contentMaxResolution);\n }\n}\nexports.default = MeetingFeatures;\n//# sourceMappingURL=MeetingFeatures.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingSessionCredentials]] includes the credentials used to authenticate\n * the attendee on the meeting\n */\nclass MeetingSessionCredentials {\n constructor() {\n /**\n * The attendee id for these credentials.\n */\n this.attendeeId = null;\n /**\n * The external user id associated with the attendee.\n */\n this.externalUserId = null;\n /**\n * If set, the session will be authenticated with a join token.\n */\n this.joinToken = null;\n }\n /**\n * Overrides JSON serialization so that join token is redacted.\n */\n toJSON() {\n return {\n attendeeId: this.attendeeId,\n joinToken: this.joinToken === null ? null : '',\n };\n }\n}\nexports.default = MeetingSessionCredentials;\n//# sourceMappingURL=MeetingSessionCredentials.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingSessionURLs]] contains the URLs that will be used to reach the\n * meeting service.\n */\nclass MeetingSessionURLs {\n constructor() {\n /**\n * The audio host URL of the session\n */\n this._audioHostURL = null;\n /**\n * The signaling URL of the session\n */\n this._signalingURL = null;\n /**\n * The TURN control URL of the session\n */\n this._turnControlURL = null;\n /**\n * The event ingestion URL to send the meeting events.\n */\n this._eventIngestionURL = null;\n /**\n * Function to transform URLs. Use this to rewrite URLs to traverse proxies.\n * The default implementation returns the original URL unchanged.\n */\n this.urlRewriter = (url) => {\n return url;\n };\n }\n /**\n * Gets or sets the audio host URL with gets reflecting the result of the {@link MeetingSessionURLs.urlRewriter} function.\n */\n get audioHostURL() {\n return this.urlRewriter(this._audioHostURL);\n }\n set audioHostURL(value) {\n this._audioHostURL = value;\n }\n /**\n * Gets or sets the signaling URL with gets reflecting the result of the {@link MeetingSessionURLs.urlRewriter} function.\n */\n get signalingURL() {\n return this.urlRewriter(this._signalingURL);\n }\n set signalingURL(value) {\n this._signalingURL = value;\n }\n /**\n * Gets or sets the TURN control URL with gets reflecting the result of the {@link MeetingSessionURLs.urlRewriter} function.\n *\n * This URL is currently unused by the SDK and will be removed in a later release.\n */\n get turnControlURL() {\n return this.urlRewriter(this._turnControlURL);\n }\n /**\n * This URL is currently unused by the SDK and will be removed in a later release.\n */\n set turnControlURL(value) {\n this._turnControlURL = value;\n }\n /**\n * Gets or sets the events ingestion URL with gets reflecting the result of the {@link MeetingSessionURLs.urlRewriter} function.\n */\n get eventIngestionURL() {\n return this.urlRewriter(this._eventIngestionURL);\n }\n set eventIngestionURL(value) {\n this._eventIngestionURL = value;\n }\n}\nexports.default = MeetingSessionURLs;\n//# sourceMappingURL=MeetingSessionURLs.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ConnectionHealthPolicyConfiguration_1 = __importDefault(require(\"../connectionhealthpolicy/ConnectionHealthPolicyConfiguration\"));\nconst VideoQualitySettings_1 = __importDefault(require(\"../devicecontroller/VideoQualitySettings\"));\nconst Utils_1 = require(\"../utils/Utils\");\nconst MeetingFeatures_1 = __importDefault(require(\"./MeetingFeatures\"));\nconst MeetingSessionCredentials_1 = __importDefault(require(\"./MeetingSessionCredentials\"));\nconst MeetingSessionURLs_1 = __importDefault(require(\"./MeetingSessionURLs\"));\n/**\n * [[MeetingSessionConfiguration]] contains the information necessary to start\n * a session.\n */\nclass MeetingSessionConfiguration {\n /**\n * Constructs a MeetingSessionConfiguration optionally with a chime:CreateMeeting and\n * chime:CreateAttendee response. You can pass in either a JSON object containing the\n * responses, or a JSON object containing the information in the Meeting and Attendee\n * root-level fields. Examples:\n *\n * ```\n * const configuration = new MeetingSessionConfiguration({\n * \"Meeting\": {\n * \"MeetingId\": \"...\",\n * \"MediaPlacement\": {\n * \"AudioHostUrl\": \"...\",\n * \"SignalingUrl\": \"...\",\n * \"TurnControlUrl\": \"...\"\n * },\n * \"MeetingFeatures\":{\n * \"Audio\":\"...\",\n * \"Video\":\"....\",\n * \"Content\":\"...\",\n * \"Attendee\":\"...\"\n * },\n * }\n * }\n * }, {\n * \"Attendee\": {\n * \"ExternalUserId\": \"...\",\n * \"AttendeeId\": \"...\",\n * \"JoinToken\": \"...\"\n * }\n * });\n * ```\n *\n * ```\n * const configuration = new MeetingSessionConfiguration({\n * \"MeetingId\": \"...\",\n * \"MediaPlacement\": {\n * \"AudioHostUrl\": \"...\",\n * \"SignalingUrl\": \"...\",\n * \"TurnControlUrl\": \"...\"\n * }\n * }, {\n * \"ExternalUserId\": \"...\",\n * \"AttendeeId\": \"...\",\n * \"JoinToken\": \"...\"\n * });\n * ```\n */\n constructor(createMeetingResponse, createAttendeeResponse) {\n var _a, _b;\n /**\n * The id of the meeting the session is joining.\n */\n this.meetingId = null;\n /**\n * The external meeting id of the meeting the session is joining.\n */\n this.externalMeetingId = null;\n /**\n * The credentials used to authenticate the session.\n */\n this.credentials = null;\n /**\n * The URLs the session uses to reach the meeting service.\n */\n this.urls = null;\n /**\n * Maximum amount of time in milliseconds to allow for connecting.\n */\n this.connectionTimeoutMs = 15000;\n /**\n * Maximum amount of time in milliseconds to wait for the current attendee to be present\n * after initial connection.\n */\n this.attendeePresenceTimeoutMs = 0;\n /**\n * Configuration for connection health policies: reconnection, unusable audio warning connection,\n * and signal strength bars connection.\n */\n this.connectionHealthPolicyConfiguration = new ConnectionHealthPolicyConfiguration_1.default();\n /**\n * Maximum amount of time in milliseconds to allow for reconnecting.\n */\n this.reconnectTimeoutMs = 120 * 1000;\n /**\n * Fixed wait amount in milliseconds between reconnecting attempts.\n */\n this.reconnectFixedWaitMs = 0;\n /**\n * The short back-off time in milliseconds between reconnecting attempts.\n */\n this.reconnectShortBackOffMs = 1 * 1000;\n /**\n * The long back-off time in milliseconds between reconnecting attempts.\n */\n this.reconnectLongBackOffMs = 5 * 1000;\n /**\n * Feature flag to enable Simulcast\n */\n this.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = false;\n /**\n * Feature flag to enable scalable video coding (SVC) on supported browsers, which is determined by `BrowserBehavior.supportsScalableVideoCoding`\n */\n this.enableSVC = false;\n /**\n * Video downlink bandwidth policy to determine which remote videos\n * are subscribed to.\n */\n this.videoDownlinkBandwidthPolicy = null;\n /**\n * Video uplink bandwidth policy to determine the bandwidth constraints\n * of the local video.\n */\n this.videoUplinkBandwidthPolicy = null;\n /**\n * Keep the last frame of the video when a remote video is paused via the pauseVideoTile API.\n * This is done by not clearing the srcObject property of the videoElement.\n */\n this.keepLastFrameWhenPaused = false;\n /**\n * The Amazon Chime SDK media backends currently send a keyframe request to content share senders every 10 seconds to help mitigate\n * decoder issues on receivers. This flag requests the backed to disable that feature.\n *\n * Setting this flag to true may or may not lead to issues with content received for your application, as it depends on browsers used\n * and whether they have fixed previous issues leading to the introduction of this periodic keyframe request. It will however\n * reduce CPU consumption on content senders which no longer have to generate as many expensive keyframes.\n */\n this.disablePeriodicKeyframeRequestOnContentSender = false;\n /*\n * Additional features in the meeting\n */\n this.meetingFeatures = new MeetingFeatures_1.default();\n if (createMeetingResponse) {\n createMeetingResponse = Utils_1.toLowerCasePropertyNames(createMeetingResponse);\n if (createMeetingResponse.meeting) {\n createMeetingResponse = createMeetingResponse.meeting;\n }\n this.meetingId = createMeetingResponse.meetingid;\n this.externalMeetingId = createMeetingResponse.externalmeetingid;\n this.urls = new MeetingSessionURLs_1.default();\n this.urls.audioHostURL = createMeetingResponse.mediaplacement.audiohosturl;\n this.urls.signalingURL = createMeetingResponse.mediaplacement.signalingurl;\n this.urls.turnControlURL = createMeetingResponse.mediaplacement.turncontrolurl;\n if (createMeetingResponse.mediaplacement.eventingestionurl) {\n this.urls.eventIngestionURL = createMeetingResponse.mediaplacement.eventingestionurl;\n }\n const parseVideoResolution = (resolution, defaultValue) => {\n switch (resolution) {\n case 'None':\n return VideoQualitySettings_1.default.VideoDisabled;\n case 'HD':\n return VideoQualitySettings_1.default.VideoResolutionHD;\n case 'FHD':\n return VideoQualitySettings_1.default.VideoResolutionFHD;\n case 'UHD':\n return VideoQualitySettings_1.default.VideoResolutionUHD;\n default:\n return defaultValue;\n }\n };\n if (((_a = createMeetingResponse.meetingfeatures) === null || _a === void 0 ? void 0 : _a.video) !== undefined ||\n ((_b = createMeetingResponse.meetingfeatures) === null || _b === void 0 ? void 0 : _b.content) !== undefined) {\n const videoMaxResolution = createMeetingResponse.meetingfeatures.video === undefined\n ? 'HD'\n : createMeetingResponse.meetingfeatures.video.maxresolution;\n const contentMaxResolution = createMeetingResponse.meetingfeatures.content === undefined\n ? 'FHD'\n : createMeetingResponse.meetingfeatures.content.maxresolution;\n this.meetingFeatures = new MeetingFeatures_1.default(parseVideoResolution(videoMaxResolution, VideoQualitySettings_1.default.VideoResolutionHD), parseVideoResolution(contentMaxResolution, VideoQualitySettings_1.default.VideoResolutionFHD));\n }\n }\n if (createAttendeeResponse) {\n createAttendeeResponse = Utils_1.toLowerCasePropertyNames(createAttendeeResponse);\n if (createAttendeeResponse.attendee) {\n createAttendeeResponse = createAttendeeResponse.attendee;\n }\n this.credentials = new MeetingSessionCredentials_1.default();\n this.credentials.attendeeId = createAttendeeResponse.attendeeid;\n this.credentials.externalUserId = createAttendeeResponse.externaluserid;\n this.credentials.joinToken = createAttendeeResponse.jointoken;\n }\n }\n}\nexports.default = MeetingSessionConfiguration;\n//# sourceMappingURL=MeetingSessionConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"../videostreamidset/DefaultVideoStreamIdSet\"));\nclass NoVideoDownlinkBandwidthPolicy {\n reset() { }\n updateIndex(_videoIndex) { }\n updateMetrics(_clientMetricReport) { }\n wantsResubscribe() {\n return false;\n }\n chooseSubscriptions() {\n return new DefaultVideoStreamIdSet_1.default();\n }\n}\nexports.default = NoVideoDownlinkBandwidthPolicy;\n//# sourceMappingURL=NoVideoDownlinkBandwidthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst SimulcastContentShareTransceiverController_1 = __importDefault(require(\"../transceivercontroller/SimulcastContentShareTransceiverController\"));\n/**\n * [[DefaultSimulcastUplinkPolicyForContentShare]] sets the capture and encode\n * parameters based on constructor input parameters\n */\nclass DefaultSimulcastUplinkPolicyForContentShare {\n constructor(_logger, encodingParams) {\n this.encodingParams = encodingParams;\n this.enableUhdContent = false;\n this.defaultHiTargetBitrateKbps = 1200;\n this.defaultLowTargetBitrateKbps = 300;\n }\n updateConnectionMetric(_metrics) { }\n chooseMediaTrackConstraints() {\n return undefined;\n }\n chooseEncodingParameters() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n const newMap = new Map();\n const toBps = 1000;\n const nameArr = SimulcastContentShareTransceiverController_1.default.NAME_ARR_ASCENDING;\n newMap.set(nameArr[0], {\n rid: nameArr[0],\n active: true,\n scaleResolutionDownBy: ((_b = (_a = this.encodingParams) === null || _a === void 0 ? void 0 : _a.low) === null || _b === void 0 ? void 0 : _b.scaleResolutionDownBy) || 2,\n maxBitrate: (((_d = (_c = this.encodingParams) === null || _c === void 0 ? void 0 : _c.low) === null || _d === void 0 ? void 0 : _d.maxBitrateKbps) || this.defaultLowTargetBitrateKbps) * toBps,\n maxFramerate: ((_f = (_e = this.encodingParams) === null || _e === void 0 ? void 0 : _e.low) === null || _f === void 0 ? void 0 : _f.maxFramerate) || 5,\n });\n newMap.set(nameArr[1], {\n rid: nameArr[1],\n active: true,\n scaleResolutionDownBy: ((_h = (_g = this.encodingParams) === null || _g === void 0 ? void 0 : _g.high) === null || _h === void 0 ? void 0 : _h.scaleResolutionDownBy) || 1,\n maxBitrate: (((_k = (_j = this.encodingParams) === null || _j === void 0 ? void 0 : _j.high) === null || _k === void 0 ? void 0 : _k.maxBitrateKbps) || this.defaultHiTargetBitrateKbps) * toBps,\n maxFramerate: (_m = (_l = this.encodingParams) === null || _l === void 0 ? void 0 : _l.high) === null || _m === void 0 ? void 0 : _m.maxFramerate,\n });\n return newMap;\n }\n updateIndex(_videoIndex) { }\n wantsResubscribe() {\n return false;\n }\n chooseCaptureAndEncodeParameters() {\n return undefined;\n }\n maxBandwidthKbps() {\n return this.enableUhdContent ? 2000 : 1200;\n }\n setIdealMaxBandwidthKbps(_idealMaxBandwidthKbps) { }\n setHasBandwidthPriority(_hasBandwidthPriority) { }\n setHighResolutionFeatureEnabled(enabled) {\n this.enableUhdContent = enabled;\n this.defaultHiTargetBitrateKbps = enabled ? 2000 : 1200;\n this.defaultLowTargetBitrateKbps = enabled ? 500 : 300;\n }\n addObserver(_observer) { }\n removeObserver(_observer) { }\n forEachObserver(_observerFunc) { }\n}\nexports.default = DefaultSimulcastUplinkPolicyForContentShare;\n//# sourceMappingURL=DefaultSimulcastUplinkPolicyForContentShare.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst VideoQualitySettings_1 = __importDefault(require(\"../devicecontroller/VideoQualitySettings\"));\nconst MeetingSessionConfiguration_1 = __importDefault(require(\"../meetingsession/MeetingSessionConfiguration\"));\nconst MeetingSessionCredentials_1 = __importDefault(require(\"../meetingsession/MeetingSessionCredentials\"));\nconst DefaultModality_1 = __importDefault(require(\"../modality/DefaultModality\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst Types_1 = require(\"../utils/Types\");\nconst NoVideoDownlinkBandwidthPolicy_1 = __importDefault(require(\"../videodownlinkbandwidthpolicy/NoVideoDownlinkBandwidthPolicy\"));\nconst DefaultSimulcastUplinkPolicyForContentShare_1 = __importDefault(require(\"../videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicyForContentShare\"));\nconst ContentShareConstants_1 = __importDefault(require(\"./ContentShareConstants\"));\nclass DefaultContentShareController {\n constructor(mediaStreamBroker, contentAudioVideo, attendeeAudioVideo) {\n this.mediaStreamBroker = mediaStreamBroker;\n this.contentAudioVideo = contentAudioVideo;\n this.attendeeAudioVideo = attendeeAudioVideo;\n this.observerQueue = new Set();\n this.destroyed = false;\n this.contentAudioVideo.addObserver(this);\n this.setupContentShareEvents();\n }\n static createContentShareMeetingSessionConfigure(configuration) {\n const contentShareConfiguration = new MeetingSessionConfiguration_1.default();\n contentShareConfiguration.meetingId = configuration.meetingId;\n contentShareConfiguration.externalMeetingId = configuration.externalMeetingId;\n contentShareConfiguration.urls = configuration.urls;\n contentShareConfiguration.disablePeriodicKeyframeRequestOnContentSender =\n configuration.disablePeriodicKeyframeRequestOnContentSender;\n contentShareConfiguration.credentials = new MeetingSessionCredentials_1.default();\n contentShareConfiguration.credentials.attendeeId =\n configuration.credentials.attendeeId + ContentShareConstants_1.default.Modality;\n contentShareConfiguration.credentials.externalUserId = configuration.credentials.externalUserId;\n contentShareConfiguration.credentials.joinToken =\n configuration.credentials.joinToken + ContentShareConstants_1.default.Modality;\n contentShareConfiguration.meetingFeatures = configuration.meetingFeatures.clone();\n contentShareConfiguration.videoDownlinkBandwidthPolicy = new NoVideoDownlinkBandwidthPolicy_1.default();\n return contentShareConfiguration;\n }\n setContentAudioProfile(audioProfile) {\n this.contentAudioVideo.setAudioProfile(audioProfile);\n }\n enableSimulcastForContentShare(enable, encodingParams) {\n if (enable) {\n this.contentAudioVideo.configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = true;\n this.contentAudioVideo.configuration.videoUplinkBandwidthPolicy = new DefaultSimulcastUplinkPolicyForContentShare_1.default(this.contentAudioVideo.logger, encodingParams);\n }\n else {\n this.contentAudioVideo.configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = false;\n this.contentAudioVideo.configuration.videoUplinkBandwidthPolicy = undefined;\n }\n }\n enableSVCForContentShare(enable) {\n if (enable) {\n this.contentAudioVideo.configuration.enableSVC = true;\n }\n else {\n this.contentAudioVideo.configuration.enableSVC = false;\n }\n }\n startContentShare(stream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!stream) {\n return;\n }\n if (this.contentAudioVideo.configuration.meetingFeatures.contentMaxResolution ===\n VideoQualitySettings_1.default.VideoDisabled) {\n this.contentAudioVideo.logger.info('Could not start content because max content resolution was set to None');\n return;\n }\n this.mediaStreamBroker.mediaStream = stream;\n for (let i = 0; i < this.mediaStreamBroker.mediaStream.getTracks().length; i++) {\n this.mediaStreamBroker.mediaStream.getTracks()[i].addEventListener('ended', () => {\n this.stopContentShare();\n });\n }\n this.contentAudioVideo.start();\n });\n }\n startContentShareFromScreenCapture(sourceId, frameRate) {\n return __awaiter(this, void 0, void 0, function* () {\n const mediaStream = yield this.mediaStreamBroker.acquireScreenCaptureDisplayInputStream(sourceId, frameRate);\n yield this.startContentShare(mediaStream);\n return mediaStream;\n });\n }\n pauseContentShare() {\n if (this.mediaStreamBroker.toggleMediaStream(false)) {\n this.forEachContentShareObserver(observer => {\n Types_1.Maybe.of(observer.contentShareDidPause).map(f => f.call(observer));\n });\n }\n }\n unpauseContentShare() {\n if (this.mediaStreamBroker.toggleMediaStream(true)) {\n this.forEachContentShareObserver(observer => {\n Types_1.Maybe.of(observer.contentShareDidUnpause).map(f => f.call(observer));\n });\n }\n }\n setContentShareVideoCodecPreferences(preferences) {\n this.contentAudioVideo.setVideoCodecSendPreferences(preferences);\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n // Idempotency.\n /* istanbul ignore if */\n if (!this.contentAudioVideo) {\n return;\n }\n this.destroyed = true;\n this.contentAudioVideo.removeObserver(this);\n this.stopContentShare();\n this.observerQueue.clear();\n this.contentAudioVideo = undefined;\n this.attendeeAudioVideo = undefined;\n this.mediaStreamBroker = undefined;\n });\n }\n stopContentShare() {\n this.contentAudioVideo.stop();\n this.mediaStreamBroker.cleanup();\n }\n addContentShareObserver(observer) {\n this.observerQueue.add(observer);\n }\n removeContentShareObserver(observer) {\n this.observerQueue.delete(observer);\n }\n forEachContentShareObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n AsyncScheduler_1.default.nextTick(() => {\n if (this.observerQueue.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n audioVideoDidStart() {\n var _a;\n if (((_a = this.mediaStreamBroker.mediaStream) === null || _a === void 0 ? void 0 : _a.getVideoTracks().length) > 0) {\n this.contentAudioVideo.videoTileController.startLocalVideoTile();\n }\n }\n audioVideoDidStop(_sessionStatus) {\n // If the content attendee got dropped or could not connect, stopContentShare will not be called\n // so make sure to clean up the media stream.\n this.mediaStreamBroker.cleanup();\n if (this.contentShareTile) {\n this.attendeeAudioVideo.videoTileController.removeVideoTile(this.contentShareTile.id());\n this.contentShareTile = null;\n }\n this.forEachContentShareObserver(observer => {\n Types_1.Maybe.of(observer.contentShareDidStop).map(f => f.call(observer));\n });\n }\n setupContentShareEvents() {\n // We use realtimeSubscribeToAttendeeIdPresence instead of audioVideoDidStart because audioVideoDidStart fires\n // before the capacity check in Tincan while when realtimeSubscribeToAttendeeIdPresence fires, we know the\n // content attendee has been able to pass the capacity check and join the call so we can start the local\n // content share video\n this.attendeeAudioVideo.realtimeController.realtimeSubscribeToAttendeeIdPresence((attendeeId, present, _externalUserId, _dropped) => {\n const isContentAttendee = new DefaultModality_1.default(attendeeId).hasModality(DefaultModality_1.default.MODALITY_CONTENT);\n const isSelfAttendee = new DefaultModality_1.default(attendeeId).base() ===\n this.attendeeAudioVideo.configuration.credentials.attendeeId;\n if (!isContentAttendee || !isSelfAttendee || !present || this.contentShareTile) {\n return;\n }\n const stream = this.mediaStreamBroker.mediaStream;\n if (stream === null || stream === void 0 ? void 0 : stream.getVideoTracks().length) {\n this.contentShareTile = this.attendeeAudioVideo.videoTileController.addVideoTile();\n const track = stream.getVideoTracks()[0];\n let width, height;\n if (track.getSettings) {\n const cap = track.getSettings();\n width = cap.width;\n height = cap.height;\n }\n else {\n const cap = track.getCapabilities();\n width = cap.width;\n height = cap.height;\n }\n this.contentShareTile.bindVideoStream(this.contentAudioVideo.configuration.credentials.attendeeId, false, stream, width, height, null, this.contentAudioVideo.configuration.credentials.externalUserId);\n }\n this.forEachContentShareObserver(observer => {\n Types_1.Maybe.of(observer.contentShareDidStart).map(f => f.call(observer));\n });\n });\n }\n}\nexports.default = DefaultContentShareController;\n//# sourceMappingURL=DefaultContentShareController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isDestroyable = void 0;\n/**\n * Type guard for `Destroyable`.\n *\n * @param x A value that might implement the `Destroyable` interface.\n * @returns Whether the value implements `Destroyable`.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isDestroyable(x) {\n return x && 'destroy' in x;\n}\nexports.isDestroyable = isDestroyable;\n//# sourceMappingURL=Destroyable.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[EventBufferConfiguration]] contains necessary information to\n * configure buffer.\n */\nclass EventBufferConfiguration {\n constructor(flushIntervalMs = 5000, flushSize = 2, maxBufferCapacityKb = 64, totalBufferItems = 100, retryCountLimit = 15) {\n this.flushIntervalMs = flushIntervalMs;\n this.flushSize = flushSize;\n this.maxBufferCapacityKb = maxBufferCapacityKb;\n this.totalBufferItems = totalBufferItems;\n this.retryCountLimit = retryCountLimit;\n }\n}\nexports.default = EventBufferConfiguration;\n//# sourceMappingURL=EventBufferConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EventBufferConfiguration_1 = __importDefault(require(\"../eventbufferconfiguration/EventBufferConfiguration\"));\n/**\n * [[EventIngestionConfiguration]] contains necessary information to\n * report events to the ingestion service.\n */\nclass EventIngestionConfiguration {\n constructor(eventsClientConfiguration, ingestionURL, eventBufferConfiguration = new EventBufferConfiguration_1.default()) {\n this.eventsClientConfiguration = eventsClientConfiguration;\n this.ingestionURL = ingestionURL;\n this.eventBufferConfiguration = eventBufferConfiguration;\n }\n}\nexports.default = EventIngestionConfiguration;\n//# sourceMappingURL=EventIngestionConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Implements the [Full Jitter algorithm](\n * https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)\n * and also allows for specifying a fixed wait added to the full jitter backoff\n * (which can be zero).\n */\nclass FullJitterBackoff {\n constructor(fixedWaitMs, shortBackoffMs, longBackoffMs) {\n this.fixedWaitMs = fixedWaitMs;\n this.shortBackoffMs = shortBackoffMs;\n this.longBackoffMs = longBackoffMs;\n this.currentRetry = 0;\n if (this.fixedWaitMs < 0) {\n this.fixedWaitMs = 0;\n }\n if (this.shortBackoffMs < 0) {\n this.shortBackoffMs = 0;\n }\n if (this.longBackoffMs < 0) {\n this.longBackoffMs = 0;\n }\n this.reset();\n }\n reset() {\n this.currentRetry = 0;\n }\n nextBackoffAmountMs() {\n const fullJitterMs = Math.random() *\n Math.min(this.longBackoffMs, this.shortBackoffMs * Math.pow(2.0, this.currentRetry)) +\n this.fixedWaitMs;\n this.currentRetry += 1;\n return fullJitterMs;\n }\n}\nexports.default = FullJitterBackoff;\n//# sourceMappingURL=FullJitterBackoff.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Use \"ua-parser-js\" over \"detect-browser\" to get more detailed information.\nconst ua_parser_js_1 = require(\"ua-parser-js\");\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\n/**\n * [[DefaultUserAgentParser]] uses UAParser to parse the browser's user agent.\n * It is responsible to hold and provide browser, OS and device specific information.\n */\nclass DefaultUserAgentParser {\n constructor(logger) {\n var _a, _b, _c, _d, _e, _f, _g;\n try {\n this.parserResult =\n navigator && navigator.userAgent\n ? new ua_parser_js_1.UAParser(navigator.userAgent).getResult()\n : undefined;\n }\n catch (error) {\n /* istanbul ignore next */\n logger.error(error.message);\n }\n this.browserMajorVersion =\n ((_c = (_b = (_a = this.parserResult) === null || _a === void 0 ? void 0 : _a.browser) === null || _b === void 0 ? void 0 : _b.version) === null || _c === void 0 ? void 0 : _c.split('.')[0]) || DefaultUserAgentParser.UNAVAILABLE;\n this.browserName = ((_d = this.parserResult) === null || _d === void 0 ? void 0 : _d.browser.name) || DefaultUserAgentParser.UNAVAILABLE;\n this.browserVersion = ((_e = this.parserResult) === null || _e === void 0 ? void 0 : _e.browser.version) || DefaultUserAgentParser.UNAVAILABLE;\n this.deviceName =\n [((_f = this.parserResult) === null || _f === void 0 ? void 0 : _f.device.vendor) || '', ((_g = this.parserResult) === null || _g === void 0 ? void 0 : _g.device.model) || '']\n .join(' ')\n .trim() || DefaultUserAgentParser.UNAVAILABLE;\n }\n getParserResult() {\n var _a, _b;\n return {\n browserMajorVersion: this.browserMajorVersion,\n browserName: this.browserName,\n browserVersion: this.browserVersion,\n deviceName: this.deviceName,\n osName: ((_a = this.parserResult) === null || _a === void 0 ? void 0 : _a.os.name) || DefaultUserAgentParser.UNAVAILABLE,\n osVersion: ((_b = this.parserResult) === null || _b === void 0 ? void 0 : _b.os.version) || DefaultUserAgentParser.UNAVAILABLE,\n sdkVersion: Versioning_1.default.sdkVersion,\n sdkName: Versioning_1.default.sdkName,\n };\n }\n}\nexports.default = DefaultUserAgentParser;\nDefaultUserAgentParser.UNAVAILABLE = 'Unavailable';\n//# sourceMappingURL=DefaultUserAgentParser.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst FullJitterBackoff_1 = __importDefault(require(\"../backoff/FullJitterBackoff\"));\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nconst DefaultUserAgentParser_1 = __importDefault(require(\"../useragentparser/DefaultUserAgentParser\"));\nconst Utils_1 = require(\"../utils/Utils\");\n/**\n * [[InMemoryJSONEventBuffer]] is an in-memory implementation for buffering and\n * sending events. It buffers events based on number of events and its size whichever reaches\n * first. Events are sent out at an scheduled interval where important events are sent immediately.\n * It also retries sending events if failed upto the retry count limit. It implements\n * beaconing mechanism based on 'pagehide' and 'visibilitychange' to beacon all events as a last attempt.\n */\nclass InMemoryJSONEventBuffer {\n constructor(eventBufferConfiguration, eventsClientConfiguration, ingestionURL, importantEvents, logger) {\n this.buffer = [];\n this.bufferSize = 0;\n this.maxBufferItemCapacityBytes = 0;\n this.ingestionEventSize = 0;\n this.flushIntervalMs = 0;\n this.flushSize = 0;\n this.failedIngestionEvents = [];\n this.retryCountLimit = 15;\n this.lock = false;\n this.cancellableEvents = new Map();\n this.attributesToFilter = ['externalUserId', 'externalMeetingId', 'timestampMs'];\n this.deepCopyCurrentIngestionEvent = (event) => {\n const newEvent = {\n type: event.type,\n v: event.v,\n payloads: [...event.payloads],\n };\n return newEvent;\n };\n this.sendEvents = () => __awaiter(this, void 0, void 0, function* () {\n if (this.lock) {\n return;\n }\n const batch = this.getItems(this.flushSize);\n if (batch.length === 0) {\n return;\n }\n this.lock = true;\n const body = this.makeRequestBody(batch);\n let failed = false;\n // If a page re-directs, in Safari and Chrome, the network\n // request shows cancelled but the data reaches the ingestion endpoint.\n // In Firefox, the request errors out with 'NS_BINDING_ABORT' state. Hence, add the event\n // to cancellable events to try with `sendBeacon` lastly.\n const timestamp = Date.now();\n if (this.metadata.browserName.toLowerCase() === 'firefox') {\n this.cancellableEvents.set(timestamp, batch);\n }\n try {\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEvents - sending body ${body}`);\n const response = yield this.send(body);\n this.cancellableEvents.delete(timestamp);\n if (!response.ok) {\n this.logger.error(`Event Reporting - InMemoryJSONEventBuffer - sendEvents - Failed to send events ${body} with response status ${response.status}`);\n failed = true;\n }\n else {\n try {\n const data = yield response.json();\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEvents - send successful events: ${body} message: ${JSON.stringify(data)}`);\n }\n catch (err) {\n /* istanbul ignore next */\n this.logger.warn(`Event Reporting - InMemoryJSONEventBuffer - sendEvents error reading OK response ${err} for events ${body}`);\n }\n }\n }\n catch (error) {\n failed = true;\n this.logger.warn(`Event Reporting - InMemoryJSONEventBuffer - sendEvents - Error in sending events ${body} to the ingestion endpoint ${error}`);\n }\n finally {\n this.lock = false;\n }\n if (failed) {\n this.cancellableEvents.delete(timestamp);\n this.failedIngestionEvents.push(...batch);\n }\n });\n const userAgentParserResult = new DefaultUserAgentParser_1.default(logger).getParserResult();\n const { browserMajorVersion: _browserMajorVersion } = userAgentParserResult, clientMetadata = __rest(userAgentParserResult, [\"browserMajorVersion\"]);\n const _a = eventsClientConfiguration.toJSON(), { type, v } = _a, rest = __rest(_a, [\"type\", \"v\"]);\n this.authenticationToken = eventsClientConfiguration.getAuthenticationToken();\n this.metadata = Object.assign(Object.assign({}, clientMetadata), rest);\n Object.keys(this.metadata).forEach(key => this.attributesToFilter.push(key));\n this.type = type;\n this.v = v;\n this.ingestionURL = ingestionURL;\n this.logger = logger;\n this.importantEvents = new Set(importantEvents);\n const { maxBufferCapacityKb, totalBufferItems, flushSize, flushIntervalMs, retryCountLimit, } = eventBufferConfiguration;\n this.maxBufferCapacityBytes = maxBufferCapacityKb * 1024;\n this.totalBufferItems = totalBufferItems;\n this.maxBufferItemCapacityBytes = Math.round(this.maxBufferCapacityBytes / totalBufferItems);\n this.flushIntervalMs = flushIntervalMs;\n this.flushSize = flushSize;\n this.retryCountLimit = retryCountLimit;\n this.currentIngestionEvent = this.initializeAndGetCurrentIngestionEvent();\n this.beaconEventListener = (e) => this.beaconEventHandler(e);\n this.addEventListeners();\n }\n addEventListeners() {\n if (!this.beaconEventListener ||\n !('window' in global) ||\n !window.addEventListener ||\n !('document' in global) ||\n !document.addEventListener) {\n return;\n }\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - addEventListeners - adding pagehide and visibility change event listeners`);\n window.addEventListener('pagehide', this.beaconEventListener);\n document.addEventListener('visibilitychange', this.beaconEventListener);\n }\n beaconEventHandler(e) {\n /* istanbul ignore else */\n if ((e.type === 'visibilitychange' && document.visibilityState === 'hidden') ||\n e.type === 'pagehide') {\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - beaconEventHandler is triggered calling sendBeacon`);\n this.sendBeacon();\n }\n }\n removeEventListeners() {\n if (!this.beaconEventListener ||\n !('window' in global) ||\n !window.removeEventListener ||\n !('document' in global) ||\n !document.removeEventListener) {\n return;\n }\n window.removeEventListener('pagehide', this.beaconEventListener);\n document.removeEventListener('visibilitychange', this.beaconEventListener);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - removeEventListeners - removing pagehide and visibility change event listeners`);\n }\n start() {\n var _a;\n this.removeEventListeners();\n this.addEventListeners();\n (_a = this.intervalScheduler) === null || _a === void 0 ? void 0 : _a.stop();\n this.intervalScheduler = new IntervalScheduler_1.default(this.flushIntervalMs);\n this.intervalScheduler.start(() => this.sendEvents());\n }\n stop() {\n var _a;\n (_a = this.intervalScheduler) === null || _a === void 0 ? void 0 : _a.stop();\n this.intervalScheduler = undefined;\n this.sendBeacon();\n this.removeEventListeners();\n }\n addItem(item) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - addItem - received event ${JSON.stringify(item)}`);\n const { name, ts, attributes } = item;\n // Filter out PII and redundant attributes.\n const filteredAttributes = attributes && this.filterAttributes(attributes, this.attributesToFilter);\n const event = Object.assign({ name, ts }, filteredAttributes);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - addItem - event after filtering attributes ${JSON.stringify(event)}`);\n const size = this.getSize(event);\n if (size > InMemoryJSONEventBuffer.MAX_ITEM_SIZE_BYTES_ALLOWED) {\n throw new Error(`Event Reporting - Item to be added has size ${size} bytes. Item cannot exceed max item size allowed of ${InMemoryJSONEventBuffer.MAX_ITEM_SIZE_BYTES_ALLOWED} bytes.`);\n }\n if (this.importantEvents.has(name)) {\n // Send immediate events and asyncly retry.\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - addItem - sending important event ${JSON.stringify(event)}`);\n this.sendEventImmediately({ name, ts, attributes: filteredAttributes });\n return;\n }\n if (this.isFull()) {\n this.logger.warn('Event Reporting - Event buffer is full');\n throw new Error('Buffer full');\n }\n this.currentIngestionEvent.payloads.push(event);\n this.ingestionEventSize += size;\n if (this.bufferItemThresholdReached(size)) {\n const currentEvent = this.deepCopyCurrentIngestionEvent(this.currentIngestionEvent);\n this.buffer.push(currentEvent);\n this.bufferSize += this.ingestionEventSize;\n this.currentIngestionEvent = this.initializeAndGetCurrentIngestionEvent();\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - addItem - buffer item threshold reached updated buffer ${JSON.stringify(this.buffer)}`);\n }\n });\n }\n filterAttributes(attributes, attributesToFilter) {\n const attributesToFilterSet = new Set(attributesToFilter);\n const keysToFilterOut = Object.keys(attributes).filter(key => attributesToFilterSet.has(key));\n keysToFilterOut.forEach(key => delete attributes[key]);\n return attributes;\n }\n initializeAndGetCurrentIngestionEvent() {\n const bufferItem = {\n type: this.type,\n v: this.v,\n payloads: [],\n };\n this.ingestionEventSize = this.getSize(bufferItem);\n return bufferItem;\n }\n bufferItemThresholdReached(size) {\n return (size + this.ingestionEventSize >= this.maxBufferItemCapacityBytes ||\n this.currentIngestionEvent.payloads.length === InMemoryJSONEventBuffer.MAX_PAYLOAD_ITEMS);\n }\n getSize(item) {\n let bytes = 0;\n if (typeof item === 'object') {\n for (const [key, value] of Object.entries(item)) {\n bytes += this.getPrimitiveSize(key);\n bytes += this.getSize(value);\n }\n }\n else {\n bytes += this.getPrimitiveSize(item);\n }\n return bytes;\n }\n getPrimitiveSize(item) {\n let bytes = 0;\n /* istanbul ignore else */\n if (typeof item === 'string') {\n bytes += item.length * 2;\n }\n else if (typeof item === 'number') {\n bytes += 8;\n }\n return bytes;\n }\n isFull() {\n return (this.bufferSize === this.maxBufferCapacityBytes ||\n this.buffer.length === this.totalBufferItems);\n }\n isEmpty() {\n return this.buffer.length === 0 || this.bufferSize === 0;\n }\n getItems(end, start = 0) {\n if (this.isEmpty()) {\n return [];\n }\n end = Math.min(this.buffer.length, end + 1);\n const items = this.buffer.splice(start, end);\n return items;\n }\n makeBeaconRequestBody(batchEvents) {\n const ingestionRecord = {\n metadata: this.metadata,\n events: batchEvents,\n authorization: this.authenticationToken,\n };\n return JSON.stringify(ingestionRecord);\n }\n makeRequestBody(batchEvents) {\n const ingestionRecord = {\n metadata: this.metadata,\n events: batchEvents,\n };\n return JSON.stringify(ingestionRecord);\n }\n sendEventImmediately(item) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - important event received ${JSON.stringify(item)}`);\n const { name, ts, attributes } = item;\n const event = {\n type: this.type,\n v: this.v,\n payloads: [\n Object.assign({ name,\n ts }, attributes),\n ],\n };\n let failed = false;\n let response = null;\n const body = this.makeRequestBody([event]);\n try {\n response = yield this.send(body);\n if (response.ok) {\n try {\n const data = yield response.json();\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - send successful event: ${body}, message: ${JSON.stringify(data)}`);\n }\n catch (err) {\n /* istanbul ignore next */\n this.logger.warn(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - Error reading OK response ${err} for event ${body}`);\n }\n return;\n }\n else {\n this.logger.error(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - Failed to send an important event ${body} with response status ${response.status}`);\n failed = true;\n }\n }\n catch (error) {\n this.logger.warn(`Event Reporting - There may be a failure in sending an important event ${body} to the ingestion endpoint ${error}.`);\n failed = true;\n try {\n /**\n * Important events like meetingEnded, meetingStartFailed may result into page-redirects.\n * In such a case, Firefox aborts the fetch request with 'NS_BINDING_ABORT' state.\n * Chrome and Safari show fetch request as cancelled and the fetch failure is catched, but,\n * events appear at ingestion backend. Chrome and Safari behavior is unreliable, but Firefox consistently fails,\n * hence, we beacon data as a last resort when using Firefox.\n * During the page-redirect, we do not have access to check fetch's response to handle Chrome and Safari behavior,\n * hence, event ingestion may fail.\n *\n */\n if (this.metadata.browserName.toLowerCase() === 'firefox') {\n const body = this.makeBeaconRequestBody([event]);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - beaconing data out ${body}`);\n if (!navigator.sendBeacon(`${this.ingestionURL}?beacon=1`, body)) {\n failed = true;\n }\n else {\n failed = false;\n }\n }\n }\n catch (error) {\n this.logger.warn(`Event Reporting - Error sending beacon for an important event ${body}`);\n failed = true;\n }\n }\n /* istanbul ignore else */\n if (failed) {\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendEventImmediately - pushing to failed events ${body}`);\n this.failedIngestionEvents.push(event);\n }\n });\n }\n send(data) {\n return __awaiter(this, void 0, void 0, function* () {\n const backoff = new FullJitterBackoff_1.default(InMemoryJSONEventBuffer.RETRY_FIXED_BACKOFF_WAIT_MS, InMemoryJSONEventBuffer.RETRY_SHORT_BACKOFF_MS, InMemoryJSONEventBuffer.RETRY_LONG_BACKOFF_MS);\n try {\n let retryCount = 0;\n while (retryCount < this.retryCountLimit) {\n const response = yield fetch(this.ingestionURL, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${this.authenticationToken}`,\n },\n body: data,\n });\n if (response.ok || !InMemoryJSONEventBuffer.SENDING_FAILURE_CODES.has(response.status)) {\n return response;\n }\n else {\n this.logger.warn(`Will retry sending failure for ${data} due to status code ${response.status}.`);\n retryCount++;\n /* istanbul ignore else */\n if (retryCount < this.retryCountLimit) {\n const backoffTime = backoff.nextBackoffAmountMs();\n yield Utils_1.wait(backoffTime);\n }\n }\n }\n /* istanbul ignore else */\n if (retryCount === this.retryCountLimit) {\n throw new Error(`Retry count limit reached for ${data}`);\n }\n }\n catch (error) {\n throw error;\n }\n });\n }\n sendBeacon() {\n return __awaiter(this, void 0, void 0, function* () {\n // Any pending events from buffer.\n const events = this.buffer;\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendBeacon - clearing out buffer events ${JSON.stringify(events)}`);\n this.buffer = [];\n // Any pending event in current ingestion event.\n if (this.currentIngestionEvent.payloads.length > 0) {\n const clearCurrenIngestionEvent = this.deepCopyCurrentIngestionEvent(this.currentIngestionEvent);\n events.push(clearCurrenIngestionEvent);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendBeacon - clearing out current ingestion event ${JSON.stringify(clearCurrenIngestionEvent)}`);\n this.currentIngestionEvent = this.initializeAndGetCurrentIngestionEvent();\n }\n // Any failed ingestion events which were sent before.\n if (this.failedIngestionEvents.length > 0) {\n const failedRecordsCopy = this.failedIngestionEvents.map(record => this.deepCopyCurrentIngestionEvent(record));\n events.push(...failedRecordsCopy);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendBeacon - clearing out any failed ingestion event ${JSON.stringify(failedRecordsCopy)}`);\n this.failedIngestionEvents = [];\n }\n // Any cancelled requests due to page-redirects.\n if (this.cancellableEvents.size > 0) {\n this.cancellableEvents.forEach(value => {\n events.push(...value);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendBeacon - clearing out each cancellable event ${JSON.stringify(value)}`);\n });\n this.cancellableEvents.clear();\n }\n if (events.length === 0) {\n return;\n }\n const beaconData = this.makeBeaconRequestBody(events);\n this.logger.debug(`Event Reporting - InMemoryJSONEventBuffer - sendBeacon - beacon data to send ${beaconData}`);\n try {\n /* istanbul ignore else */\n if (!navigator.sendBeacon(`${this.ingestionURL}?beacon=1`, beaconData)) {\n this.logger.warn(`Event Reporting - Browser failed to queue beacon data ${beaconData}`);\n }\n }\n catch (error) {\n this.logger.warn(`Event Reporting - Sending beacon data ${beaconData} failed with error ${error}`);\n }\n });\n }\n reset() {\n this.maxBufferCapacityBytes = 0;\n this.totalBufferItems = 0;\n this.buffer = [];\n this.bufferSize = 0;\n this.maxBufferItemCapacityBytes = 0;\n this.ingestionEventSize = 0;\n this.flushIntervalMs = 0;\n this.flushSize = 0;\n this.failedIngestionEvents = [];\n this.lock = false;\n this.beaconEventListener = undefined;\n this.cancellableEvents.clear();\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.stop();\n this.reset();\n });\n }\n}\nexports.default = InMemoryJSONEventBuffer;\nInMemoryJSONEventBuffer.SENDING_FAILURE_CODES = new Set([\n 408,\n 429,\n 500,\n 502,\n 503,\n 504, // Gateway Timeout.\n]);\nInMemoryJSONEventBuffer.RETRY_FIXED_BACKOFF_WAIT_MS = 0;\nInMemoryJSONEventBuffer.RETRY_SHORT_BACKOFF_MS = 1000;\nInMemoryJSONEventBuffer.RETRY_LONG_BACKOFF_MS = 15000;\nInMemoryJSONEventBuffer.MAX_PAYLOAD_ITEMS = 2;\nInMemoryJSONEventBuffer.MAX_ITEM_SIZE_BYTES_ALLOWED = 3000;\n//# sourceMappingURL=InMemoryJSONEventBuffer.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Destroyable_1 = require(\"../destroyable/Destroyable\");\nconst InMemoryJSONEventBuffer_1 = __importDefault(require(\"../eventbuffer/InMemoryJSONEventBuffer\"));\nclass DefaultMeetingEventReporter {\n constructor(eventIngestionConfiguration, logger) {\n this.reportingEvents = false;\n this.importantEvents = [\n 'meetingEnded',\n 'meetingFailed',\n 'meetingStartFailed',\n 'audioInputFailed',\n 'videoInputFailed',\n 'meetingStartSucceeded',\n 'deviceLabelTriggerFailed',\n ];\n this.destroyed = false;\n const { eventsClientConfiguration, ingestionURL, eventBufferConfiguration, } = eventIngestionConfiguration;\n const { eventsToIgnore } = eventsClientConfiguration;\n this.eventBuffer = new InMemoryJSONEventBuffer_1.default(eventBufferConfiguration, eventsClientConfiguration, ingestionURL, this.importantEvents, logger);\n this.logger = logger;\n this.eventsToIgnore = eventsToIgnore;\n this.start();\n }\n start() {\n if (this.reportingEvents) {\n return;\n }\n try {\n this.eventBuffer.start();\n this.logger.info('Event reporting started');\n this.reportingEvents = true;\n }\n catch (error) {\n /* istanbul ignore next */\n this.logger.error(`Event Reporting - Error starting the event buffer ${error}`);\n }\n }\n stop() {\n if (!this.reportingEvents) {\n return;\n }\n try {\n this.eventBuffer.stop();\n this.logger.info('Event reporting stopped');\n this.reportingEvents = false;\n }\n catch (error) {\n /* istanbul ignore next */\n this.logger.error(`Event Reporting - Error stopping the event buffer ${error}`);\n }\n }\n reportEvent(ts, name, attributes) {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.debug(`Event Reporting - DefaultMeetingEventReporter - event received in reportEvent ${ts}, ${name}, ${JSON.stringify(attributes)}`);\n if (this.eventsToIgnore.includes(name)) {\n this.logger.debug(`Event Reporting - DefaultMeetingEventReporter - ${name} event will be ignored as it is in events to ignore`);\n return;\n }\n try {\n this.logger.debug(`Event Reporting - DefaultMeetingEventReporter - adding item to event buffer`);\n yield this.eventBuffer.addItem({ ts, name, attributes });\n }\n catch (error) {\n this.logger.error(`Event Reporting - Error adding event to buffer ${error}`);\n }\n });\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyed = true;\n this.stop();\n /* istanbul ignore else */\n if (Destroyable_1.isDestroyable(this.eventBuffer)) {\n this.eventBuffer.destroy();\n }\n this.eventBuffer = undefined;\n });\n }\n}\nexports.default = DefaultMeetingEventReporter;\n//# sourceMappingURL=DefaultMeetingEventReporter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingEventsClientConfiguration]] contains necessary information to\n * report meeting events metadata to each event while sending events to the ingestion service.\n */\nclass MeetingEventsClientConfiguration {\n constructor(meetingId, attendeeId, authenticationToken, eventsToIgnore = []) {\n this.type = 'Meet';\n this.v = 1;\n this.meetingId = meetingId;\n this.attendeeId = attendeeId;\n this.eventsToIgnore = eventsToIgnore;\n this.authenticationToken = authenticationToken;\n }\n getAuthenticationToken() {\n return this.authenticationToken;\n }\n toJSON() {\n const attributes = {};\n attributes.type = this.type;\n attributes.v = this.v;\n attributes.meetingId = this.meetingId;\n attributes.attendeeId = this.attendeeId;\n return attributes;\n }\n}\nexports.default = MeetingEventsClientConfiguration;\n//# sourceMappingURL=MeetingEventsClientConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n *\n * @param attributes Event attributes to flatten.\n * @returns flattened event attributes.\n * Note: This function needs to be extended to support 'Array', 'object'\n * as value types within the event attributes if added later.\n */\nconst flattenEventAttributes = (attributes) => {\n const flattenedAttributes = {};\n for (const [key, value] of Object.entries(attributes)) {\n if (value === null || value === undefined || value === '') {\n continue;\n }\n else if (typeof value === 'number' || typeof value === 'string') {\n flattenedAttributes[key] = value;\n }\n else {\n throw new TypeError('Unhandled type received while flattening attributes.');\n }\n }\n return flattenedAttributes;\n};\nexports.default = flattenEventAttributes;\n//# sourceMappingURL=flattenEventAttributes.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ua_parser_js_1 = require(\"ua-parser-js\");\nconst Destroyable_1 = require(\"../destroyable/Destroyable\");\nconst EventIngestionConfiguration_1 = __importDefault(require(\"../eventingestionconfiguration/EventIngestionConfiguration\"));\nconst DefaultMeetingEventReporter_1 = __importDefault(require(\"../eventreporter/DefaultMeetingEventReporter\"));\nconst MeetingEventsClientConfiguration_1 = __importDefault(require(\"../eventsclientconfiguration/MeetingEventsClientConfiguration\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nconst flattenEventAttributes_1 = __importDefault(require(\"./flattenEventAttributes\"));\nclass DefaultEventController {\n constructor(configuration, logger, eventReporter) {\n var _a, _b, _c, _d, _e, _f, _g;\n this.meetingHistoryStates = [];\n this.observerSet = new Set();\n this.destroyed = false;\n this.logger = logger;\n this.configuration = configuration;\n this.setupEventReporter(configuration, logger, eventReporter);\n try {\n this.parserResult =\n navigator && navigator.userAgent ? new ua_parser_js_1.UAParser(navigator.userAgent).getResult() : null;\n }\n catch (error) {\n // This seems to never happen with ua-parser-js in reality, even with malformed strings.\n /* istanbul ignore next */\n this.logger.error(error.message);\n }\n this.browserMajorVersion =\n ((_c = (_b = (_a = this.parserResult) === null || _a === void 0 ? void 0 : _a.browser) === null || _b === void 0 ? void 0 : _b.version) === null || _c === void 0 ? void 0 : _c.split('.')[0]) || DefaultEventController.UNAVAILABLE;\n this.browserName = ((_d = this.parserResult) === null || _d === void 0 ? void 0 : _d.browser.name) || DefaultEventController.UNAVAILABLE;\n this.browserVersion = ((_e = this.parserResult) === null || _e === void 0 ? void 0 : _e.browser.version) || DefaultEventController.UNAVAILABLE;\n this.deviceName =\n [((_f = this.parserResult) === null || _f === void 0 ? void 0 : _f.device.vendor) || '', ((_g = this.parserResult) === null || _g === void 0 ? void 0 : _g.device.model) || '']\n .join(' ')\n .trim() || DefaultEventController.UNAVAILABLE;\n }\n addObserver(observer) {\n this.observerSet.add(observer);\n }\n removeObserver(observer) {\n this.observerSet.delete(observer);\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerSet) {\n AsyncScheduler_1.default.nextTick(() => {\n /* istanbul ignore else */\n if (this.observerSet.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n publishEvent(name, attributes) {\n return __awaiter(this, void 0, void 0, function* () {\n const timestampMs = Date.now();\n this.meetingHistoryStates.push({\n name,\n timestampMs,\n });\n // Make a single frozen copy of the event, reusing the object returned by\n // `getAttributes` to avoid copying too much.\n const eventAttributes = Object.freeze(Object.assign(this.getAttributes(timestampMs), attributes));\n // Publishes event to observers\n this.forEachObserver((observer) => {\n observer.eventDidReceive(name, eventAttributes);\n });\n // Reports event to the ingestion service\n this.reportEvent(name, timestampMs, attributes);\n });\n }\n reportEvent(name, timestampMs, attributes) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n let flattenedAttributes;\n try {\n if (attributes) {\n flattenedAttributes = flattenEventAttributes_1.default(attributes);\n }\n yield ((_a = this.eventReporter) === null || _a === void 0 ? void 0 : _a.reportEvent(timestampMs, name, flattenedAttributes));\n }\n catch (error) {\n /* istanbul ignore next */\n this.logger.error(`Error reporting event ${error}`);\n }\n });\n }\n setupEventReporter(configuration, logger, eventReporter) {\n if (eventReporter) {\n this._eventReporter = eventReporter;\n }\n else if (configuration.urls) {\n // Attempts to set up a event reporter using the meeting configuration if one is not provided\n const eventIngestionURL = configuration.urls.eventIngestionURL;\n if (eventIngestionURL) {\n this.logger.info(`Event ingestion URL is present in the configuration`);\n const { meetingId, credentials: { attendeeId, joinToken }, } = configuration;\n const meetingEventsClientConfiguration = new MeetingEventsClientConfiguration_1.default(meetingId, attendeeId, joinToken);\n const eventIngestionConfiguration = new EventIngestionConfiguration_1.default(meetingEventsClientConfiguration, eventIngestionURL);\n this._eventReporter = new DefaultMeetingEventReporter_1.default(eventIngestionConfiguration, logger);\n }\n }\n }\n getAttributes(timestampMs) {\n var _a, _b;\n return {\n attendeeId: this.configuration.credentials.attendeeId,\n browserMajorVersion: this.browserMajorVersion,\n browserName: this.browserName,\n browserVersion: this.browserVersion,\n deviceName: this.deviceName,\n externalMeetingId: typeof this.configuration.externalMeetingId === 'string'\n ? this.configuration.externalMeetingId\n : '',\n externalUserId: this.configuration.credentials.externalUserId,\n meetingHistory: this.meetingHistoryStates,\n meetingId: this.configuration.meetingId,\n osName: ((_a = this.parserResult) === null || _a === void 0 ? void 0 : _a.os.name) || DefaultEventController.UNAVAILABLE,\n osVersion: ((_b = this.parserResult) === null || _b === void 0 ? void 0 : _b.os.version) || DefaultEventController.UNAVAILABLE,\n sdkVersion: Versioning_1.default.sdkVersion,\n sdkName: Versioning_1.default.sdkName,\n timestampMs,\n };\n }\n get eventReporter() {\n return this._eventReporter;\n }\n /**\n * Clean up this instance and resources that it created.\n *\n * After calling `destroy`, internal fields like `eventReporter` will be unavailable.\n */\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Destroyable_1.isDestroyable(this.eventReporter)) {\n yield this.eventReporter.destroy();\n }\n this.logger = undefined;\n this.configuration = undefined;\n this._eventReporter = undefined;\n this.destroyed = true;\n });\n }\n}\nexports.default = DefaultEventController;\nDefaultEventController.UNAVAILABLE = 'Unavailable';\n//# sourceMappingURL=DefaultEventController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[MeetingReadinessCheckerConfiguration]] includes custom settings used for MeetingReadinessChecker\n */\nclass MeetingReadinessCheckerConfiguration {\n constructor() {\n /**\n * Specify how long to wait for each check in a test.\n * If null, it will use the default value.\n */\n this.timeoutMs = 10000;\n /**\n * Specify the wait time before checking again when a check condition is not met.\n * If null, it will use the default value.\n */\n this.waitDurationMs = 3000;\n /**\n * Specify the frequency of oscillation in hertz for the audio output test.\n */\n this.audioOutputFrequency = 440;\n /**\n * Specify the gain value from 0 to 1.0 for the audio output test.\n */\n this.audioOutputGain = 0.1;\n }\n}\nexports.default = MeetingReadinessCheckerConfiguration;\n//# sourceMappingURL=MeetingReadinessCheckerConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultAudioMixController_1 = __importDefault(require(\"../audiomixcontroller/DefaultAudioMixController\"));\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst DefaultDeviceController_1 = __importDefault(require(\"../devicecontroller/DefaultDeviceController\"));\nconst PermissionDeniedError_1 = __importDefault(require(\"../devicecontroller/PermissionDeniedError\"));\nconst BaseTask_1 = __importDefault(require(\"../task/BaseTask\"));\nconst TimeoutTask_1 = __importDefault(require(\"../task/TimeoutTask\"));\nconst CheckAudioConnectivityFeedback_1 = __importDefault(require(\"./CheckAudioConnectivityFeedback\"));\nconst CheckAudioInputFeedback_1 = __importDefault(require(\"./CheckAudioInputFeedback\"));\nconst CheckAudioOutputFeedback_1 = __importDefault(require(\"./CheckAudioOutputFeedback\"));\nconst CheckCameraResolutionFeedback_1 = __importDefault(require(\"./CheckCameraResolutionFeedback\"));\nconst CheckContentShareConnectivityFeedback_1 = __importDefault(require(\"./CheckContentShareConnectivityFeedback\"));\nconst CheckNetworkTCPConnectivityFeedback_1 = __importDefault(require(\"./CheckNetworkTCPConnectivityFeedback\"));\nconst CheckNetworkUDPConnectivityFeedback_1 = __importDefault(require(\"./CheckNetworkUDPConnectivityFeedback\"));\nconst CheckVideoConnectivityFeedback_1 = __importDefault(require(\"./CheckVideoConnectivityFeedback\"));\nconst CheckVideoInputFeedback_1 = __importDefault(require(\"./CheckVideoInputFeedback\"));\nconst MeetingReadinessCheckerConfiguration_1 = __importDefault(require(\"./MeetingReadinessCheckerConfiguration\"));\nclass DefaultMeetingReadinessChecker {\n constructor(logger, meetingSession, configuration = new MeetingReadinessCheckerConfiguration_1.default()) {\n this.logger = logger;\n this.meetingSession = meetingSession;\n this.configuration = configuration;\n this.browserBehavior = new DefaultBrowserBehavior_1.default();\n }\n static delay(timeoutMs) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise(resolve => setTimeout(resolve, timeoutMs));\n });\n }\n checkAudioInput(audioInputDevice) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.meetingSession.audioVideo.startAudioInput(audioInputDevice);\n yield this.meetingSession.audioVideo.stopAudioInput();\n return CheckAudioInputFeedback_1.default.Succeeded;\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Audio input check failed with error ${error}`);\n if (error instanceof PermissionDeniedError_1.default) {\n return CheckAudioInputFeedback_1.default.PermissionDenied;\n }\n return CheckAudioInputFeedback_1.default.Failed;\n }\n });\n }\n checkAudioOutput(audioOutputDeviceInfo, audioOutputVerificationCallback, audioElement = null) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const audioOutputDeviceId = audioOutputDeviceInfo\n ? DefaultDeviceController_1.default.getIntrinsicDeviceId(audioOutputDeviceInfo)\n : '';\n yield this.playTone(audioOutputDeviceId, this.configuration.audioOutputFrequency, audioElement);\n const userFeedback = yield audioOutputVerificationCallback();\n if (userFeedback) {\n return CheckAudioOutputFeedback_1.default.Succeeded;\n }\n return CheckAudioOutputFeedback_1.default.Failed;\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Audio output check failed with error: ${error}`);\n return CheckAudioOutputFeedback_1.default.Failed;\n }\n finally {\n this.stopTone();\n }\n });\n }\n playTone(sinkId, frequency, audioElement) {\n return __awaiter(this, void 0, void 0, function* () {\n const rampSec = 0.1;\n const maxGainValue = this.configuration.audioOutputGain;\n if (this.oscillatorNode) {\n this.stopTone();\n }\n this.audioContext = DefaultDeviceController_1.default.getAudioContext();\n this.gainNode = this.audioContext.createGain();\n this.gainNode.gain.value = 0;\n this.oscillatorNode = this.audioContext.createOscillator();\n this.oscillatorNode.frequency.value = frequency;\n this.oscillatorNode.connect(this.gainNode);\n this.destinationStream = this.audioContext.createMediaStreamDestination();\n this.gainNode.connect(this.destinationStream);\n const currentTime = this.audioContext.currentTime;\n const startTime = currentTime + 0.1;\n this.gainNode.gain.linearRampToValueAtTime(0, startTime);\n this.gainNode.gain.linearRampToValueAtTime(maxGainValue, startTime + rampSec);\n this.oscillatorNode.start();\n // Because we always use `DefaultAudioMixController`, and both this class\n // and DAMC use `DefaultBrowserBehavior`, it is not possible for the `bindAudioDevice` call here to throw.\n // Nevertheless, we `catch` here and disable code coverage.\n const audioMixController = new DefaultAudioMixController_1.default(this.logger);\n try {\n if (this.browserBehavior.supportsSetSinkId()) {\n yield audioMixController.bindAudioDevice({ deviceId: sinkId });\n }\n }\n catch (e) {\n /* istanbul ignore next */\n this.logger.error(`Failed to bind audio device: ${e}`);\n }\n try {\n yield audioMixController.bindAudioElement(audioElement || new Audio());\n }\n catch (e) {\n this.logger.error(`Failed to bind audio element: ${e}`);\n }\n yield audioMixController.bindAudioStream(this.destinationStream.stream);\n });\n }\n stopTone() {\n if (!this.audioContext || !this.gainNode || !this.oscillatorNode || !this.destinationStream) {\n return;\n }\n const durationSec = 1;\n const rampSec = 0.1;\n const maxGainValue = this.configuration.audioOutputGain;\n const currentTime = this.audioContext.currentTime;\n this.gainNode.gain.linearRampToValueAtTime(maxGainValue, currentTime + rampSec + durationSec);\n this.gainNode.gain.linearRampToValueAtTime(0, currentTime + rampSec * 2 + durationSec);\n this.oscillatorNode.stop();\n this.oscillatorNode.disconnect(this.gainNode);\n this.gainNode.disconnect(this.destinationStream);\n this.oscillatorNode = null;\n this.gainNode = null;\n this.destinationStream = null;\n }\n checkVideoInput(videoInputDevice) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.meetingSession.audioVideo.startVideoInput(videoInputDevice);\n yield this.meetingSession.audioVideo.stopVideoInput();\n return CheckVideoInputFeedback_1.default.Succeeded;\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Video check failed with error ${error}`);\n if (error instanceof PermissionDeniedError_1.default) {\n return CheckVideoInputFeedback_1.default.PermissionDenied;\n }\n return CheckVideoInputFeedback_1.default.Failed;\n }\n });\n }\n checkCameraResolution(videoInputDevice, width, height) {\n return __awaiter(this, void 0, void 0, function* () {\n let stream;\n try {\n const videoInputDeviceId = DefaultDeviceController_1.default.getIntrinsicDeviceId(videoInputDevice);\n const videoConstraint = {\n video: this.calculateVideoConstraint(videoInputDeviceId, width, height),\n };\n stream = yield navigator.mediaDevices.getUserMedia(videoConstraint);\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Camera resolution check with width: ${width} height ${height} failed with error ${error}`);\n if (error && error.name === 'OverconstrainedError') {\n return CheckCameraResolutionFeedback_1.default.ResolutionNotSupported;\n }\n if (error && error.name === 'NotAllowedError') {\n return CheckCameraResolutionFeedback_1.default.PermissionDenied;\n }\n return CheckCameraResolutionFeedback_1.default.Failed;\n }\n finally {\n if (stream) {\n stream.getTracks().forEach(function (track) {\n track.stop();\n });\n }\n }\n return CheckCameraResolutionFeedback_1.default.Succeeded;\n });\n }\n calculateVideoConstraint(videoInputDeviceId, width, height) {\n const dimension = this.browserBehavior.requiresResolutionAlignment(width, height);\n const trackConstraints = {};\n if (this.browserBehavior.requiresNoExactMediaStreamConstraints()) {\n trackConstraints.deviceId = videoInputDeviceId;\n trackConstraints.width = width;\n trackConstraints.height = height;\n }\n else {\n trackConstraints.deviceId = { exact: videoInputDeviceId };\n trackConstraints.width = { exact: dimension[0] };\n trackConstraints.height = { exact: dimension[1] };\n }\n return trackConstraints;\n }\n checkContentShareConnectivity(sourceId) {\n return __awaiter(this, void 0, void 0, function* () {\n let isContentShareStarted = false;\n let isAudioVideoStarted = false;\n const contentShareObserver = {\n contentShareDidStart: () => {\n isContentShareStarted = true;\n },\n };\n const observer = {\n audioVideoDidStart: () => {\n isAudioVideoStarted = true;\n },\n };\n try {\n this.meetingSession.audioVideo.addObserver(observer);\n this.meetingSession.audioVideo.start();\n this.meetingSession.audioVideo.addContentShareObserver(contentShareObserver);\n yield this.meetingSession.audioVideo.startContentShareFromScreenCapture(sourceId);\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return isAudioVideoStarted && isContentShareStarted;\n }));\n if (!isAudioVideoStarted) {\n return CheckContentShareConnectivityFeedback_1.default.ConnectionFailed;\n }\n yield this.stopMeeting();\n return isContentShareStarted\n ? CheckContentShareConnectivityFeedback_1.default.Succeeded\n : CheckContentShareConnectivityFeedback_1.default.TimedOut;\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Content share check failed with error ${error}`);\n if (error.name === 'NotAllowedError') {\n return CheckContentShareConnectivityFeedback_1.default.PermissionDenied;\n }\n else {\n return CheckContentShareConnectivityFeedback_1.default.Failed;\n }\n }\n finally {\n this.meetingSession.audioVideo.removeObserver(observer);\n this.meetingSession.audioVideo.stopContentShare();\n this.meetingSession.audioVideo.removeContentShareObserver(contentShareObserver);\n }\n });\n }\n checkAudioConnectivity(audioInputDevice) {\n return __awaiter(this, void 0, void 0, function* () {\n let audioPresence = false;\n const audioConnectivityMetrics = {\n packetsReceived: 0,\n };\n const audioVideo = this.meetingSession.audioVideo;\n const checkAudioConnectivityMetricsObserver = {\n metricsDidReceive(clientMetricReport) {\n clientMetricReport.getRTCStatsReport().forEach(report => {\n // TODO: remove mediaType in next version as it is deprecated\n // mediaType was deprecated and replaced with kind\n if (report.type === 'inbound-rtp' &&\n (report.mediaType === 'audio' || report.kind === 'audio')) {\n audioConnectivityMetrics.packetsReceived = report.packetsReceived;\n }\n });\n },\n };\n const attendeePresenceHandler = (attendeeId, present, _externalUserId, _dropped) => {\n if (attendeeId === this.meetingSession.configuration.credentials.attendeeId && present) {\n audioPresence = true;\n }\n };\n try {\n yield audioVideo.startAudioInput(audioInputDevice);\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Failed to get audio input device with error ${error}`);\n if (error instanceof PermissionDeniedError_1.default) {\n return CheckAudioConnectivityFeedback_1.default.AudioInputPermissionDenied;\n }\n return CheckAudioConnectivityFeedback_1.default.AudioInputRequestFailed;\n }\n audioVideo.realtimeSubscribeToAttendeeIdPresence(attendeePresenceHandler);\n audioVideo.addObserver(checkAudioConnectivityMetricsObserver);\n if (!(yield this.startMeeting())) {\n audioVideo.removeObserver(checkAudioConnectivityMetricsObserver);\n audioVideo.realtimeUnsubscribeToAttendeeIdPresence(attendeePresenceHandler);\n yield this.meetingSession.audioVideo.stopAudioInput();\n return CheckAudioConnectivityFeedback_1.default.ConnectionFailed;\n }\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return this.isAudioConnectionSuccessful(audioPresence, audioConnectivityMetrics);\n }));\n audioVideo.removeObserver(checkAudioConnectivityMetricsObserver);\n audioVideo.realtimeUnsubscribeToAttendeeIdPresence(attendeePresenceHandler);\n yield this.stopMeeting();\n yield this.meetingSession.audioVideo.stopAudioInput();\n return this.isAudioConnectionSuccessful(audioPresence, audioConnectivityMetrics)\n ? CheckAudioConnectivityFeedback_1.default.Succeeded\n : CheckAudioConnectivityFeedback_1.default.AudioNotReceived;\n });\n }\n checkVideoConnectivity(videoInputDevice) {\n return __awaiter(this, void 0, void 0, function* () {\n const audioVideo = this.meetingSession.audioVideo;\n let packetsSent = 0;\n const observer = {\n metricsDidReceive(clientMetricReport) {\n const rawStats = clientMetricReport.getRTCStatsReport();\n rawStats.forEach(report => {\n // TODO: remove mediaType in next version as it is deprecated\n if (report.type === 'outbound-rtp' &&\n (report.mediaType === 'video' || report.kind === 'video')) {\n packetsSent = report.packetsSent;\n }\n });\n },\n };\n try {\n yield audioVideo.startVideoInput(videoInputDevice);\n }\n catch (error) {\n this.logger.error(`MeetingReadinessChecker: Failed to get video input device with error ${error}`);\n if (error instanceof PermissionDeniedError_1.default) {\n return CheckVideoConnectivityFeedback_1.default.VideoInputPermissionDenied;\n }\n return CheckVideoConnectivityFeedback_1.default.VideoInputRequestFailed;\n }\n audioVideo.addObserver(observer);\n if (!(yield this.startMeeting())) {\n return CheckVideoConnectivityFeedback_1.default.ConnectionFailed;\n }\n audioVideo.startLocalVideoTile();\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return packetsSent > 0;\n }));\n yield audioVideo.stopVideoInput();\n yield this.stopMeeting();\n audioVideo.removeObserver(observer);\n if (packetsSent <= 0) {\n return CheckVideoConnectivityFeedback_1.default.VideoNotSent;\n }\n return CheckVideoConnectivityFeedback_1.default.Succeeded;\n });\n }\n checkNetworkUDPConnectivity() {\n return __awaiter(this, void 0, void 0, function* () {\n let candidatePairSucceed = false;\n const observer = {\n metricsDidReceive(clientMetricReport) {\n const rawStats = clientMetricReport.getRTCStatsReport();\n rawStats.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n candidatePairSucceed = true;\n }\n });\n },\n };\n try {\n this.originalURLRewriter = this.meetingSession.configuration.urls.urlRewriter;\n }\n catch (error) {\n this.logger.error(`MeetingSessionConfiguration.urls doesn't exist. Error: ${error}`);\n return CheckNetworkUDPConnectivityFeedback_1.default.MeetingSessionURLsNotInitialized;\n }\n this.meetingSession.configuration.urls.urlRewriter = (uri) => {\n const transformedUri = this.originalURLRewriter(uri);\n if (transformedUri.includes('transport=tcp')) {\n return '';\n }\n return transformedUri;\n };\n const audioVideo = this.meetingSession.audioVideo;\n audioVideo.addObserver(observer);\n if (!(yield this.startMeeting())) {\n this.meetingSession.configuration.urls.urlRewriter = this.originalURLRewriter;\n return CheckNetworkUDPConnectivityFeedback_1.default.ConnectionFailed;\n }\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return candidatePairSucceed;\n }));\n this.meetingSession.configuration.urls.urlRewriter = this.originalURLRewriter;\n yield this.stopMeeting();\n audioVideo.removeObserver(observer);\n if (!candidatePairSucceed) {\n return CheckNetworkUDPConnectivityFeedback_1.default.ICENegotiationFailed;\n }\n return CheckNetworkUDPConnectivityFeedback_1.default.Succeeded;\n });\n }\n checkNetworkTCPConnectivity() {\n return __awaiter(this, void 0, void 0, function* () {\n let candidatePairSucceed = false;\n const observer = {\n metricsDidReceive(clientMetricReport) {\n const rawStats = clientMetricReport.getRTCStatsReport();\n rawStats.forEach(report => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n candidatePairSucceed = true;\n }\n });\n },\n };\n try {\n this.originalURLRewriter = this.meetingSession.configuration.urls.urlRewriter;\n }\n catch (error) {\n this.logger.error(`MeetingSessionConfiguration.urls doesn't exist. Error: ${error}`);\n return CheckNetworkTCPConnectivityFeedback_1.default.MeetingSessionURLsNotInitialized;\n }\n this.meetingSession.configuration.urls.urlRewriter = (uri) => {\n const transformedUri = this.originalURLRewriter(uri);\n if (transformedUri.includes('transport=udp')) {\n return '';\n }\n return transformedUri;\n };\n const audioVideo = this.meetingSession.audioVideo;\n audioVideo.addObserver(observer);\n if (!(yield this.startMeeting())) {\n this.meetingSession.configuration.urls.urlRewriter = this.originalURLRewriter;\n return CheckNetworkTCPConnectivityFeedback_1.default.ConnectionFailed;\n }\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return candidatePairSucceed;\n }));\n this.meetingSession.configuration.urls.urlRewriter = this.originalURLRewriter;\n yield this.stopMeeting();\n audioVideo.removeObserver(observer);\n if (!candidatePairSucceed) {\n return CheckNetworkTCPConnectivityFeedback_1.default.ICENegotiationFailed;\n }\n return CheckNetworkTCPConnectivityFeedback_1.default.Succeeded;\n });\n }\n startMeeting() {\n return __awaiter(this, void 0, void 0, function* () {\n let isStarted = false;\n const observer = {\n audioVideoDidStart: () => {\n isStarted = true;\n },\n };\n this.meetingSession.audioVideo.addObserver(observer);\n this.meetingSession.audioVideo.start();\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return isStarted;\n }));\n this.meetingSession.audioVideo.removeObserver(observer);\n return isStarted;\n });\n }\n stopMeeting() {\n return __awaiter(this, void 0, void 0, function* () {\n let isStopped = false;\n const observer = {\n audioVideoDidStop: (_sessionStatus) => {\n isStopped = true;\n },\n };\n this.meetingSession.audioVideo.addObserver(observer);\n this.meetingSession.audioVideo.stop();\n yield this.executeTimeoutTask(() => __awaiter(this, void 0, void 0, function* () {\n return isStopped;\n }));\n this.meetingSession.audioVideo.removeObserver(observer);\n return isStopped;\n });\n }\n executeTimeoutTask(conditionCheck) {\n return __awaiter(this, void 0, void 0, function* () {\n let isSuccess = false;\n class CheckForConditionTask extends BaseTask_1.default {\n constructor(logger, waitDurationMs) {\n super(logger);\n this.waitDurationMs = waitDurationMs;\n this.isCancelled = false;\n }\n cancel() {\n this.isCancelled = true;\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n while (!this.isCancelled) {\n if (yield conditionCheck()) {\n isSuccess = true;\n break;\n }\n yield DefaultMeetingReadinessChecker.delay(this.waitDurationMs);\n }\n });\n }\n }\n const timeoutTask = new TimeoutTask_1.default(this.logger, new CheckForConditionTask(this.logger, this.configuration.waitDurationMs), this.configuration.timeoutMs);\n yield timeoutTask.run();\n return isSuccess;\n });\n }\n isAudioConnectionSuccessful(audioPresence, audioConnectivityMetrics) {\n return audioPresence && audioConnectivityMetrics.packetsReceived > 0;\n }\n}\nexports.default = DefaultMeetingReadinessChecker;\n//# sourceMappingURL=DefaultMeetingReadinessChecker.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst TimeoutScheduler_1 = __importDefault(require(\"../scheduler/TimeoutScheduler\"));\nclass DefaultReconnectController {\n constructor(reconnectTimeoutMs, backoffPolicy) {\n this.reconnectTimeoutMs = reconnectTimeoutMs;\n this.backoffPolicy = backoffPolicy;\n this.shouldReconnect = true;\n this.onlyRestartPeerConnection = false;\n this.firstConnectionAttempted = false;\n this.firstConnectionAttemptTimestampMs = 0;\n this.lastActiveTimestampMs = Infinity;\n this._isFirstConnection = true;\n this.backoffTimer = null;\n this.backoffCancel = null;\n this.reset();\n }\n timeSpentReconnectingMs() {\n if (!this.firstConnectionAttempted) {\n return 0;\n }\n return Date.now() - this.firstConnectionAttemptTimestampMs;\n }\n hasPastReconnectDeadline() {\n if (Date.now() - this.lastActiveTimestampMs >= this.reconnectTimeoutMs) {\n return true;\n }\n return this.timeSpentReconnectingMs() >= this.reconnectTimeoutMs;\n }\n reset() {\n this.cancel();\n this.shouldReconnect = true;\n this.onlyRestartPeerConnection = false;\n this.firstConnectionAttempted = false;\n this.firstConnectionAttemptTimestampMs = 0;\n this.lastActiveTimestampMs = Infinity;\n this.backoffPolicy.reset();\n }\n startedConnectionAttempt(isFirstConnection) {\n this._isFirstConnection = isFirstConnection;\n if (!this.firstConnectionAttempted) {\n this.firstConnectionAttempted = true;\n this.firstConnectionAttemptTimestampMs = Date.now();\n }\n }\n hasStartedConnectionAttempt() {\n return this.firstConnectionAttempted;\n }\n isFirstConnection() {\n return this._isFirstConnection;\n }\n disableReconnect() {\n this.shouldReconnect = false;\n }\n enableRestartPeerConnection() {\n this.onlyRestartPeerConnection = true;\n }\n cancel() {\n this.disableReconnect();\n if (this.backoffTimer) {\n this.backoffTimer.stop();\n if (this.backoffCancel) {\n this.backoffCancel();\n this.backoffCancel = null;\n }\n }\n }\n retryWithBackoff(retryFunc, cancelFunc) {\n const willRetry = this.shouldReconnect && !this.hasPastReconnectDeadline();\n if (willRetry) {\n this.backoffCancel = cancelFunc;\n this.backoffTimer = new TimeoutScheduler_1.default(this.backoffPolicy.nextBackoffAmountMs());\n this.backoffTimer.start(() => {\n this.backoffCancel = null;\n retryFunc();\n });\n }\n return willRetry;\n }\n shouldOnlyRestartPeerConnection() {\n return this.onlyRestartPeerConnection;\n }\n clone() {\n return new DefaultReconnectController(this.reconnectTimeoutMs, this.backoffPolicy);\n }\n setLastActiveTimestampMs(timestampMs) {\n this.lastActiveTimestampMs = timestampMs;\n }\n}\nexports.default = DefaultReconnectController;\n//# sourceMappingURL=DefaultReconnectController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nconst WebSocketReadyState_1 = __importDefault(require(\"./WebSocketReadyState\"));\nclass DefaultWebSocketAdapter {\n constructor(logger) {\n this.logger = logger;\n }\n create(url, protocols, isSignedUrl) {\n this.connection = new WebSocket(isSignedUrl ? url : Versioning_1.default.urlWithVersion(url), protocols);\n this.connection.binaryType = 'arraybuffer';\n }\n send(message) {\n if (!this.connection) {\n this.logger.error('WebSocket not yet created or already destroyed.');\n return false;\n }\n try {\n if (message instanceof Uint8Array) {\n this.connection.send(message.buffer);\n }\n else {\n this.connection.send(message);\n }\n return true;\n }\n catch (err) {\n this.logger.debug(() => `send error: ${err.message}, websocket state=${WebSocketReadyState_1.default[this.readyState()]}`);\n return false;\n }\n }\n close(code, reason) {\n var _a;\n (_a = this.connection) === null || _a === void 0 ? void 0 : _a.close(code, reason);\n }\n destroy() {\n this.connection = undefined;\n }\n addEventListener(handler, eventListener) {\n /* istanbul ignore if */\n if (!this.connection) {\n this.logger.warn('Cannot add event listener with no WebSocket connection.');\n return;\n }\n this.connection.addEventListener(handler, eventListener);\n }\n removeEventListener(handler, eventListener) {\n var _a;\n (_a = this.connection) === null || _a === void 0 ? void 0 : _a.removeEventListener(handler, eventListener);\n }\n readyState() {\n if (!this.connection) {\n return WebSocketReadyState_1.default.None;\n }\n switch (this.connection.readyState) {\n case WebSocket.CONNECTING:\n return WebSocketReadyState_1.default.Connecting;\n case WebSocket.OPEN:\n return WebSocketReadyState_1.default.Open;\n case WebSocket.CLOSING:\n return WebSocketReadyState_1.default.Closing;\n case WebSocket.CLOSED:\n return WebSocketReadyState_1.default.Closed;\n }\n }\n}\nexports.default = DefaultWebSocketAdapter;\n//# sourceMappingURL=DefaultWebSocketAdapter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultAudioVideoController_1 = __importDefault(require(\"../audiovideocontroller/DefaultAudioVideoController\"));\nconst DefaultAudioVideoFacade_1 = __importDefault(require(\"../audiovideofacade/DefaultAudioVideoFacade\"));\nconst FullJitterBackoff_1 = __importDefault(require(\"../backoff/FullJitterBackoff\"));\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst ContentShareMediaStreamBroker_1 = __importDefault(require(\"../contentsharecontroller/ContentShareMediaStreamBroker\"));\nconst DefaultContentShareController_1 = __importDefault(require(\"../contentsharecontroller/DefaultContentShareController\"));\nconst CSPMonitor_1 = __importDefault(require(\"../cspmonitor/CSPMonitor\"));\nconst Destroyable_1 = require(\"../destroyable/Destroyable\");\nconst DefaultEventController_1 = __importDefault(require(\"../eventcontroller/DefaultEventController\"));\nconst DefaultReconnectController_1 = __importDefault(require(\"../reconnectcontroller/DefaultReconnectController\"));\nconst DefaultWebSocketAdapter_1 = __importDefault(require(\"../websocketadapter/DefaultWebSocketAdapter\"));\nclass DefaultMeetingSession {\n constructor(configuration, logger, deviceController, _eventController) {\n this._eventController = _eventController;\n this._configuration = configuration;\n this._logger = logger;\n this.checkBrowserSupportAndFeatureConfiguration();\n CSPMonitor_1.default.addLogger(this._logger);\n CSPMonitor_1.default.register();\n if (!this._eventController) {\n this._eventController = new DefaultEventController_1.default(configuration, logger);\n }\n /* istanbul ignore else */\n if (!deviceController.eventController) {\n deviceController.eventController = this.eventController;\n }\n this.audioVideoController = new DefaultAudioVideoController_1.default(this._configuration, this._logger, new DefaultWebSocketAdapter_1.default(this._logger), deviceController, new DefaultReconnectController_1.default(this._configuration.reconnectTimeoutMs, new FullJitterBackoff_1.default(this._configuration.reconnectFixedWaitMs, this._configuration.reconnectShortBackOffMs, this._configuration.reconnectLongBackOffMs)), this.eventController);\n this._deviceController = deviceController;\n this.logger.info(`MeetingFeatures: ${JSON.stringify(configuration.meetingFeatures)}`);\n const contentShareMediaStreamBroker = new ContentShareMediaStreamBroker_1.default(this._logger);\n this.contentShareController = new DefaultContentShareController_1.default(contentShareMediaStreamBroker, new DefaultAudioVideoController_1.default(DefaultContentShareController_1.default.createContentShareMeetingSessionConfigure(this._configuration), this._logger, new DefaultWebSocketAdapter_1.default(this._logger), contentShareMediaStreamBroker, new DefaultReconnectController_1.default(this._configuration.reconnectTimeoutMs, new FullJitterBackoff_1.default(this._configuration.reconnectFixedWaitMs, this._configuration.reconnectShortBackOffMs, this._configuration.reconnectLongBackOffMs))), this.audioVideoController);\n this.audioVideoFacade = new DefaultAudioVideoFacade_1.default(this.audioVideoController, this.audioVideoController.videoTileController, this.audioVideoController.realtimeController, this.audioVideoController.audioMixController, this._deviceController, this.contentShareController);\n }\n get configuration() {\n return this._configuration;\n }\n get logger() {\n return this._logger;\n }\n get audioVideo() {\n return this.audioVideoFacade;\n }\n get contentShare() {\n return this.contentShareController;\n }\n get deviceController() {\n return this._deviceController;\n }\n get eventController() {\n return this._eventController;\n }\n /**\n * Clean up this instance and resources that it created.\n *\n * After calling `destroy`, internal fields like `audioVideoController` will be unavailable.\n */\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n if (Destroyable_1.isDestroyable(this.contentShareController)) {\n yield this.contentShareController.destroy();\n }\n if (Destroyable_1.isDestroyable(this.audioVideoController)) {\n yield this.audioVideoController.destroy();\n }\n if (Destroyable_1.isDestroyable(this.eventController)) {\n yield this.eventController.destroy();\n }\n CSPMonitor_1.default.removeLogger(this._logger);\n this._logger = undefined;\n this._configuration = undefined;\n this._deviceController = undefined;\n this.audioVideoFacade = undefined;\n this.audioVideoController = undefined;\n this.contentShareController = undefined;\n this._eventController = undefined;\n });\n }\n checkBrowserSupportAndFeatureConfiguration() {\n const browserBehavior = new DefaultBrowserBehavior_1.default();\n const browser = `${browserBehavior.name()} ${browserBehavior.majorVersion()} (${browserBehavior.version()})`;\n this.logger.info(`browser is ${browser}`);\n if (!browserBehavior.isSupported()) {\n this.logger.warn('this browser is not currently supported. ' +\n 'Stability may suffer. ' +\n `Supported browsers are: ${browserBehavior.supportString()}.`);\n }\n // Validation if a custom video uplink policy is specified\n if (this._configuration.videoUplinkBandwidthPolicy) {\n if (this.isSimulcastUplinkPolicy(this._configuration.videoUplinkBandwidthPolicy)) {\n if (!browserBehavior.hasChromiumWebRTC()) {\n throw new Error('Simulcast is only supported on Chromium-based browsers');\n }\n this._configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = true;\n }\n else {\n this._configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = false;\n }\n }\n if (this._configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers) {\n if (browserBehavior.hasChromiumWebRTC()) {\n this.logger.info(`Simulcast is enabled for ${browserBehavior.name()}`);\n }\n else {\n this._configuration.enableSimulcastForUnifiedPlanChromiumBasedBrowsers = false;\n this.logger.info('Simulcast is only supported on Chromium-based browsers');\n }\n if (this._configuration.enableSVC) {\n this._configuration.enableSVC = false;\n this.logger.info('SVC is not successfully enabled since simulcast is enabled');\n }\n }\n if (this._configuration.enableSVC && !browserBehavior.supportsScalableVideoCoding()) {\n this._configuration.enableSVC = false;\n this.logger.info('SVC is only supported on Chromium-based browsers with version 111 or above');\n }\n }\n isSimulcastUplinkPolicy(policy) {\n return !!(policy && policy.addObserver);\n }\n}\nexports.default = DefaultMeetingSession;\n//# sourceMappingURL=DefaultMeetingSession.js.map","export const getHttpHandlerExtensionConfiguration = (runtimeConfig) => {\n let httpHandler = runtimeConfig.httpHandler;\n return {\n setHttpHandler(handler) {\n httpHandler = handler;\n },\n httpHandler() {\n return httpHandler;\n },\n updateHttpClientConfig(key, value) {\n httpHandler.updateHttpClientConfig(key, value);\n },\n httpHandlerConfigs() {\n return httpHandler.httpHandlerConfigs();\n },\n };\n};\nexport const resolveHttpHandlerRuntimeConfig = (httpHandlerExtensionConfiguration) => {\n return {\n httpHandler: httpHandlerExtensionConfiguration.httpHandler(),\n };\n};\n","export var HttpAuthLocation;\n(function (HttpAuthLocation) {\n HttpAuthLocation[\"HEADER\"] = \"header\";\n HttpAuthLocation[\"QUERY\"] = \"query\";\n})(HttpAuthLocation || (HttpAuthLocation = {}));\n","export var HttpApiKeyAuthLocation;\n(function (HttpApiKeyAuthLocation) {\n HttpApiKeyAuthLocation[\"HEADER\"] = \"header\";\n HttpApiKeyAuthLocation[\"QUERY\"] = \"query\";\n})(HttpApiKeyAuthLocation || (HttpApiKeyAuthLocation = {}));\n","export var EndpointURLScheme;\n(function (EndpointURLScheme) {\n EndpointURLScheme[\"HTTP\"] = \"http\";\n EndpointURLScheme[\"HTTPS\"] = \"https\";\n})(EndpointURLScheme || (EndpointURLScheme = {}));\n","export var AlgorithmId;\n(function (AlgorithmId) {\n AlgorithmId[\"MD5\"] = \"md5\";\n AlgorithmId[\"CRC32\"] = \"crc32\";\n AlgorithmId[\"CRC32C\"] = \"crc32c\";\n AlgorithmId[\"SHA1\"] = \"sha1\";\n AlgorithmId[\"SHA256\"] = \"sha256\";\n})(AlgorithmId || (AlgorithmId = {}));\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n if (runtimeConfig.sha256 !== undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.SHA256,\n checksumConstructor: () => runtimeConfig.sha256,\n });\n }\n if (runtimeConfig.md5 != undefined) {\n checksumAlgorithms.push({\n algorithmId: () => AlgorithmId.MD5,\n checksumConstructor: () => runtimeConfig.md5,\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export var FieldPosition;\n(function (FieldPosition) {\n FieldPosition[FieldPosition[\"HEADER\"] = 0] = \"HEADER\";\n FieldPosition[FieldPosition[\"TRAILER\"] = 1] = \"TRAILER\";\n})(FieldPosition || (FieldPosition = {}));\n","export const SMITHY_CONTEXT_KEY = \"__smithy_context\";\n","export var IniSectionType;\n(function (IniSectionType) {\n IniSectionType[\"PROFILE\"] = \"profile\";\n IniSectionType[\"SSO_SESSION\"] = \"sso-session\";\n IniSectionType[\"SERVICES\"] = \"services\";\n})(IniSectionType || (IniSectionType = {}));\n","export var RequestHandlerProtocol;\n(function (RequestHandlerProtocol) {\n RequestHandlerProtocol[\"HTTP_0_9\"] = \"http/0.9\";\n RequestHandlerProtocol[\"HTTP_1_0\"] = \"http/1.0\";\n RequestHandlerProtocol[\"TDS_8_0\"] = \"tds/8.0\";\n})(RequestHandlerProtocol || (RequestHandlerProtocol = {}));\n","export class HttpRequest {\n constructor(options) {\n this.method = options.method || \"GET\";\n this.hostname = options.hostname || \"localhost\";\n this.port = options.port;\n this.query = options.query || {};\n this.headers = options.headers || {};\n this.body = options.body;\n this.protocol = options.protocol\n ? options.protocol.slice(-1) !== \":\"\n ? `${options.protocol}:`\n : options.protocol\n : \"https:\";\n this.path = options.path ? (options.path.charAt(0) !== \"/\" ? `/${options.path}` : options.path) : \"/\";\n this.username = options.username;\n this.password = options.password;\n this.fragment = options.fragment;\n }\n static isInstance(request) {\n if (!request)\n return false;\n const req = request;\n return (\"method\" in req &&\n \"protocol\" in req &&\n \"hostname\" in req &&\n \"path\" in req &&\n typeof req[\"query\"] === \"object\" &&\n typeof req[\"headers\"] === \"object\");\n }\n clone() {\n const cloned = new HttpRequest({\n ...this,\n headers: { ...this.headers },\n });\n if (cloned.query)\n cloned.query = cloneQuery(cloned.query);\n return cloned;\n }\n}\nfunction cloneQuery(query) {\n return Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n }, {});\n}\n","export class HttpResponse {\n constructor(options) {\n this.statusCode = options.statusCode;\n this.reason = options.reason;\n this.headers = options.headers || {};\n this.body = options.body;\n }\n static isInstance(response) {\n if (!response)\n return false;\n const resp = response;\n return typeof resp.statusCode === \"number\" && typeof resp.headers === \"object\";\n }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nexport function resolveHostHeaderConfig(input) {\n return input;\n}\nexport const hostHeaderMiddleware = (options) => (next) => async (args) => {\n if (!HttpRequest.isInstance(args.request))\n return next(args);\n const { request } = args;\n const { handlerProtocol = \"\" } = options.requestHandler.metadata || {};\n if (handlerProtocol.indexOf(\"h2\") >= 0 && !request.headers[\":authority\"]) {\n delete request.headers[\"host\"];\n request.headers[\":authority\"] = request.hostname + (request.port ? \":\" + request.port : \"\");\n }\n else if (!request.headers[\"host\"]) {\n let host = request.hostname;\n if (request.port != null)\n host += `:${request.port}`;\n request.headers[\"host\"] = host;\n }\n return next(args);\n};\nexport const hostHeaderMiddlewareOptions = {\n name: \"hostHeaderMiddleware\",\n step: \"build\",\n priority: \"low\",\n tags: [\"HOST\"],\n override: true,\n};\nexport const getHostHeaderPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(hostHeaderMiddleware(options), hostHeaderMiddlewareOptions);\n },\n});\n","export const loggerMiddleware = () => (next, context) => async (args) => {\n try {\n const response = await next(args);\n const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n const { overrideInputFilterSensitiveLog, overrideOutputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n const outputFilterSensitiveLog = overrideOutputFilterSensitiveLog ?? context.outputFilterSensitiveLog;\n const { $metadata, ...outputWithoutMetadata } = response.output;\n logger?.info?.({\n clientName,\n commandName,\n input: inputFilterSensitiveLog(args.input),\n output: outputFilterSensitiveLog(outputWithoutMetadata),\n metadata: $metadata,\n });\n return response;\n }\n catch (error) {\n const { clientName, commandName, logger, dynamoDbDocumentClientOptions = {} } = context;\n const { overrideInputFilterSensitiveLog } = dynamoDbDocumentClientOptions;\n const inputFilterSensitiveLog = overrideInputFilterSensitiveLog ?? context.inputFilterSensitiveLog;\n logger?.error?.({\n clientName,\n commandName,\n input: inputFilterSensitiveLog(args.input),\n error,\n metadata: error.$metadata,\n });\n throw error;\n }\n};\nexport const loggerMiddlewareOptions = {\n name: \"loggerMiddleware\",\n tags: [\"LOGGER\"],\n step: \"initialize\",\n override: true,\n};\nexport const getLoggerPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(loggerMiddleware(), loggerMiddlewareOptions);\n },\n});\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst TRACE_ID_HEADER_NAME = \"X-Amzn-Trace-Id\";\nconst ENV_LAMBDA_FUNCTION_NAME = \"AWS_LAMBDA_FUNCTION_NAME\";\nconst ENV_TRACE_ID = \"_X_AMZN_TRACE_ID\";\nexport const recursionDetectionMiddleware = (options) => (next) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request) ||\n options.runtime !== \"node\" ||\n request.headers.hasOwnProperty(TRACE_ID_HEADER_NAME)) {\n return next(args);\n }\n const functionName = process.env[ENV_LAMBDA_FUNCTION_NAME];\n const traceId = process.env[ENV_TRACE_ID];\n const nonEmptyString = (str) => typeof str === \"string\" && str.length > 0;\n if (nonEmptyString(functionName) && nonEmptyString(traceId)) {\n request.headers[TRACE_ID_HEADER_NAME] = traceId;\n }\n return next({\n ...args,\n request,\n });\n};\nexport const addRecursionDetectionMiddlewareOptions = {\n step: \"build\",\n tags: [\"RECURSION_DETECTION\"],\n name: \"recursionDetectionMiddleware\",\n override: true,\n priority: \"low\",\n};\nexport const getRecursionDetectionPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(recursionDetectionMiddleware(options), addRecursionDetectionMiddlewareOptions);\n },\n});\n","export const memoize = (provider, isExpired, requiresRefresh) => {\n let resolved;\n let pending;\n let hasResult;\n let isConstant = false;\n const coalesceProvider = async () => {\n if (!pending) {\n pending = provider();\n }\n try {\n resolved = await pending;\n hasResult = true;\n isConstant = false;\n }\n finally {\n pending = undefined;\n }\n return resolved;\n };\n if (isExpired === undefined) {\n return async (options) => {\n if (!hasResult || options?.forceRefresh) {\n resolved = await coalesceProvider();\n }\n return resolved;\n };\n }\n return async (options) => {\n if (!hasResult || options?.forceRefresh) {\n resolved = await coalesceProvider();\n }\n if (isConstant) {\n return resolved;\n }\n if (requiresRefresh && !requiresRefresh(resolved)) {\n isConstant = true;\n return resolved;\n }\n if (isExpired(resolved)) {\n await coalesceProvider();\n return resolved;\n }\n return resolved;\n };\n};\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export const fromUtf8 = (input) => {\n const bytes = [];\n for (let i = 0, len = input.length; i < len; i++) {\n const value = input.charCodeAt(i);\n if (value < 0x80) {\n bytes.push(value);\n }\n else if (value < 0x800) {\n bytes.push((value >> 6) | 0b11000000, (value & 0b111111) | 0b10000000);\n }\n else if (i + 1 < input.length && (value & 0xfc00) === 0xd800 && (input.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n const surrogatePair = 0x10000 + ((value & 0b1111111111) << 10) + (input.charCodeAt(++i) & 0b1111111111);\n bytes.push((surrogatePair >> 18) | 0b11110000, ((surrogatePair >> 12) & 0b111111) | 0b10000000, ((surrogatePair >> 6) & 0b111111) | 0b10000000, (surrogatePair & 0b111111) | 0b10000000);\n }\n else {\n bytes.push((value >> 12) | 0b11100000, ((value >> 6) & 0b111111) | 0b10000000, (value & 0b111111) | 0b10000000);\n }\n }\n return Uint8Array.from(bytes);\n};\nexport const toUtf8 = (input) => {\n let decoded = \"\";\n for (let i = 0, len = input.length; i < len; i++) {\n const byte = input[i];\n if (byte < 0x80) {\n decoded += String.fromCharCode(byte);\n }\n else if (0b11000000 <= byte && byte < 0b11100000) {\n const nextByte = input[++i];\n decoded += String.fromCharCode(((byte & 0b11111) << 6) | (nextByte & 0b111111));\n }\n else if (0b11110000 <= byte && byte < 0b101101101) {\n const surrogatePair = [byte, input[++i], input[++i], input[++i]];\n const encoded = \"%\" + surrogatePair.map((byteValue) => byteValue.toString(16)).join(\"%\");\n decoded += decodeURIComponent(encoded);\n }\n else {\n decoded += String.fromCharCode(((byte & 0b1111) << 12) | ((input[++i] & 0b111111) << 6) | (input[++i] & 0b111111));\n }\n }\n return decoded;\n};\n","export function fromUtf8(input) {\n return new TextEncoder().encode(input);\n}\nexport function toUtf8(input) {\n return new TextDecoder(\"utf-8\").decode(input);\n}\n","import { fromUtf8 as jsFromUtf8, toUtf8 as jsToUtf8 } from \"./pureJs\";\nimport { fromUtf8 as textEncoderFromUtf8, toUtf8 as textEncoderToUtf8 } from \"./whatwgEncodingApi\";\nexport const fromUtf8 = (input) => typeof TextEncoder === \"function\" ? textEncoderFromUtf8(input) : jsFromUtf8(input);\nexport const toUtf8 = (input) => typeof TextDecoder === \"function\" ? textEncoderToUtf8(input) : jsToUtf8(input);\n","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToBuffer = void 0;\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : util_utf8_browser_1.fromUtf8;\nfunction convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\nexports.convertToBuffer = convertToBuffer;\n//# sourceMappingURL=convertToBuffer.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numToUint8 = void 0;\nfunction numToUint8(num) {\n return new Uint8Array([\n (num & 0xff000000) >> 24,\n (num & 0x00ff0000) >> 16,\n (num & 0x0000ff00) >> 8,\n num & 0x000000ff,\n ]);\n}\nexports.numToUint8 = numToUint8;\n//# sourceMappingURL=numToUint8.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = void 0;\n// IE 11 does not support Array.from, so we do it manually\nfunction uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\nexports.uint32ArrayFrom = uint32ArrayFrom;\n//# sourceMappingURL=uint32ArrayFrom.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;\nvar convertToBuffer_1 = require(\"./convertToBuffer\");\nObject.defineProperty(exports, \"convertToBuffer\", { enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nObject.defineProperty(exports, \"isEmptyData\", { enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } });\nvar numToUint8_1 = require(\"./numToUint8\");\nObject.defineProperty(exports, \"numToUint8\", { enumerable: true, get: function () { return numToUint8_1.numToUint8; } });\nvar uint32ArrayFrom_1 = require(\"./uint32ArrayFrom\");\nObject.defineProperty(exports, \"uint32ArrayFrom\", { enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar index_1 = require(\"./index\");\nvar AwsCrc32 = /** @class */ (function () {\n function AwsCrc32() {\n this.crc32 = new index_1.Crc32();\n }\n AwsCrc32.prototype.update = function (toHash) {\n if ((0, util_1.isEmptyData)(toHash))\n return;\n this.crc32.update((0, util_1.convertToBuffer)(toHash));\n };\n AwsCrc32.prototype.digest = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, (0, util_1.numToUint8)(this.crc32.digest())];\n });\n });\n };\n AwsCrc32.prototype.reset = function () {\n this.crc32 = new index_1.Crc32();\n };\n return AwsCrc32;\n}());\nexports.AwsCrc32 = AwsCrc32;\n//# sourceMappingURL=aws_crc32.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AwsCrc32 = exports.Crc32 = exports.crc32 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar util_1 = require(\"@aws-crypto/util\");\nfunction crc32(data) {\n return new Crc32().update(data).digest();\n}\nexports.crc32 = crc32;\nvar Crc32 = /** @class */ (function () {\n function Crc32() {\n this.checksum = 0xffffffff;\n }\n Crc32.prototype.update = function (data) {\n var e_1, _a;\n try {\n for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {\n var byte = data_1_1.value;\n this.checksum =\n (this.checksum >>> 8) ^ lookupTable[(this.checksum ^ byte) & 0xff];\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);\n }\n finally { if (e_1) throw e_1.error; }\n }\n return this;\n };\n Crc32.prototype.digest = function () {\n return (this.checksum ^ 0xffffffff) >>> 0;\n };\n return Crc32;\n}());\nexports.Crc32 = Crc32;\n// prettier-ignore\nvar a_lookUpTable = [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,\n 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,\n 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,\n 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,\n 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,\n 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,\n 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,\n 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,\n 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,\n 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,\n 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,\n 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,\n 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,\n 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,\n 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,\n 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,\n 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,\n 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,\n 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,\n 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,\n 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,\n 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,\n 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,\n 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,\n 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,\n 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,\n 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D,\n];\nvar lookupTable = (0, util_1.uint32ArrayFrom)(a_lookUpTable);\nvar aws_crc32_1 = require(\"./aws_crc32\");\nObject.defineProperty(exports, \"AwsCrc32\", { enumerable: true, get: function () { return aws_crc32_1.AwsCrc32; } });\n//# sourceMappingURL=index.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","import { toHex } from \"@smithy/util-hex-encoding\";\nexport class Int64 {\n constructor(bytes) {\n this.bytes = bytes;\n if (bytes.byteLength !== 8) {\n throw new Error(\"Int64 buffers must be exactly 8 bytes\");\n }\n }\n static fromNumber(number) {\n if (number > 9223372036854776000 || number < -9223372036854776000) {\n throw new Error(`${number} is too large (or, if negative, too small) to represent as an Int64`);\n }\n const bytes = new Uint8Array(8);\n for (let i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n bytes[i] = remaining;\n }\n if (number < 0) {\n negate(bytes);\n }\n return new Int64(bytes);\n }\n valueOf() {\n const bytes = this.bytes.slice(0);\n const negative = bytes[0] & 0b10000000;\n if (negative) {\n negate(bytes);\n }\n return parseInt(toHex(bytes), 16) * (negative ? -1 : 1);\n }\n toString() {\n return String(this.valueOf());\n }\n}\nfunction negate(bytes) {\n for (let i = 0; i < 8; i++) {\n bytes[i] ^= 0xff;\n }\n for (let i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0)\n break;\n }\n}\n","import { fromHex, toHex } from \"@smithy/util-hex-encoding\";\nimport { Int64 } from \"./Int64\";\nexport class HeaderMarshaller {\n constructor(toUtf8, fromUtf8) {\n this.toUtf8 = toUtf8;\n this.fromUtf8 = fromUtf8;\n }\n format(headers) {\n const chunks = [];\n for (const headerName of Object.keys(headers)) {\n const bytes = this.fromUtf8(headerName);\n chunks.push(Uint8Array.from([bytes.byteLength]), bytes, this.formatHeaderValue(headers[headerName]));\n }\n const out = new Uint8Array(chunks.reduce((carry, bytes) => carry + bytes.byteLength, 0));\n let position = 0;\n for (const chunk of chunks) {\n out.set(chunk, position);\n position += chunk.byteLength;\n }\n return out;\n }\n formatHeaderValue(header) {\n switch (header.type) {\n case \"boolean\":\n return Uint8Array.from([header.value ? 0 : 1]);\n case \"byte\":\n return Uint8Array.from([2, header.value]);\n case \"short\":\n const shortView = new DataView(new ArrayBuffer(3));\n shortView.setUint8(0, 3);\n shortView.setInt16(1, header.value, false);\n return new Uint8Array(shortView.buffer);\n case \"integer\":\n const intView = new DataView(new ArrayBuffer(5));\n intView.setUint8(0, 4);\n intView.setInt32(1, header.value, false);\n return new Uint8Array(intView.buffer);\n case \"long\":\n const longBytes = new Uint8Array(9);\n longBytes[0] = 5;\n longBytes.set(header.value.bytes, 1);\n return longBytes;\n case \"binary\":\n const binView = new DataView(new ArrayBuffer(3 + header.value.byteLength));\n binView.setUint8(0, 6);\n binView.setUint16(1, header.value.byteLength, false);\n const binBytes = new Uint8Array(binView.buffer);\n binBytes.set(header.value, 3);\n return binBytes;\n case \"string\":\n const utf8Bytes = this.fromUtf8(header.value);\n const strView = new DataView(new ArrayBuffer(3 + utf8Bytes.byteLength));\n strView.setUint8(0, 7);\n strView.setUint16(1, utf8Bytes.byteLength, false);\n const strBytes = new Uint8Array(strView.buffer);\n strBytes.set(utf8Bytes, 3);\n return strBytes;\n case \"timestamp\":\n const tsBytes = new Uint8Array(9);\n tsBytes[0] = 8;\n tsBytes.set(Int64.fromNumber(header.value.valueOf()).bytes, 1);\n return tsBytes;\n case \"uuid\":\n if (!UUID_PATTERN.test(header.value)) {\n throw new Error(`Invalid UUID received: ${header.value}`);\n }\n const uuidBytes = new Uint8Array(17);\n uuidBytes[0] = 9;\n uuidBytes.set(fromHex(header.value.replace(/\\-/g, \"\")), 1);\n return uuidBytes;\n }\n }\n parse(headers) {\n const out = {};\n let position = 0;\n while (position < headers.byteLength) {\n const nameLength = headers.getUint8(position++);\n const name = this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, nameLength));\n position += nameLength;\n switch (headers.getUint8(position++)) {\n case 0:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true,\n };\n break;\n case 1:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false,\n };\n break;\n case 2:\n out[name] = {\n type: BYTE_TAG,\n value: headers.getInt8(position++),\n };\n break;\n case 3:\n out[name] = {\n type: SHORT_TAG,\n value: headers.getInt16(position, false),\n };\n position += 2;\n break;\n case 4:\n out[name] = {\n type: INT_TAG,\n value: headers.getInt32(position, false),\n };\n position += 4;\n break;\n case 5:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)),\n };\n position += 8;\n break;\n case 6:\n const binaryLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: new Uint8Array(headers.buffer, headers.byteOffset + position, binaryLength),\n };\n position += binaryLength;\n break;\n case 7:\n const stringLength = headers.getUint16(position, false);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: this.toUtf8(new Uint8Array(headers.buffer, headers.byteOffset + position, stringLength)),\n };\n position += stringLength;\n break;\n case 8:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(new Int64(new Uint8Array(headers.buffer, headers.byteOffset + position, 8)).valueOf()),\n };\n position += 8;\n break;\n case 9:\n const uuidBytes = new Uint8Array(headers.buffer, headers.byteOffset + position, 16);\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: `${toHex(uuidBytes.subarray(0, 4))}-${toHex(uuidBytes.subarray(4, 6))}-${toHex(uuidBytes.subarray(6, 8))}-${toHex(uuidBytes.subarray(8, 10))}-${toHex(uuidBytes.subarray(10))}`,\n };\n break;\n default:\n throw new Error(`Unrecognized header type tag`);\n }\n }\n return out;\n }\n}\nvar HEADER_VALUE_TYPE;\n(function (HEADER_VALUE_TYPE) {\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolTrue\"] = 0] = \"boolTrue\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"boolFalse\"] = 1] = \"boolFalse\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byte\"] = 2] = \"byte\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"short\"] = 3] = \"short\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"integer\"] = 4] = \"integer\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"long\"] = 5] = \"long\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"byteArray\"] = 6] = \"byteArray\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"string\"] = 7] = \"string\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"timestamp\"] = 8] = \"timestamp\";\n HEADER_VALUE_TYPE[HEADER_VALUE_TYPE[\"uuid\"] = 9] = \"uuid\";\n})(HEADER_VALUE_TYPE || (HEADER_VALUE_TYPE = {}));\nconst BOOLEAN_TAG = \"boolean\";\nconst BYTE_TAG = \"byte\";\nconst SHORT_TAG = \"short\";\nconst INT_TAG = \"integer\";\nconst LONG_TAG = \"long\";\nconst BINARY_TAG = \"binary\";\nconst STRING_TAG = \"string\";\nconst TIMESTAMP_TAG = \"timestamp\";\nconst UUID_TAG = \"uuid\";\nconst UUID_PATTERN = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;\n","import { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport const getSmithyContext = (context) => context[SMITHY_CONTEXT_KEY] || (context[SMITHY_CONTEXT_KEY] = {});\n","export const normalizeProvider = (input) => {\n if (typeof input === \"function\")\n return input;\n const promisified = Promise.resolve(input);\n return () => promisified;\n};\n","export const fromUtf8 = (input) => new TextEncoder().encode(input);\n","import { fromUtf8 } from \"./fromUtf8\";\nexport const toUint8Array = (data) => {\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n};\n","export const toUtf8 = (input) => new TextDecoder(\"utf-8\").decode(input);\n","export const ALGORITHM_QUERY_PARAM = \"X-Amz-Algorithm\";\nexport const CREDENTIAL_QUERY_PARAM = \"X-Amz-Credential\";\nexport const AMZ_DATE_QUERY_PARAM = \"X-Amz-Date\";\nexport const SIGNED_HEADERS_QUERY_PARAM = \"X-Amz-SignedHeaders\";\nexport const EXPIRES_QUERY_PARAM = \"X-Amz-Expires\";\nexport const SIGNATURE_QUERY_PARAM = \"X-Amz-Signature\";\nexport const TOKEN_QUERY_PARAM = \"X-Amz-Security-Token\";\nexport const REGION_SET_PARAM = \"X-Amz-Region-Set\";\nexport const AUTH_HEADER = \"authorization\";\nexport const AMZ_DATE_HEADER = AMZ_DATE_QUERY_PARAM.toLowerCase();\nexport const DATE_HEADER = \"date\";\nexport const GENERATED_HEADERS = [AUTH_HEADER, AMZ_DATE_HEADER, DATE_HEADER];\nexport const SIGNATURE_HEADER = SIGNATURE_QUERY_PARAM.toLowerCase();\nexport const SHA256_HEADER = \"x-amz-content-sha256\";\nexport const TOKEN_HEADER = TOKEN_QUERY_PARAM.toLowerCase();\nexport const HOST_HEADER = \"host\";\nexport const ALWAYS_UNSIGNABLE_HEADERS = {\n authorization: true,\n \"cache-control\": true,\n connection: true,\n expect: true,\n from: true,\n \"keep-alive\": true,\n \"max-forwards\": true,\n pragma: true,\n referer: true,\n te: true,\n trailer: true,\n \"transfer-encoding\": true,\n upgrade: true,\n \"user-agent\": true,\n \"x-amzn-trace-id\": true,\n};\nexport const PROXY_HEADER_PATTERN = /^proxy-/;\nexport const SEC_HEADER_PATTERN = /^sec-/;\nexport const UNSIGNABLE_PATTERNS = [/^proxy-/i, /^sec-/i];\nexport const ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256\";\nexport const ALGORITHM_IDENTIFIER_V4A = \"AWS4-ECDSA-P256-SHA256\";\nexport const EVENT_ALGORITHM_IDENTIFIER = \"AWS4-HMAC-SHA256-PAYLOAD\";\nexport const UNSIGNED_PAYLOAD = \"UNSIGNED-PAYLOAD\";\nexport const MAX_CACHE_SIZE = 50;\nexport const KEY_TYPE_IDENTIFIER = \"aws4_request\";\nexport const MAX_PRESIGNED_TTL = 60 * 60 * 24 * 7;\n","import { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { KEY_TYPE_IDENTIFIER, MAX_CACHE_SIZE } from \"./constants\";\nconst signingKeyCache = {};\nconst cacheQueue = [];\nexport const createScope = (shortDate, region, service) => `${shortDate}/${region}/${service}/${KEY_TYPE_IDENTIFIER}`;\nexport const getSigningKey = async (sha256Constructor, credentials, shortDate, region, service) => {\n const credsHash = await hmac(sha256Constructor, credentials.secretAccessKey, credentials.accessKeyId);\n const cacheKey = `${shortDate}:${region}:${service}:${toHex(credsHash)}:${credentials.sessionToken}`;\n if (cacheKey in signingKeyCache) {\n return signingKeyCache[cacheKey];\n }\n cacheQueue.push(cacheKey);\n while (cacheQueue.length > MAX_CACHE_SIZE) {\n delete signingKeyCache[cacheQueue.shift()];\n }\n let key = `AWS4${credentials.secretAccessKey}`;\n for (const signable of [shortDate, region, service, KEY_TYPE_IDENTIFIER]) {\n key = await hmac(sha256Constructor, key, signable);\n }\n return (signingKeyCache[cacheKey] = key);\n};\nexport const clearCredentialCache = () => {\n cacheQueue.length = 0;\n Object.keys(signingKeyCache).forEach((cacheKey) => {\n delete signingKeyCache[cacheKey];\n });\n};\nconst hmac = (ctor, secret, data) => {\n const hash = new ctor(secret);\n hash.update(toUint8Array(data));\n return hash.digest();\n};\n","import { ALWAYS_UNSIGNABLE_HEADERS, PROXY_HEADER_PATTERN, SEC_HEADER_PATTERN } from \"./constants\";\nexport const getCanonicalHeaders = ({ headers }, unsignableHeaders, signableHeaders) => {\n const canonical = {};\n for (const headerName of Object.keys(headers).sort()) {\n if (headers[headerName] == undefined) {\n continue;\n }\n const canonicalHeaderName = headerName.toLowerCase();\n if (canonicalHeaderName in ALWAYS_UNSIGNABLE_HEADERS ||\n unsignableHeaders?.has(canonicalHeaderName) ||\n PROXY_HEADER_PATTERN.test(canonicalHeaderName) ||\n SEC_HEADER_PATTERN.test(canonicalHeaderName)) {\n if (!signableHeaders || (signableHeaders && !signableHeaders.has(canonicalHeaderName))) {\n continue;\n }\n }\n canonical[canonicalHeaderName] = headers[headerName].trim().replace(/\\s+/g, \" \");\n }\n return canonical;\n};\n","export const escapeUri = (uri) => encodeURIComponent(uri).replace(/[!'()*]/g, hexEncode);\nconst hexEncode = (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`;\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nimport { SIGNATURE_HEADER } from \"./constants\";\nexport const getCanonicalQuery = ({ query = {} }) => {\n const keys = [];\n const serialized = {};\n for (const key of Object.keys(query).sort()) {\n if (key.toLowerCase() === SIGNATURE_HEADER) {\n continue;\n }\n keys.push(key);\n const value = query[key];\n if (typeof value === \"string\") {\n serialized[key] = `${escapeUri(key)}=${escapeUri(value)}`;\n }\n else if (Array.isArray(value)) {\n serialized[key] = value\n .slice(0)\n .reduce((encoded, value) => encoded.concat([`${escapeUri(key)}=${escapeUri(value)}`]), [])\n .sort()\n .join(\"&\");\n }\n }\n return keys\n .map((key) => serialized[key])\n .filter((serialized) => serialized)\n .join(\"&\");\n};\n","export const isArrayBuffer = (arg) => (typeof ArrayBuffer === \"function\" && arg instanceof ArrayBuffer) ||\n Object.prototype.toString.call(arg) === \"[object ArrayBuffer]\";\n","import { isArrayBuffer } from \"@smithy/is-array-buffer\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { toUint8Array } from \"@smithy/util-utf8\";\nimport { SHA256_HEADER, UNSIGNED_PAYLOAD } from \"./constants\";\nexport const getPayloadHash = async ({ headers, body }, hashConstructor) => {\n for (const headerName of Object.keys(headers)) {\n if (headerName.toLowerCase() === SHA256_HEADER) {\n return headers[headerName];\n }\n }\n if (body == undefined) {\n return \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n }\n else if (typeof body === \"string\" || ArrayBuffer.isView(body) || isArrayBuffer(body)) {\n const hashCtor = new hashConstructor();\n hashCtor.update(toUint8Array(body));\n return toHex(await hashCtor.digest());\n }\n return UNSIGNED_PAYLOAD;\n};\n","export const hasHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return true;\n }\n }\n return false;\n};\nexport const getHeaderValue = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n return headers[headerName];\n }\n }\n return undefined;\n};\nexport const deleteHeader = (soughtHeader, headers) => {\n soughtHeader = soughtHeader.toLowerCase();\n for (const headerName of Object.keys(headers)) {\n if (soughtHeader === headerName.toLowerCase()) {\n delete headers[headerName];\n }\n }\n};\n","export const cloneRequest = ({ headers, query, ...rest }) => ({\n ...rest,\n headers: { ...headers },\n query: query ? cloneQuery(query) : undefined,\n});\nexport const cloneQuery = (query) => Object.keys(query).reduce((carry, paramName) => {\n const param = query[paramName];\n return {\n ...carry,\n [paramName]: Array.isArray(param) ? [...param] : param,\n };\n}, {});\n","import { cloneRequest } from \"./cloneRequest\";\nexport const moveHeadersToQuery = (request, options = {}) => {\n const { headers, query = {} } = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request);\n for (const name of Object.keys(headers)) {\n const lname = name.toLowerCase();\n if (lname.slice(0, 6) === \"x-amz-\" && !options.unhoistableHeaders?.has(lname)) {\n query[name] = headers[name];\n delete headers[name];\n }\n }\n return {\n ...request,\n headers,\n query,\n };\n};\n","import { cloneRequest } from \"./cloneRequest\";\nimport { GENERATED_HEADERS } from \"./constants\";\nexport const prepareRequest = (request) => {\n request = typeof request.clone === \"function\" ? request.clone() : cloneRequest(request);\n for (const headerName of Object.keys(request.headers)) {\n if (GENERATED_HEADERS.indexOf(headerName.toLowerCase()) > -1) {\n delete request.headers[headerName];\n }\n }\n return request;\n};\n","export const iso8601 = (time) => toDate(time)\n .toISOString()\n .replace(/\\.\\d{3}Z$/, \"Z\");\nexport const toDate = (time) => {\n if (typeof time === \"number\") {\n return new Date(time * 1000);\n }\n if (typeof time === \"string\") {\n if (Number(time)) {\n return new Date(Number(time) * 1000);\n }\n return new Date(time);\n }\n return time;\n};\n","import { HeaderMarshaller } from \"@smithy/eventstream-codec\";\nimport { toHex } from \"@smithy/util-hex-encoding\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nimport { fromUtf8, toUint8Array, toUtf8 } from \"@smithy/util-utf8\";\nimport { ALGORITHM_IDENTIFIER, ALGORITHM_QUERY_PARAM, AMZ_DATE_HEADER, AMZ_DATE_QUERY_PARAM, AUTH_HEADER, CREDENTIAL_QUERY_PARAM, EVENT_ALGORITHM_IDENTIFIER, EXPIRES_QUERY_PARAM, MAX_PRESIGNED_TTL, SHA256_HEADER, SIGNATURE_QUERY_PARAM, SIGNED_HEADERS_QUERY_PARAM, TOKEN_HEADER, TOKEN_QUERY_PARAM, } from \"./constants\";\nimport { createScope, getSigningKey } from \"./credentialDerivation\";\nimport { getCanonicalHeaders } from \"./getCanonicalHeaders\";\nimport { getCanonicalQuery } from \"./getCanonicalQuery\";\nimport { getPayloadHash } from \"./getPayloadHash\";\nimport { hasHeader } from \"./headerUtil\";\nimport { moveHeadersToQuery } from \"./moveHeadersToQuery\";\nimport { prepareRequest } from \"./prepareRequest\";\nimport { iso8601 } from \"./utilDate\";\nexport class SignatureV4 {\n constructor({ applyChecksum, credentials, region, service, sha256, uriEscapePath = true, }) {\n this.headerMarshaller = new HeaderMarshaller(toUtf8, fromUtf8);\n this.service = service;\n this.sha256 = sha256;\n this.uriEscapePath = uriEscapePath;\n this.applyChecksum = typeof applyChecksum === \"boolean\" ? applyChecksum : true;\n this.regionProvider = normalizeProvider(region);\n this.credentialProvider = normalizeProvider(credentials);\n }\n async presign(originalRequest, options = {}) {\n const { signingDate = new Date(), expiresIn = 3600, unsignableHeaders, unhoistableHeaders, signableHeaders, signingRegion, signingService, } = options;\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { longDate, shortDate } = formatDate(signingDate);\n if (expiresIn > MAX_PRESIGNED_TTL) {\n return Promise.reject(\"Signature version 4 presigned URLs\" + \" must have an expiration date less than one week in\" + \" the future\");\n }\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const request = moveHeadersToQuery(prepareRequest(originalRequest), { unhoistableHeaders });\n if (credentials.sessionToken) {\n request.query[TOKEN_QUERY_PARAM] = credentials.sessionToken;\n }\n request.query[ALGORITHM_QUERY_PARAM] = ALGORITHM_IDENTIFIER;\n request.query[CREDENTIAL_QUERY_PARAM] = `${credentials.accessKeyId}/${scope}`;\n request.query[AMZ_DATE_QUERY_PARAM] = longDate;\n request.query[EXPIRES_QUERY_PARAM] = expiresIn.toString(10);\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n request.query[SIGNED_HEADERS_QUERY_PARAM] = getCanonicalHeaderList(canonicalHeaders);\n request.query[SIGNATURE_QUERY_PARAM] = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, await getPayloadHash(originalRequest, this.sha256)));\n return request;\n }\n async sign(toSign, options) {\n if (typeof toSign === \"string\") {\n return this.signString(toSign, options);\n }\n else if (toSign.headers && toSign.payload) {\n return this.signEvent(toSign, options);\n }\n else if (toSign.message) {\n return this.signMessage(toSign, options);\n }\n else {\n return this.signRequest(toSign, options);\n }\n }\n async signEvent({ headers, payload }, { signingDate = new Date(), priorSignature, signingRegion, signingService }) {\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate, longDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n const hashedPayload = await getPayloadHash({ headers: {}, body: payload }, this.sha256);\n const hash = new this.sha256();\n hash.update(headers);\n const hashedHeaders = toHex(await hash.digest());\n const stringToSign = [\n EVENT_ALGORITHM_IDENTIFIER,\n longDate,\n scope,\n priorSignature,\n hashedHeaders,\n hashedPayload,\n ].join(\"\\n\");\n return this.signString(stringToSign, { signingDate, signingRegion: region, signingService });\n }\n async signMessage(signableMessage, { signingDate = new Date(), signingRegion, signingService }) {\n const promise = this.signEvent({\n headers: this.headerMarshaller.format(signableMessage.message.headers),\n payload: signableMessage.message.body,\n }, {\n signingDate,\n signingRegion,\n signingService,\n priorSignature: signableMessage.priorSignature,\n });\n return promise.then((signature) => {\n return { message: signableMessage.message, signature };\n });\n }\n async signString(stringToSign, { signingDate = new Date(), signingRegion, signingService } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const { shortDate } = formatDate(signingDate);\n const hash = new this.sha256(await this.getSigningKey(credentials, region, shortDate, signingService));\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n async signRequest(requestToSign, { signingDate = new Date(), signableHeaders, unsignableHeaders, signingRegion, signingService, } = {}) {\n const credentials = await this.credentialProvider();\n this.validateResolvedCredentials(credentials);\n const region = signingRegion ?? (await this.regionProvider());\n const request = prepareRequest(requestToSign);\n const { longDate, shortDate } = formatDate(signingDate);\n const scope = createScope(shortDate, region, signingService ?? this.service);\n request.headers[AMZ_DATE_HEADER] = longDate;\n if (credentials.sessionToken) {\n request.headers[TOKEN_HEADER] = credentials.sessionToken;\n }\n const payloadHash = await getPayloadHash(request, this.sha256);\n if (!hasHeader(SHA256_HEADER, request.headers) && this.applyChecksum) {\n request.headers[SHA256_HEADER] = payloadHash;\n }\n const canonicalHeaders = getCanonicalHeaders(request, unsignableHeaders, signableHeaders);\n const signature = await this.getSignature(longDate, scope, this.getSigningKey(credentials, region, shortDate, signingService), this.createCanonicalRequest(request, canonicalHeaders, payloadHash));\n request.headers[AUTH_HEADER] =\n `${ALGORITHM_IDENTIFIER} ` +\n `Credential=${credentials.accessKeyId}/${scope}, ` +\n `SignedHeaders=${getCanonicalHeaderList(canonicalHeaders)}, ` +\n `Signature=${signature}`;\n return request;\n }\n createCanonicalRequest(request, canonicalHeaders, payloadHash) {\n const sortedHeaders = Object.keys(canonicalHeaders).sort();\n return `${request.method}\n${this.getCanonicalPath(request)}\n${getCanonicalQuery(request)}\n${sortedHeaders.map((name) => `${name}:${canonicalHeaders[name]}`).join(\"\\n\")}\n\n${sortedHeaders.join(\";\")}\n${payloadHash}`;\n }\n async createStringToSign(longDate, credentialScope, canonicalRequest) {\n const hash = new this.sha256();\n hash.update(toUint8Array(canonicalRequest));\n const hashedRequest = await hash.digest();\n return `${ALGORITHM_IDENTIFIER}\n${longDate}\n${credentialScope}\n${toHex(hashedRequest)}`;\n }\n getCanonicalPath({ path }) {\n if (this.uriEscapePath) {\n const normalizedPathSegments = [];\n for (const pathSegment of path.split(\"/\")) {\n if (pathSegment?.length === 0)\n continue;\n if (pathSegment === \".\")\n continue;\n if (pathSegment === \"..\") {\n normalizedPathSegments.pop();\n }\n else {\n normalizedPathSegments.push(pathSegment);\n }\n }\n const normalizedPath = `${path?.startsWith(\"/\") ? \"/\" : \"\"}${normalizedPathSegments.join(\"/\")}${normalizedPathSegments.length > 0 && path?.endsWith(\"/\") ? \"/\" : \"\"}`;\n const doubleEncoded = encodeURIComponent(normalizedPath);\n return doubleEncoded.replace(/%2F/g, \"/\");\n }\n return path;\n }\n async getSignature(longDate, credentialScope, keyPromise, canonicalRequest) {\n const stringToSign = await this.createStringToSign(longDate, credentialScope, canonicalRequest);\n const hash = new this.sha256(await keyPromise);\n hash.update(toUint8Array(stringToSign));\n return toHex(await hash.digest());\n }\n getSigningKey(credentials, region, shortDate, service) {\n return getSigningKey(this.sha256, credentials, shortDate, region, service || this.service);\n }\n validateResolvedCredentials(credentials) {\n if (typeof credentials !== \"object\" ||\n typeof credentials.accessKeyId !== \"string\" ||\n typeof credentials.secretAccessKey !== \"string\") {\n throw new Error(\"Resolved credential object is not valid\");\n }\n }\n}\nconst formatDate = (now) => {\n const longDate = iso8601(now).replace(/[\\-:]/g, \"\");\n return {\n longDate,\n shortDate: longDate.slice(0, 8),\n };\n};\nconst getCanonicalHeaderList = (headers) => Object.keys(headers).sort().join(\";\");\n","import { memoize } from \"@smithy/property-provider\";\nimport { SignatureV4 } from \"@smithy/signature-v4\";\nimport { normalizeProvider } from \"@smithy/util-middleware\";\nconst CREDENTIAL_EXPIRE_WINDOW = 300000;\nexport const resolveAwsAuthConfig = (input) => {\n const normalizedCreds = input.credentials\n ? normalizeCredentialProvider(input.credentials)\n : input.credentialDefaultProvider(input);\n const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;\n let signer;\n if (input.signer) {\n signer = normalizeProvider(input.signer);\n }\n else if (input.regionInfoProvider) {\n signer = () => normalizeProvider(input.region)()\n .then(async (region) => [\n (await input.regionInfoProvider(region, {\n useFipsEndpoint: await input.useFipsEndpoint(),\n useDualstackEndpoint: await input.useDualstackEndpoint(),\n })) || {},\n region,\n ])\n .then(([regionInfo, region]) => {\n const { signingRegion, signingService } = regionInfo;\n input.signingRegion = input.signingRegion || signingRegion || region;\n input.signingName = input.signingName || signingService || input.serviceId;\n const params = {\n ...input,\n credentials: normalizedCreds,\n region: input.signingRegion,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n };\n const SignerCtor = input.signerConstructor || SignatureV4;\n return new SignerCtor(params);\n });\n }\n else {\n signer = async (authScheme) => {\n authScheme = Object.assign({}, {\n name: \"sigv4\",\n signingName: input.signingName || input.defaultSigningName,\n signingRegion: await normalizeProvider(input.region)(),\n properties: {},\n }, authScheme);\n const signingRegion = authScheme.signingRegion;\n const signingService = authScheme.signingName;\n input.signingRegion = input.signingRegion || signingRegion;\n input.signingName = input.signingName || signingService || input.serviceId;\n const params = {\n ...input,\n credentials: normalizedCreds,\n region: input.signingRegion,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n };\n const SignerCtor = input.signerConstructor || SignatureV4;\n return new SignerCtor(params);\n };\n }\n return {\n ...input,\n systemClockOffset,\n signingEscapePath,\n credentials: normalizedCreds,\n signer,\n };\n};\nexport const resolveSigV4AuthConfig = (input) => {\n const normalizedCreds = input.credentials\n ? normalizeCredentialProvider(input.credentials)\n : input.credentialDefaultProvider(input);\n const { signingEscapePath = true, systemClockOffset = input.systemClockOffset || 0, sha256 } = input;\n let signer;\n if (input.signer) {\n signer = normalizeProvider(input.signer);\n }\n else {\n signer = normalizeProvider(new SignatureV4({\n credentials: normalizedCreds,\n region: input.region,\n service: input.signingName,\n sha256,\n uriEscapePath: signingEscapePath,\n }));\n }\n return {\n ...input,\n systemClockOffset,\n signingEscapePath,\n credentials: normalizedCreds,\n signer,\n };\n};\nconst normalizeCredentialProvider = (credentials) => {\n if (typeof credentials === \"function\") {\n return memoize(credentials, (credentials) => credentials.expiration !== undefined &&\n credentials.expiration.getTime() - Date.now() < CREDENTIAL_EXPIRE_WINDOW, (credentials) => credentials.expiration !== undefined);\n }\n return normalizeProvider(credentials);\n};\n","export const getSkewCorrectedDate = (systemClockOffset) => new Date(Date.now() + systemClockOffset);\n","import { getSkewCorrectedDate } from \"./getSkewCorrectedDate\";\nexport const isClockSkewed = (clockTime, systemClockOffset) => Math.abs(getSkewCorrectedDate(systemClockOffset).getTime() - clockTime) >= 300000;\n","import { isClockSkewed } from \"./isClockSkewed\";\nexport const getUpdatedSystemClockOffset = (clockTime, currentSystemClockOffset) => {\n const clockTimeInMs = Date.parse(clockTime);\n if (isClockSkewed(clockTimeInMs, currentSystemClockOffset)) {\n return clockTimeInMs - Date.now();\n }\n return currentSystemClockOffset;\n};\n","import { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { getSkewCorrectedDate } from \"./utils/getSkewCorrectedDate\";\nimport { getUpdatedSystemClockOffset } from \"./utils/getUpdatedSystemClockOffset\";\nexport const awsAuthMiddleware = (options) => (next, context) => async function (args) {\n if (!HttpRequest.isInstance(args.request))\n return next(args);\n const authScheme = context.endpointV2?.properties?.authSchemes?.[0];\n const multiRegionOverride = authScheme?.name === \"sigv4a\" ? authScheme?.signingRegionSet?.join(\",\") : undefined;\n const signer = await options.signer(authScheme);\n let signedRequest;\n const signingOptions = {\n signingDate: getSkewCorrectedDate(options.systemClockOffset),\n signingRegion: multiRegionOverride || context[\"signing_region\"],\n signingService: context[\"signing_service\"],\n };\n if (context.s3ExpressIdentity) {\n const sigV4MultiRegion = signer;\n signedRequest = await sigV4MultiRegion.signWithCredentials(args.request, context.s3ExpressIdentity, signingOptions);\n if (signedRequest.headers[\"X-Amz-Security-Token\"] || signedRequest.headers[\"x-amz-security-token\"]) {\n throw new Error(\"X-Amz-Security-Token must not be set for s3-express requests.\");\n }\n }\n else {\n signedRequest = await signer.sign(args.request, signingOptions);\n }\n const output = await next({\n ...args,\n request: signedRequest,\n }).catch((error) => {\n const serverTime = error.ServerTime ?? getDateHeader(error.$response);\n if (serverTime) {\n options.systemClockOffset = getUpdatedSystemClockOffset(serverTime, options.systemClockOffset);\n }\n throw error;\n });\n const dateHeader = getDateHeader(output.response);\n if (dateHeader) {\n options.systemClockOffset = getUpdatedSystemClockOffset(dateHeader, options.systemClockOffset);\n }\n return output;\n};\nconst getDateHeader = (response) => HttpResponse.isInstance(response) ? response.headers?.date ?? response.headers?.Date : undefined;\nexport const awsAuthMiddlewareOptions = {\n name: \"awsAuthMiddleware\",\n tags: [\"SIGNATURE\", \"AWSAUTH\"],\n relation: \"after\",\n toMiddleware: \"retryMiddleware\",\n override: true,\n};\nexport const getAwsAuthPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(awsAuthMiddleware(options), awsAuthMiddlewareOptions);\n },\n});\nexport const getSigV4AuthPlugin = getAwsAuthPlugin;\n","export function resolveUserAgentConfig(input) {\n return {\n ...input,\n customUserAgent: typeof input.customUserAgent === \"string\" ? [[input.customUserAgent]] : input.customUserAgent,\n };\n}\n","const IP_V4_REGEX = new RegExp(`^(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}$`);\nexport const isIpAddress = (value) => IP_V4_REGEX.test(value) || (value.startsWith(\"[\") && value.endsWith(\"]\"));\n","const VALID_HOST_LABEL_REGEX = new RegExp(`^(?!.*-$)(?!-)[a-zA-Z0-9-]{1,63}$`);\nexport const isValidHostLabel = (value, allowSubDomains = false) => {\n if (!allowSubDomains) {\n return VALID_HOST_LABEL_REGEX.test(value);\n }\n const labels = value.split(\".\");\n for (const label of labels) {\n if (!isValidHostLabel(label)) {\n return false;\n }\n }\n return true;\n};\n","export const customEndpointFunctions = {};\n","export const debugId = \"endpoints\";\n","export function toDebugString(input) {\n if (typeof input !== \"object\" || input == null) {\n return input;\n }\n if (\"ref\" in input) {\n return `$${toDebugString(input.ref)}`;\n }\n if (\"fn\" in input) {\n return `${input.fn}(${(input.argv || []).map(toDebugString).join(\", \")})`;\n }\n return JSON.stringify(input, null, 2);\n}\n","export class EndpointError extends Error {\n constructor(message) {\n super(message);\n this.name = \"EndpointError\";\n }\n}\n","export const booleanEquals = (value1, value2) => value1 === value2;\n","import { EndpointError } from \"../types\";\nexport const getAttrPathList = (path) => {\n const parts = path.split(\".\");\n const pathList = [];\n for (const part of parts) {\n const squareBracketIndex = part.indexOf(\"[\");\n if (squareBracketIndex !== -1) {\n if (part.indexOf(\"]\") !== part.length - 1) {\n throw new EndpointError(`Path: '${path}' does not end with ']'`);\n }\n const arrayIndex = part.slice(squareBracketIndex + 1, -1);\n if (Number.isNaN(parseInt(arrayIndex))) {\n throw new EndpointError(`Invalid array index: '${arrayIndex}' in path: '${path}'`);\n }\n if (squareBracketIndex !== 0) {\n pathList.push(part.slice(0, squareBracketIndex));\n }\n pathList.push(arrayIndex);\n }\n else {\n pathList.push(part);\n }\n }\n return pathList;\n};\n","import { EndpointError } from \"../types\";\nimport { getAttrPathList } from \"./getAttrPathList\";\nexport const getAttr = (value, path) => getAttrPathList(path).reduce((acc, index) => {\n if (typeof acc !== \"object\") {\n throw new EndpointError(`Index '${index}' in '${path}' not found in '${JSON.stringify(value)}'`);\n }\n else if (Array.isArray(acc)) {\n return acc[parseInt(index)];\n }\n return acc[index];\n}, value);\n","export const isSet = (value) => value != null;\n","export const not = (value) => !value;\n","import { EndpointURLScheme } from \"@smithy/types\";\nimport { isIpAddress } from \"./isIpAddress\";\nconst DEFAULT_PORTS = {\n [EndpointURLScheme.HTTP]: 80,\n [EndpointURLScheme.HTTPS]: 443,\n};\nexport const parseURL = (value) => {\n const whatwgURL = (() => {\n try {\n if (value instanceof URL) {\n return value;\n }\n if (typeof value === \"object\" && \"hostname\" in value) {\n const { hostname, port, protocol = \"\", path = \"\", query = {} } = value;\n const url = new URL(`${protocol}//${hostname}${port ? `:${port}` : \"\"}${path}`);\n url.search = Object.entries(query)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"&\");\n return url;\n }\n return new URL(value);\n }\n catch (error) {\n return null;\n }\n })();\n if (!whatwgURL) {\n console.error(`Unable to parse ${JSON.stringify(value)} as a whatwg URL.`);\n return null;\n }\n const urlString = whatwgURL.href;\n const { host, hostname, pathname, protocol, search } = whatwgURL;\n if (search) {\n return null;\n }\n const scheme = protocol.slice(0, -1);\n if (!Object.values(EndpointURLScheme).includes(scheme)) {\n return null;\n }\n const isIp = isIpAddress(hostname);\n const inputContainsDefaultPort = urlString.includes(`${host}:${DEFAULT_PORTS[scheme]}`) ||\n (typeof value === \"string\" && value.includes(`${host}:${DEFAULT_PORTS[scheme]}`));\n const authority = `${host}${inputContainsDefaultPort ? `:${DEFAULT_PORTS[scheme]}` : ``}`;\n return {\n scheme,\n authority,\n path: pathname,\n normalizedPath: pathname.endsWith(\"/\") ? pathname : `${pathname}/`,\n isIp,\n };\n};\n","export const stringEquals = (value1, value2) => value1 === value2;\n","export const substring = (input, start, stop, reverse) => {\n if (start >= stop || input.length < stop) {\n return null;\n }\n if (!reverse) {\n return input.substring(start, stop);\n }\n return input.substring(input.length - stop, input.length - start);\n};\n","export const uriEncode = (value) => encodeURIComponent(value).replace(/[!*'()]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);\n","import { booleanEquals, getAttr, isSet, isValidHostLabel, not, parseURL, stringEquals, substring, uriEncode, } from \"../lib\";\nexport const endpointFunctions = {\n booleanEquals,\n getAttr,\n isSet,\n isValidHostLabel,\n not,\n parseURL,\n stringEquals,\n substring,\n uriEncode,\n};\n","import { getAttr } from \"../lib\";\nexport const evaluateTemplate = (template, options) => {\n const evaluatedTemplateArr = [];\n const templateContext = {\n ...options.endpointParams,\n ...options.referenceRecord,\n };\n let currentIndex = 0;\n while (currentIndex < template.length) {\n const openingBraceIndex = template.indexOf(\"{\", currentIndex);\n if (openingBraceIndex === -1) {\n evaluatedTemplateArr.push(template.slice(currentIndex));\n break;\n }\n evaluatedTemplateArr.push(template.slice(currentIndex, openingBraceIndex));\n const closingBraceIndex = template.indexOf(\"}\", openingBraceIndex);\n if (closingBraceIndex === -1) {\n evaluatedTemplateArr.push(template.slice(openingBraceIndex));\n break;\n }\n if (template[openingBraceIndex + 1] === \"{\" && template[closingBraceIndex + 1] === \"}\") {\n evaluatedTemplateArr.push(template.slice(openingBraceIndex + 1, closingBraceIndex));\n currentIndex = closingBraceIndex + 2;\n }\n const parameterName = template.substring(openingBraceIndex + 1, closingBraceIndex);\n if (parameterName.includes(\"#\")) {\n const [refName, attrName] = parameterName.split(\"#\");\n evaluatedTemplateArr.push(getAttr(templateContext[refName], attrName));\n }\n else {\n evaluatedTemplateArr.push(templateContext[parameterName]);\n }\n currentIndex = closingBraceIndex + 1;\n }\n return evaluatedTemplateArr.join(\"\");\n};\n","export const getReferenceValue = ({ ref }, options) => {\n const referenceRecord = {\n ...options.endpointParams,\n ...options.referenceRecord,\n };\n return referenceRecord[ref];\n};\n","import { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getReferenceValue } from \"./getReferenceValue\";\nexport const evaluateExpression = (obj, keyName, options) => {\n if (typeof obj === \"string\") {\n return evaluateTemplate(obj, options);\n }\n else if (obj[\"fn\"]) {\n return callFunction(obj, options);\n }\n else if (obj[\"ref\"]) {\n return getReferenceValue(obj, options);\n }\n throw new EndpointError(`'${keyName}': ${String(obj)} is not a string, function or reference.`);\n};\n","import { customEndpointFunctions } from \"./customEndpointFunctions\";\nimport { endpointFunctions } from \"./endpointFunctions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const callFunction = ({ fn, argv }, options) => {\n const evaluatedArgs = argv.map((arg) => [\"boolean\", \"number\"].includes(typeof arg) ? arg : evaluateExpression(arg, \"arg\", options));\n const fnSegments = fn.split(\".\");\n if (fnSegments[0] in customEndpointFunctions && fnSegments[1] != null) {\n return customEndpointFunctions[fnSegments[0]][fnSegments[1]](...evaluatedArgs);\n }\n return endpointFunctions[fn](...evaluatedArgs);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { EndpointError } from \"../types\";\nimport { callFunction } from \"./callFunction\";\nexport const evaluateCondition = ({ assign, ...fnArgs }, options) => {\n if (assign && assign in options.referenceRecord) {\n throw new EndpointError(`'${assign}' is already defined in Reference Record.`);\n }\n const value = callFunction(fnArgs, options);\n options.logger?.debug?.(debugId, `evaluateCondition: ${toDebugString(fnArgs)} = ${toDebugString(value)}`);\n return {\n result: value === \"\" ? true : !!value,\n ...(assign != null && { toAssign: { name: assign, value } }),\n };\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateCondition } from \"./evaluateCondition\";\nexport const evaluateConditions = (conditions = [], options) => {\n const conditionsReferenceRecord = {};\n for (const condition of conditions) {\n const { result, toAssign } = evaluateCondition(condition, {\n ...options,\n referenceRecord: {\n ...options.referenceRecord,\n ...conditionsReferenceRecord,\n },\n });\n if (!result) {\n return { result };\n }\n if (toAssign) {\n conditionsReferenceRecord[toAssign.name] = toAssign.value;\n options.logger?.debug?.(debugId, `assign: ${toAssign.name} := ${toDebugString(toAssign.value)}`);\n }\n }\n return { result: true, referenceRecord: conditionsReferenceRecord };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointHeaders = (headers, options) => Object.entries(headers).reduce((acc, [headerKey, headerVal]) => ({\n ...acc,\n [headerKey]: headerVal.map((headerValEntry) => {\n const processedExpr = evaluateExpression(headerValEntry, \"Header value entry\", options);\n if (typeof processedExpr !== \"string\") {\n throw new EndpointError(`Header '${headerKey}' value '${processedExpr}' is not a string`);\n }\n return processedExpr;\n }),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateTemplate } from \"./evaluateTemplate\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nexport const getEndpointProperty = (property, options) => {\n if (Array.isArray(property)) {\n return property.map((propertyEntry) => getEndpointProperty(propertyEntry, options));\n }\n switch (typeof property) {\n case \"string\":\n return evaluateTemplate(property, options);\n case \"object\":\n if (property === null) {\n throw new EndpointError(`Unexpected endpoint property: ${property}`);\n }\n return getEndpointProperties(property, options);\n case \"boolean\":\n return property;\n default:\n throw new EndpointError(`Unexpected endpoint property type: ${typeof property}`);\n }\n};\n","import { getEndpointProperty } from \"./getEndpointProperty\";\nexport const getEndpointProperties = (properties, options) => Object.entries(properties).reduce((acc, [propertyKey, propertyVal]) => ({\n ...acc,\n [propertyKey]: getEndpointProperty(propertyVal, options),\n}), {});\n","import { EndpointError } from \"../types\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const getEndpointUrl = (endpointUrl, options) => {\n const expression = evaluateExpression(endpointUrl, \"Endpoint URL\", options);\n if (typeof expression === \"string\") {\n try {\n return new URL(expression);\n }\n catch (error) {\n console.error(`Failed to construct URL with ${expression}`, error);\n throw error;\n }\n }\n throw new EndpointError(`Endpoint URL must be a string, got ${typeof expression}`);\n};\n","import { debugId, toDebugString } from \"../debug\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { getEndpointHeaders } from \"./getEndpointHeaders\";\nimport { getEndpointProperties } from \"./getEndpointProperties\";\nimport { getEndpointUrl } from \"./getEndpointUrl\";\nexport const evaluateEndpointRule = (endpointRule, options) => {\n const { conditions, endpoint } = endpointRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n const endpointRuleOptions = {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n };\n const { url, properties, headers } = endpoint;\n options.logger?.debug?.(debugId, `Resolving endpoint from template: ${toDebugString(endpoint)}`);\n return {\n ...(headers != undefined && {\n headers: getEndpointHeaders(headers, endpointRuleOptions),\n }),\n ...(properties != undefined && {\n properties: getEndpointProperties(properties, endpointRuleOptions),\n }),\n url: getEndpointUrl(url, endpointRuleOptions),\n };\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateExpression } from \"./evaluateExpression\";\nexport const evaluateErrorRule = (errorRule, options) => {\n const { conditions, error } = errorRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n throw new EndpointError(evaluateExpression(error, \"Error\", {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n }));\n};\n","import { evaluateConditions } from \"./evaluateConditions\";\nimport { evaluateRules } from \"./evaluateRules\";\nexport const evaluateTreeRule = (treeRule, options) => {\n const { conditions, rules } = treeRule;\n const { result, referenceRecord } = evaluateConditions(conditions, options);\n if (!result) {\n return;\n }\n return evaluateRules(rules, {\n ...options,\n referenceRecord: { ...options.referenceRecord, ...referenceRecord },\n });\n};\n","import { EndpointError } from \"../types\";\nimport { evaluateEndpointRule } from \"./evaluateEndpointRule\";\nimport { evaluateErrorRule } from \"./evaluateErrorRule\";\nimport { evaluateTreeRule } from \"./evaluateTreeRule\";\nexport const evaluateRules = (rules, options) => {\n for (const rule of rules) {\n if (rule.type === \"endpoint\") {\n const endpointOrUndefined = evaluateEndpointRule(rule, options);\n if (endpointOrUndefined) {\n return endpointOrUndefined;\n }\n }\n else if (rule.type === \"error\") {\n evaluateErrorRule(rule, options);\n }\n else if (rule.type === \"tree\") {\n const endpointOrUndefined = evaluateTreeRule(rule, options);\n if (endpointOrUndefined) {\n return endpointOrUndefined;\n }\n }\n else {\n throw new EndpointError(`Unknown endpoint rule: ${rule}`);\n }\n }\n throw new EndpointError(`Rules evaluation failed`);\n};\n","import { debugId, toDebugString } from \"./debug\";\nimport { EndpointError } from \"./types\";\nimport { evaluateRules } from \"./utils\";\nexport const resolveEndpoint = (ruleSetObject, options) => {\n const { endpointParams, logger } = options;\n const { parameters, rules } = ruleSetObject;\n options.logger?.debug?.(`${debugId} Initial EndpointParams: ${toDebugString(endpointParams)}`);\n const paramsWithDefault = Object.entries(parameters)\n .filter(([, v]) => v.default != null)\n .map(([k, v]) => [k, v.default]);\n if (paramsWithDefault.length > 0) {\n for (const [paramKey, paramDefaultValue] of paramsWithDefault) {\n endpointParams[paramKey] = endpointParams[paramKey] ?? paramDefaultValue;\n }\n }\n const requiredParams = Object.entries(parameters)\n .filter(([, v]) => v.required)\n .map(([k]) => k);\n for (const requiredParam of requiredParams) {\n if (endpointParams[requiredParam] == null) {\n throw new EndpointError(`Missing required parameter: '${requiredParam}'`);\n }\n }\n const endpoint = evaluateRules(rules, { endpointParams, logger, referenceRecord: {} });\n if (options.endpointParams?.Endpoint) {\n try {\n const givenEndpoint = new URL(options.endpointParams.Endpoint);\n const { protocol, port } = givenEndpoint;\n endpoint.url.protocol = protocol;\n endpoint.url.port = port;\n }\n catch (e) {\n }\n }\n options.logger?.debug?.(`${debugId} Resolved endpoint: ${toDebugString(endpoint)}`);\n return endpoint;\n};\n","import { isValidHostLabel } from \"@smithy/util-endpoints\";\nimport { isIpAddress } from \"../isIpAddress\";\nexport const isVirtualHostableS3Bucket = (value, allowSubDomains = false) => {\n if (allowSubDomains) {\n for (const label of value.split(\".\")) {\n if (!isVirtualHostableS3Bucket(label)) {\n return false;\n }\n }\n return true;\n }\n if (!isValidHostLabel(value)) {\n return false;\n }\n if (value.length < 3 || value.length > 63) {\n return false;\n }\n if (value !== value.toLowerCase()) {\n return false;\n }\n if (isIpAddress(value)) {\n return false;\n }\n return true;\n};\n","export const parseArn = (value) => {\n const segments = value.split(\":\");\n if (segments.length < 6)\n return null;\n const [arn, partition, service, region, accountId, ...resourceId] = segments;\n if (arn !== \"arn\" || partition === \"\" || service === \"\" || resourceId[0] === \"\")\n return null;\n return {\n partition,\n service,\n region,\n accountId,\n resourceId: resourceId[0].includes(\"/\") ? resourceId[0].split(\"/\") : resourceId,\n };\n};\n","import partitionsInfo from \"./partitions.json\";\nlet selectedPartitionsInfo = partitionsInfo;\nlet selectedUserAgentPrefix = \"\";\nexport const partition = (value) => {\n const { partitions } = selectedPartitionsInfo;\n for (const partition of partitions) {\n const { regions, outputs } = partition;\n for (const [region, regionData] of Object.entries(regions)) {\n if (region === value) {\n return {\n ...outputs,\n ...regionData,\n };\n }\n }\n }\n for (const partition of partitions) {\n const { regionRegex, outputs } = partition;\n if (new RegExp(regionRegex).test(value)) {\n return {\n ...outputs,\n };\n }\n }\n const DEFAULT_PARTITION = partitions.find((partition) => partition.id === \"aws\");\n if (!DEFAULT_PARTITION) {\n throw new Error(\"Provided region was not found in the partition array or regex,\" +\n \" and default partition with id 'aws' doesn't exist.\");\n }\n return {\n ...DEFAULT_PARTITION.outputs,\n };\n};\nexport const setPartitionInfo = (partitionsInfo, userAgentPrefix = \"\") => {\n selectedPartitionsInfo = partitionsInfo;\n selectedUserAgentPrefix = userAgentPrefix;\n};\nexport const useDefaultPartitionInfo = () => {\n setPartitionInfo(partitionsInfo, \"\");\n};\nexport const getUserAgentPrefix = () => selectedUserAgentPrefix;\n","import { customEndpointFunctions } from \"@smithy/util-endpoints\";\nimport { isVirtualHostableS3Bucket } from \"./lib/aws/isVirtualHostableS3Bucket\";\nimport { parseArn } from \"./lib/aws/parseArn\";\nimport { partition } from \"./lib/aws/partition\";\nconst awsEndpointFunctions = {\n isVirtualHostableS3Bucket: isVirtualHostableS3Bucket,\n parseArn: parseArn,\n partition: partition,\n};\ncustomEndpointFunctions.aws = awsEndpointFunctions;\n","export const USER_AGENT = \"user-agent\";\nexport const X_AMZ_USER_AGENT = \"x-amz-user-agent\";\nexport const SPACE = \" \";\nexport const UA_NAME_SEPARATOR = \"/\";\nexport const UA_NAME_ESCAPE_REGEX = /[^\\!\\$\\%\\&\\'\\*\\+\\-\\.\\^\\_\\`\\|\\~\\d\\w]/g;\nexport const UA_VALUE_ESCAPE_REGEX = /[^\\!\\$\\%\\&\\'\\*\\+\\-\\.\\^\\_\\`\\|\\~\\d\\w\\#]/g;\nexport const UA_ESCAPE_CHAR = \"-\";\n","import { getUserAgentPrefix } from \"@aws-sdk/util-endpoints\";\nimport { HttpRequest } from \"@smithy/protocol-http\";\nimport { SPACE, UA_ESCAPE_CHAR, UA_NAME_ESCAPE_REGEX, UA_NAME_SEPARATOR, UA_VALUE_ESCAPE_REGEX, USER_AGENT, X_AMZ_USER_AGENT, } from \"./constants\";\nexport const userAgentMiddleware = (options) => (next, context) => async (args) => {\n const { request } = args;\n if (!HttpRequest.isInstance(request))\n return next(args);\n const { headers } = request;\n const userAgent = context?.userAgent?.map(escapeUserAgent) || [];\n const defaultUserAgent = (await options.defaultUserAgentProvider()).map(escapeUserAgent);\n const customUserAgent = options?.customUserAgent?.map(escapeUserAgent) || [];\n const prefix = getUserAgentPrefix();\n const sdkUserAgentValue = (prefix ? [prefix] : [])\n .concat([...defaultUserAgent, ...userAgent, ...customUserAgent])\n .join(SPACE);\n const normalUAValue = [\n ...defaultUserAgent.filter((section) => section.startsWith(\"aws-sdk-\")),\n ...customUserAgent,\n ].join(SPACE);\n if (options.runtime !== \"browser\") {\n if (normalUAValue) {\n headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT]\n ? `${headers[USER_AGENT]} ${normalUAValue}`\n : normalUAValue;\n }\n headers[USER_AGENT] = sdkUserAgentValue;\n }\n else {\n headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;\n }\n return next({\n ...args,\n request,\n });\n};\nconst escapeUserAgent = (userAgentPair) => {\n const name = userAgentPair[0]\n .split(UA_NAME_SEPARATOR)\n .map((part) => part.replace(UA_NAME_ESCAPE_REGEX, UA_ESCAPE_CHAR))\n .join(UA_NAME_SEPARATOR);\n const version = userAgentPair[1]?.replace(UA_VALUE_ESCAPE_REGEX, UA_ESCAPE_CHAR);\n const prefixSeparatorIndex = name.indexOf(UA_NAME_SEPARATOR);\n const prefix = name.substring(0, prefixSeparatorIndex);\n let uaName = name.substring(prefixSeparatorIndex + 1);\n if (prefix === \"api\") {\n uaName = uaName.toLowerCase();\n }\n return [prefix, uaName, version]\n .filter((item) => item && item.length > 0)\n .reduce((acc, item, index) => {\n switch (index) {\n case 0:\n return item;\n case 1:\n return `${acc}/${item}`;\n default:\n return `${acc}#${item}`;\n }\n }, \"\");\n};\nexport const getUserAgentMiddlewareOptions = {\n name: \"getUserAgentMiddleware\",\n step: \"build\",\n priority: \"low\",\n tags: [\"SET_USER_AGENT\", \"USER_AGENT\"],\n override: true,\n};\nexport const getUserAgentPlugin = (config) => ({\n applyToStack: (clientStack) => {\n clientStack.add(userAgentMiddleware(config), getUserAgentMiddlewareOptions);\n },\n});\n","export var SelectorType;\n(function (SelectorType) {\n SelectorType[\"ENV\"] = \"env\";\n SelectorType[\"CONFIG\"] = \"shared config entry\";\n})(SelectorType || (SelectorType = {}));\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_DUALSTACK_ENDPOINT = \"AWS_USE_DUALSTACK_ENDPOINT\";\nexport const CONFIG_USE_DUALSTACK_ENDPOINT = \"use_dualstack_endpoint\";\nexport const DEFAULT_USE_DUALSTACK_ENDPOINT = false;\nexport const NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_DUALSTACK_ENDPOINT, SelectorType.ENV),\n configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_DUALSTACK_ENDPOINT, SelectorType.CONFIG),\n default: false,\n};\n","import { booleanSelector, SelectorType } from \"@smithy/util-config-provider\";\nexport const ENV_USE_FIPS_ENDPOINT = \"AWS_USE_FIPS_ENDPOINT\";\nexport const CONFIG_USE_FIPS_ENDPOINT = \"use_fips_endpoint\";\nexport const DEFAULT_USE_FIPS_ENDPOINT = false;\nexport const NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => booleanSelector(env, ENV_USE_FIPS_ENDPOINT, SelectorType.ENV),\n configFileSelector: (profile) => booleanSelector(profile, CONFIG_USE_FIPS_ENDPOINT, SelectorType.CONFIG),\n default: false,\n};\n","export const isFipsRegion = (region) => typeof region === \"string\" && (region.startsWith(\"fips-\") || region.endsWith(\"-fips\"));\n","import { isFipsRegion } from \"./isFipsRegion\";\nexport const getRealRegion = (region) => isFipsRegion(region)\n ? [\"fips-aws-global\", \"aws-fips\"].includes(region)\n ? \"us-east-1\"\n : region.replace(/fips-(dkr-|prod-)?|-fips/, \"\")\n : region;\n","import { getRealRegion } from \"./getRealRegion\";\nimport { isFipsRegion } from \"./isFipsRegion\";\nexport const resolveRegionConfig = (input) => {\n const { region, useFipsEndpoint } = input;\n if (!region) {\n throw new Error(\"Region is missing\");\n }\n return {\n ...input,\n region: async () => {\n if (typeof region === \"string\") {\n return getRealRegion(region);\n }\n const providedRegion = await region();\n return getRealRegion(providedRegion);\n },\n useFipsEndpoint: async () => {\n const providedRegion = typeof region === \"string\" ? region : await region();\n if (isFipsRegion(providedRegion)) {\n return true;\n }\n return typeof useFipsEndpoint !== \"function\" ? Promise.resolve(!!useFipsEndpoint) : useFipsEndpoint();\n },\n };\n};\n","import { HttpRequest } from \"@smithy/protocol-http\";\nconst CONTENT_LENGTH_HEADER = \"content-length\";\nexport function contentLengthMiddleware(bodyLengthChecker) {\n return (next) => async (args) => {\n const request = args.request;\n if (HttpRequest.isInstance(request)) {\n const { body, headers } = request;\n if (body &&\n Object.keys(headers)\n .map((str) => str.toLowerCase())\n .indexOf(CONTENT_LENGTH_HEADER) === -1) {\n try {\n const length = bodyLengthChecker(body);\n request.headers = {\n ...request.headers,\n [CONTENT_LENGTH_HEADER]: String(length),\n };\n }\n catch (error) {\n }\n }\n }\n return next({\n ...args,\n request,\n });\n };\n}\nexport const contentLengthMiddlewareOptions = {\n step: \"build\",\n tags: [\"SET_CONTENT_LENGTH\", \"CONTENT_LENGTH\"],\n name: \"contentLengthMiddleware\",\n override: true,\n};\nexport const getContentLengthPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(contentLengthMiddleware(options.bodyLengthChecker), contentLengthMiddlewareOptions);\n },\n});\n","export const resolveParamsForS3 = async (endpointParams) => {\n const bucket = endpointParams?.Bucket || \"\";\n if (typeof endpointParams.Bucket === \"string\") {\n endpointParams.Bucket = bucket.replace(/#/g, encodeURIComponent(\"#\")).replace(/\\?/g, encodeURIComponent(\"?\"));\n }\n if (isArnBucketName(bucket)) {\n if (endpointParams.ForcePathStyle === true) {\n throw new Error(\"Path-style addressing cannot be used with ARN buckets\");\n }\n }\n else if (!isDnsCompatibleBucketName(bucket) ||\n (bucket.indexOf(\".\") !== -1 && !String(endpointParams.Endpoint).startsWith(\"http:\")) ||\n bucket.toLowerCase() !== bucket ||\n bucket.length < 3) {\n endpointParams.ForcePathStyle = true;\n }\n if (endpointParams.DisableMultiRegionAccessPoints) {\n endpointParams.disableMultiRegionAccessPoints = true;\n endpointParams.DisableMRAP = true;\n }\n return endpointParams;\n};\nconst DOMAIN_PATTERN = /^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/;\nconst IP_ADDRESS_PATTERN = /(\\d+\\.){3}\\d+/;\nconst DOTS_PATTERN = /\\.\\./;\nexport const DOT_PATTERN = /\\./;\nexport const S3_HOSTNAME_PATTERN = /^(.+\\.)?s3(-fips)?(\\.dualstack)?[.-]([a-z0-9-]+)\\./;\nexport const isDnsCompatibleBucketName = (bucketName) => DOMAIN_PATTERN.test(bucketName) && !IP_ADDRESS_PATTERN.test(bucketName) && !DOTS_PATTERN.test(bucketName);\nexport const isArnBucketName = (bucketName) => {\n const [arn, partition, service, region, account, typeOrId] = bucketName.split(\":\");\n const isArn = arn === \"arn\" && bucketName.split(\":\").length >= 6;\n const isValidArn = [arn, partition, service, account, typeOrId].filter(Boolean).length === 5;\n if (isArn && !isValidArn) {\n throw new Error(`Invalid ARN: ${bucketName} was an invalid ARN.`);\n }\n return arn === \"arn\" && !!partition && !!service && !!account && !!typeOrId;\n};\n","export const createConfigValueProvider = (configKey, canonicalEndpointParamKey, config) => {\n const configProvider = async () => {\n const configValue = config[configKey] ?? config[canonicalEndpointParamKey];\n if (typeof configValue === \"function\") {\n return configValue();\n }\n return configValue;\n };\n if (configKey === \"credentialScope\" || canonicalEndpointParamKey === \"CredentialScope\") {\n return async () => {\n const credentials = typeof config.credentials === \"function\" ? await config.credentials() : config.credentials;\n const configValue = credentials?.credentialScope ?? credentials?.CredentialScope;\n return configValue;\n };\n }\n if (configKey === \"endpoint\" || canonicalEndpointParamKey === \"endpoint\") {\n return async () => {\n const endpoint = await configProvider();\n if (endpoint && typeof endpoint === \"object\") {\n if (\"url\" in endpoint) {\n return endpoint.url.href;\n }\n if (\"hostname\" in endpoint) {\n const { protocol, hostname, port, path } = endpoint;\n return `${protocol}//${hostname}${port ? \":\" + port : \"\"}${path}`;\n }\n }\n return endpoint;\n };\n }\n return configProvider;\n};\n","export const getEndpointFromConfig = async (serviceId) => undefined;\n","export function parseQueryString(querystring) {\n const query = {};\n querystring = querystring.replace(/^\\?/, \"\");\n if (querystring) {\n for (const pair of querystring.split(\"&\")) {\n let [key, value = null] = pair.split(\"=\");\n key = decodeURIComponent(key);\n if (value) {\n value = decodeURIComponent(value);\n }\n if (!(key in query)) {\n query[key] = value;\n }\n else if (Array.isArray(query[key])) {\n query[key].push(value);\n }\n else {\n query[key] = [query[key], value];\n }\n }\n }\n return query;\n}\n","import { parseQueryString } from \"@smithy/querystring-parser\";\nexport const parseUrl = (url) => {\n if (typeof url === \"string\") {\n return parseUrl(new URL(url));\n }\n const { hostname, pathname, port, protocol, search } = url;\n let query;\n if (search) {\n query = parseQueryString(search);\n }\n return {\n hostname,\n port: port ? parseInt(port) : undefined,\n protocol,\n path: pathname,\n query,\n };\n};\n","import { parseUrl } from \"@smithy/url-parser\";\nexport const toEndpointV1 = (endpoint) => {\n if (typeof endpoint === \"object\") {\n if (\"url\" in endpoint) {\n return parseUrl(endpoint.url);\n }\n return endpoint;\n }\n return parseUrl(endpoint);\n};\n","import { resolveParamsForS3 } from \"../service-customizations\";\nimport { createConfigValueProvider } from \"./createConfigValueProvider\";\nimport { getEndpointFromConfig } from \"./getEndpointFromConfig\";\nimport { toEndpointV1 } from \"./toEndpointV1\";\nexport const getEndpointFromInstructions = async (commandInput, instructionsSupplier, clientConfig, context) => {\n if (!clientConfig.endpoint) {\n const endpointFromConfig = await getEndpointFromConfig(clientConfig.serviceId || \"\");\n if (endpointFromConfig) {\n clientConfig.endpoint = () => Promise.resolve(toEndpointV1(endpointFromConfig));\n }\n }\n const endpointParams = await resolveParams(commandInput, instructionsSupplier, clientConfig);\n if (typeof clientConfig.endpointProvider !== \"function\") {\n throw new Error(\"config.endpointProvider is not set.\");\n }\n const endpoint = clientConfig.endpointProvider(endpointParams, context);\n return endpoint;\n};\nexport const resolveParams = async (commandInput, instructionsSupplier, clientConfig) => {\n const endpointParams = {};\n const instructions = instructionsSupplier?.getEndpointParameterInstructions?.() || {};\n for (const [name, instruction] of Object.entries(instructions)) {\n switch (instruction.type) {\n case \"staticContextParams\":\n endpointParams[name] = instruction.value;\n break;\n case \"contextParams\":\n endpointParams[name] = commandInput[instruction.name];\n break;\n case \"clientContextParams\":\n case \"builtInParams\":\n endpointParams[name] = await createConfigValueProvider(instruction.name, name, clientConfig)();\n break;\n default:\n throw new Error(\"Unrecognized endpoint parameter instruction: \" + JSON.stringify(instruction));\n }\n }\n if (Object.keys(instructions).length === 0) {\n Object.assign(endpointParams, clientConfig);\n }\n if (String(clientConfig.serviceId).toLowerCase() === \"s3\") {\n await resolveParamsForS3(endpointParams);\n }\n return endpointParams;\n};\n","import { getSmithyContext } from \"@smithy/util-middleware\";\nimport { getEndpointFromInstructions } from \"./adaptors/getEndpointFromInstructions\";\nexport const endpointMiddleware = ({ config, instructions, }) => {\n return (next, context) => async (args) => {\n const endpoint = await getEndpointFromInstructions(args.input, {\n getEndpointParameterInstructions() {\n return instructions;\n },\n }, { ...config }, context);\n context.endpointV2 = endpoint;\n context.authSchemes = endpoint.properties?.authSchemes;\n const authScheme = context.authSchemes?.[0];\n if (authScheme) {\n context[\"signing_region\"] = authScheme.signingRegion;\n context[\"signing_service\"] = authScheme.signingName;\n const smithyContext = getSmithyContext(context);\n const httpAuthOption = smithyContext?.selectedHttpAuthScheme?.httpAuthOption;\n if (httpAuthOption) {\n httpAuthOption.signingProperties = Object.assign(httpAuthOption.signingProperties || {}, {\n signing_region: authScheme.signingRegion,\n signingRegion: authScheme.signingRegion,\n signing_service: authScheme.signingName,\n signingName: authScheme.signingName,\n signingRegionSet: authScheme.signingRegionSet,\n }, authScheme.properties);\n }\n }\n return next({\n ...args,\n });\n };\n};\n","export const deserializerMiddleware = (options, deserializer) => (next, context) => async (args) => {\n const { response } = await next(args);\n try {\n const parsed = await deserializer(response, options);\n return {\n response,\n output: parsed,\n };\n }\n catch (error) {\n Object.defineProperty(error, \"$response\", {\n value: response,\n });\n if (!(\"$metadata\" in error)) {\n const hint = `Deserialization error: to see the raw response, inspect the hidden field {error}.$response on this object.`;\n error.message += \"\\n \" + hint;\n }\n throw error;\n }\n};\n","export const serializerMiddleware = (options, serializer) => (next, context) => async (args) => {\n const endpoint = context.endpointV2?.url && options.urlParser\n ? async () => options.urlParser(context.endpointV2.url)\n : options.endpoint;\n if (!endpoint) {\n throw new Error(\"No valid endpoint provider available.\");\n }\n const request = await serializer(args.input, { ...options, endpoint });\n return next({\n ...args,\n request,\n });\n};\n","import { deserializerMiddleware } from \"./deserializerMiddleware\";\nimport { serializerMiddleware } from \"./serializerMiddleware\";\nexport const deserializerMiddlewareOption = {\n name: \"deserializerMiddleware\",\n step: \"deserialize\",\n tags: [\"DESERIALIZER\"],\n override: true,\n};\nexport const serializerMiddlewareOption = {\n name: \"serializerMiddleware\",\n step: \"serialize\",\n tags: [\"SERIALIZER\"],\n override: true,\n};\nexport function getSerdePlugin(config, serializer, deserializer) {\n return {\n applyToStack: (commandStack) => {\n commandStack.add(deserializerMiddleware(config, deserializer), deserializerMiddlewareOption);\n commandStack.add(serializerMiddleware(config, serializer), serializerMiddlewareOption);\n },\n };\n}\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { endpointMiddleware } from \"./endpointMiddleware\";\nexport const endpointMiddlewareOptions = {\n step: \"serialize\",\n tags: [\"ENDPOINT_PARAMETERS\", \"ENDPOINT_V2\", \"ENDPOINT\"],\n name: \"endpointV2Middleware\",\n override: true,\n relation: \"before\",\n toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getEndpointPlugin = (config, instructions) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(endpointMiddleware({\n config,\n instructions,\n }), endpointMiddlewareOptions);\n },\n});\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { toEndpointV1 } from \"./adaptors/toEndpointV1\";\nexport const resolveEndpointConfig = (input) => {\n const tls = input.tls ?? true;\n const { endpoint } = input;\n const customEndpointProvider = endpoint != null ? async () => toEndpointV1(await normalizeProvider(endpoint)()) : undefined;\n const isCustomEndpoint = !!endpoint;\n return {\n ...input,\n endpoint: customEndpointProvider,\n tls,\n isCustomEndpoint,\n useDualstackEndpoint: normalizeProvider(input.useDualstackEndpoint ?? false),\n useFipsEndpoint: normalizeProvider(input.useFipsEndpoint ?? false),\n };\n};\n","export var RETRY_MODES;\n(function (RETRY_MODES) {\n RETRY_MODES[\"STANDARD\"] = \"standard\";\n RETRY_MODES[\"ADAPTIVE\"] = \"adaptive\";\n})(RETRY_MODES || (RETRY_MODES = {}));\nexport const DEFAULT_MAX_ATTEMPTS = 3;\nexport const DEFAULT_RETRY_MODE = RETRY_MODES.STANDARD;\n","export const CLOCK_SKEW_ERROR_CODES = [\n \"AuthFailure\",\n \"InvalidSignatureException\",\n \"RequestExpired\",\n \"RequestInTheFuture\",\n \"RequestTimeTooSkewed\",\n \"SignatureDoesNotMatch\",\n];\nexport const THROTTLING_ERROR_CODES = [\n \"BandwidthLimitExceeded\",\n \"EC2ThrottledException\",\n \"LimitExceededException\",\n \"PriorRequestNotComplete\",\n \"ProvisionedThroughputExceededException\",\n \"RequestLimitExceeded\",\n \"RequestThrottled\",\n \"RequestThrottledException\",\n \"SlowDown\",\n \"ThrottledException\",\n \"Throttling\",\n \"ThrottlingException\",\n \"TooManyRequestsException\",\n \"TransactionInProgressException\",\n];\nexport const TRANSIENT_ERROR_CODES = [\"TimeoutError\", \"RequestTimeout\", \"RequestTimeoutException\"];\nexport const TRANSIENT_ERROR_STATUS_CODES = [500, 502, 503, 504];\nexport const NODEJS_TIMEOUT_ERROR_CODES = [\"ECONNRESET\", \"ECONNREFUSED\", \"EPIPE\", \"ETIMEDOUT\"];\n","import { CLOCK_SKEW_ERROR_CODES, NODEJS_TIMEOUT_ERROR_CODES, THROTTLING_ERROR_CODES, TRANSIENT_ERROR_CODES, TRANSIENT_ERROR_STATUS_CODES, } from \"./constants\";\nexport const isRetryableByTrait = (error) => error.$retryable !== undefined;\nexport const isClockSkewError = (error) => CLOCK_SKEW_ERROR_CODES.includes(error.name);\nexport const isThrottlingError = (error) => error.$metadata?.httpStatusCode === 429 ||\n THROTTLING_ERROR_CODES.includes(error.name) ||\n error.$retryable?.throttling == true;\nexport const isTransientError = (error) => TRANSIENT_ERROR_CODES.includes(error.name) ||\n NODEJS_TIMEOUT_ERROR_CODES.includes(error?.code || \"\") ||\n TRANSIENT_ERROR_STATUS_CODES.includes(error.$metadata?.httpStatusCode || 0);\nexport const isServerError = (error) => {\n if (error.$metadata?.httpStatusCode !== undefined) {\n const statusCode = error.$metadata.httpStatusCode;\n if (500 <= statusCode && statusCode <= 599 && !isTransientError(error)) {\n return true;\n }\n return false;\n }\n return false;\n};\n","import { isThrottlingError } from \"@smithy/service-error-classification\";\nexport class DefaultRateLimiter {\n constructor(options) {\n this.currentCapacity = 0;\n this.enabled = false;\n this.lastMaxRate = 0;\n this.measuredTxRate = 0;\n this.requestCount = 0;\n this.lastTimestamp = 0;\n this.timeWindow = 0;\n this.beta = options?.beta ?? 0.7;\n this.minCapacity = options?.minCapacity ?? 1;\n this.minFillRate = options?.minFillRate ?? 0.5;\n this.scaleConstant = options?.scaleConstant ?? 0.4;\n this.smooth = options?.smooth ?? 0.8;\n const currentTimeInSeconds = this.getCurrentTimeInSeconds();\n this.lastThrottleTime = currentTimeInSeconds;\n this.lastTxRateBucket = Math.floor(this.getCurrentTimeInSeconds());\n this.fillRate = this.minFillRate;\n this.maxCapacity = this.minCapacity;\n }\n getCurrentTimeInSeconds() {\n return Date.now() / 1000;\n }\n async getSendToken() {\n return this.acquireTokenBucket(1);\n }\n async acquireTokenBucket(amount) {\n if (!this.enabled) {\n return;\n }\n this.refillTokenBucket();\n if (amount > this.currentCapacity) {\n const delay = ((amount - this.currentCapacity) / this.fillRate) * 1000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n this.currentCapacity = this.currentCapacity - amount;\n }\n refillTokenBucket() {\n const timestamp = this.getCurrentTimeInSeconds();\n if (!this.lastTimestamp) {\n this.lastTimestamp = timestamp;\n return;\n }\n const fillAmount = (timestamp - this.lastTimestamp) * this.fillRate;\n this.currentCapacity = Math.min(this.maxCapacity, this.currentCapacity + fillAmount);\n this.lastTimestamp = timestamp;\n }\n updateClientSendingRate(response) {\n let calculatedRate;\n this.updateMeasuredRate();\n if (isThrottlingError(response)) {\n const rateToUse = !this.enabled ? this.measuredTxRate : Math.min(this.measuredTxRate, this.fillRate);\n this.lastMaxRate = rateToUse;\n this.calculateTimeWindow();\n this.lastThrottleTime = this.getCurrentTimeInSeconds();\n calculatedRate = this.cubicThrottle(rateToUse);\n this.enableTokenBucket();\n }\n else {\n this.calculateTimeWindow();\n calculatedRate = this.cubicSuccess(this.getCurrentTimeInSeconds());\n }\n const newRate = Math.min(calculatedRate, 2 * this.measuredTxRate);\n this.updateTokenBucketRate(newRate);\n }\n calculateTimeWindow() {\n this.timeWindow = this.getPrecise(Math.pow((this.lastMaxRate * (1 - this.beta)) / this.scaleConstant, 1 / 3));\n }\n cubicThrottle(rateToUse) {\n return this.getPrecise(rateToUse * this.beta);\n }\n cubicSuccess(timestamp) {\n return this.getPrecise(this.scaleConstant * Math.pow(timestamp - this.lastThrottleTime - this.timeWindow, 3) + this.lastMaxRate);\n }\n enableTokenBucket() {\n this.enabled = true;\n }\n updateTokenBucketRate(newRate) {\n this.refillTokenBucket();\n this.fillRate = Math.max(newRate, this.minFillRate);\n this.maxCapacity = Math.max(newRate, this.minCapacity);\n this.currentCapacity = Math.min(this.currentCapacity, this.maxCapacity);\n }\n updateMeasuredRate() {\n const t = this.getCurrentTimeInSeconds();\n const timeBucket = Math.floor(t * 2) / 2;\n this.requestCount++;\n if (timeBucket > this.lastTxRateBucket) {\n const currentRate = this.requestCount / (timeBucket - this.lastTxRateBucket);\n this.measuredTxRate = this.getPrecise(currentRate * this.smooth + this.measuredTxRate * (1 - this.smooth));\n this.requestCount = 0;\n this.lastTxRateBucket = timeBucket;\n }\n }\n getPrecise(num) {\n return parseFloat(num.toFixed(8));\n }\n}\n","export const DEFAULT_RETRY_DELAY_BASE = 100;\nexport const MAXIMUM_RETRY_DELAY = 20 * 1000;\nexport const THROTTLING_RETRY_DELAY_BASE = 500;\nexport const INITIAL_RETRY_TOKENS = 500;\nexport const RETRY_COST = 5;\nexport const TIMEOUT_RETRY_COST = 10;\nexport const NO_RETRY_INCREMENT = 1;\nexport const INVOCATION_ID_HEADER = \"amz-sdk-invocation-id\";\nexport const REQUEST_HEADER = \"amz-sdk-request\";\n","import { DEFAULT_RETRY_DELAY_BASE, MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const getDefaultRetryBackoffStrategy = () => {\n let delayBase = DEFAULT_RETRY_DELAY_BASE;\n const computeNextBackoffDelay = (attempts) => {\n return Math.floor(Math.min(MAXIMUM_RETRY_DELAY, Math.random() * 2 ** attempts * delayBase));\n };\n const setDelayBase = (delay) => {\n delayBase = delay;\n };\n return {\n computeNextBackoffDelay,\n setDelayBase,\n };\n};\n","import { MAXIMUM_RETRY_DELAY } from \"./constants\";\nexport const createDefaultRetryToken = ({ retryDelay, retryCount, retryCost, }) => {\n const getRetryCount = () => retryCount;\n const getRetryDelay = () => Math.min(MAXIMUM_RETRY_DELAY, retryDelay);\n const getRetryCost = () => retryCost;\n return {\n getRetryCount,\n getRetryDelay,\n getRetryCost,\n };\n};\n","import { DEFAULT_MAX_ATTEMPTS, RETRY_MODES } from \"./config\";\nimport { DEFAULT_RETRY_DELAY_BASE, INITIAL_RETRY_TOKENS, NO_RETRY_INCREMENT, RETRY_COST, THROTTLING_RETRY_DELAY_BASE, TIMEOUT_RETRY_COST, } from \"./constants\";\nimport { getDefaultRetryBackoffStrategy } from \"./defaultRetryBackoffStrategy\";\nimport { createDefaultRetryToken } from \"./defaultRetryToken\";\nexport class StandardRetryStrategy {\n constructor(maxAttempts) {\n this.maxAttempts = maxAttempts;\n this.mode = RETRY_MODES.STANDARD;\n this.capacity = INITIAL_RETRY_TOKENS;\n this.retryBackoffStrategy = getDefaultRetryBackoffStrategy();\n this.maxAttemptsProvider = typeof maxAttempts === \"function\" ? maxAttempts : async () => maxAttempts;\n }\n async acquireInitialRetryToken(retryTokenScope) {\n return createDefaultRetryToken({\n retryDelay: DEFAULT_RETRY_DELAY_BASE,\n retryCount: 0,\n });\n }\n async refreshRetryTokenForRetry(token, errorInfo) {\n const maxAttempts = await this.getMaxAttempts();\n if (this.shouldRetry(token, errorInfo, maxAttempts)) {\n const errorType = errorInfo.errorType;\n this.retryBackoffStrategy.setDelayBase(errorType === \"THROTTLING\" ? THROTTLING_RETRY_DELAY_BASE : DEFAULT_RETRY_DELAY_BASE);\n const delayFromErrorType = this.retryBackoffStrategy.computeNextBackoffDelay(token.getRetryCount());\n const retryDelay = errorInfo.retryAfterHint\n ? Math.max(errorInfo.retryAfterHint.getTime() - Date.now() || 0, delayFromErrorType)\n : delayFromErrorType;\n const capacityCost = this.getCapacityCost(errorType);\n this.capacity -= capacityCost;\n return createDefaultRetryToken({\n retryDelay,\n retryCount: token.getRetryCount() + 1,\n retryCost: capacityCost,\n });\n }\n throw new Error(\"No retry token available\");\n }\n recordSuccess(token) {\n this.capacity = Math.max(INITIAL_RETRY_TOKENS, this.capacity + (token.getRetryCost() ?? NO_RETRY_INCREMENT));\n }\n getCapacity() {\n return this.capacity;\n }\n async getMaxAttempts() {\n try {\n return await this.maxAttemptsProvider();\n }\n catch (error) {\n console.warn(`Max attempts provider could not resolve. Using default of ${DEFAULT_MAX_ATTEMPTS}`);\n return DEFAULT_MAX_ATTEMPTS;\n }\n }\n shouldRetry(tokenToRenew, errorInfo, maxAttempts) {\n const attempts = tokenToRenew.getRetryCount() + 1;\n return (attempts < maxAttempts &&\n this.capacity >= this.getCapacityCost(errorInfo.errorType) &&\n this.isRetryableError(errorInfo.errorType));\n }\n getCapacityCost(errorType) {\n return errorType === \"TRANSIENT\" ? TIMEOUT_RETRY_COST : RETRY_COST;\n }\n isRetryableError(errorType) {\n return errorType === \"THROTTLING\" || errorType === \"TRANSIENT\";\n }\n}\n","import { RETRY_MODES } from \"./config\";\nimport { DefaultRateLimiter } from \"./DefaultRateLimiter\";\nimport { StandardRetryStrategy } from \"./StandardRetryStrategy\";\nexport class AdaptiveRetryStrategy {\n constructor(maxAttemptsProvider, options) {\n this.maxAttemptsProvider = maxAttemptsProvider;\n this.mode = RETRY_MODES.ADAPTIVE;\n const { rateLimiter } = options ?? {};\n this.rateLimiter = rateLimiter ?? new DefaultRateLimiter();\n this.standardRetryStrategy = new StandardRetryStrategy(maxAttemptsProvider);\n }\n async acquireInitialRetryToken(retryTokenScope) {\n await this.rateLimiter.getSendToken();\n return this.standardRetryStrategy.acquireInitialRetryToken(retryTokenScope);\n }\n async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {\n this.rateLimiter.updateClientSendingRate(errorInfo);\n return this.standardRetryStrategy.refreshRetryTokenForRetry(tokenToRenew, errorInfo);\n }\n recordSuccess(token) {\n this.rateLimiter.updateClientSendingRate({});\n this.standardRetryStrategy.recordSuccess(token);\n }\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","export const asSdkError = (error) => {\n if (error instanceof Error)\n return error;\n if (error instanceof Object)\n return Object.assign(new Error(), error);\n if (typeof error === \"string\")\n return new Error(error);\n return new Error(`AWS SDK error wrapper for ${error}`);\n};\n","import { normalizeProvider } from \"@smithy/util-middleware\";\nimport { AdaptiveRetryStrategy, DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE, RETRY_MODES, StandardRetryStrategy, } from \"@smithy/util-retry\";\nexport const ENV_MAX_ATTEMPTS = \"AWS_MAX_ATTEMPTS\";\nexport const CONFIG_MAX_ATTEMPTS = \"max_attempts\";\nexport const NODE_MAX_ATTEMPT_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => {\n const value = env[ENV_MAX_ATTEMPTS];\n if (!value)\n return undefined;\n const maxAttempt = parseInt(value);\n if (Number.isNaN(maxAttempt)) {\n throw new Error(`Environment variable ${ENV_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n }\n return maxAttempt;\n },\n configFileSelector: (profile) => {\n const value = profile[CONFIG_MAX_ATTEMPTS];\n if (!value)\n return undefined;\n const maxAttempt = parseInt(value);\n if (Number.isNaN(maxAttempt)) {\n throw new Error(`Shared config file entry ${CONFIG_MAX_ATTEMPTS} mast be a number, got \"${value}\"`);\n }\n return maxAttempt;\n },\n default: DEFAULT_MAX_ATTEMPTS,\n};\nexport const resolveRetryConfig = (input) => {\n const { retryStrategy } = input;\n const maxAttempts = normalizeProvider(input.maxAttempts ?? DEFAULT_MAX_ATTEMPTS);\n return {\n ...input,\n maxAttempts,\n retryStrategy: async () => {\n if (retryStrategy) {\n return retryStrategy;\n }\n const retryMode = await normalizeProvider(input.retryMode)();\n if (retryMode === RETRY_MODES.ADAPTIVE) {\n return new AdaptiveRetryStrategy(maxAttempts);\n }\n return new StandardRetryStrategy(maxAttempts);\n },\n };\n};\nexport const ENV_RETRY_MODE = \"AWS_RETRY_MODE\";\nexport const CONFIG_RETRY_MODE = \"retry_mode\";\nexport const NODE_RETRY_MODE_CONFIG_OPTIONS = {\n environmentVariableSelector: (env) => env[ENV_RETRY_MODE],\n configFileSelector: (profile) => profile[CONFIG_RETRY_MODE],\n default: DEFAULT_RETRY_MODE,\n};\n","export class NoOpLogger {\n trace() { }\n debug() { }\n info() { }\n warn() { }\n error() { }\n}\n","const getAllAliases = (name, aliases) => {\n const _aliases = [];\n if (name) {\n _aliases.push(name);\n }\n if (aliases) {\n for (const alias of aliases) {\n _aliases.push(alias);\n }\n }\n return _aliases;\n};\nconst getMiddlewareNameWithAliases = (name, aliases) => {\n return `${name || \"anonymous\"}${aliases && aliases.length > 0 ? ` (a.k.a. ${aliases.join(\",\")})` : \"\"}`;\n};\nexport const constructStack = () => {\n let absoluteEntries = [];\n let relativeEntries = [];\n let identifyOnResolve = false;\n const entriesNameSet = new Set();\n const sort = (entries) => entries.sort((a, b) => stepWeights[b.step] - stepWeights[a.step] ||\n priorityWeights[b.priority || \"normal\"] - priorityWeights[a.priority || \"normal\"]);\n const removeByName = (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n const aliases = getAllAliases(entry.name, entry.aliases);\n if (aliases.includes(toRemove)) {\n isRemoved = true;\n for (const alias of aliases) {\n entriesNameSet.delete(alias);\n }\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n };\n const removeByReference = (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n if (entry.middleware === toRemove) {\n isRemoved = true;\n for (const alias of getAllAliases(entry.name, entry.aliases)) {\n entriesNameSet.delete(alias);\n }\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n };\n const cloneTo = (toStack) => {\n absoluteEntries.forEach((entry) => {\n toStack.add(entry.middleware, { ...entry });\n });\n relativeEntries.forEach((entry) => {\n toStack.addRelativeTo(entry.middleware, { ...entry });\n });\n toStack.identifyOnResolve?.(stack.identifyOnResolve());\n return toStack;\n };\n const expandRelativeMiddlewareList = (from) => {\n const expandedMiddlewareList = [];\n from.before.forEach((entry) => {\n if (entry.before.length === 0 && entry.after.length === 0) {\n expandedMiddlewareList.push(entry);\n }\n else {\n expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n }\n });\n expandedMiddlewareList.push(from);\n from.after.reverse().forEach((entry) => {\n if (entry.before.length === 0 && entry.after.length === 0) {\n expandedMiddlewareList.push(entry);\n }\n else {\n expandedMiddlewareList.push(...expandRelativeMiddlewareList(entry));\n }\n });\n return expandedMiddlewareList;\n };\n const getMiddlewareList = (debug = false) => {\n const normalizedAbsoluteEntries = [];\n const normalizedRelativeEntries = [];\n const normalizedEntriesNameMap = {};\n absoluteEntries.forEach((entry) => {\n const normalizedEntry = {\n ...entry,\n before: [],\n after: [],\n };\n for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n normalizedEntriesNameMap[alias] = normalizedEntry;\n }\n normalizedAbsoluteEntries.push(normalizedEntry);\n });\n relativeEntries.forEach((entry) => {\n const normalizedEntry = {\n ...entry,\n before: [],\n after: [],\n };\n for (const alias of getAllAliases(normalizedEntry.name, normalizedEntry.aliases)) {\n normalizedEntriesNameMap[alias] = normalizedEntry;\n }\n normalizedRelativeEntries.push(normalizedEntry);\n });\n normalizedRelativeEntries.forEach((entry) => {\n if (entry.toMiddleware) {\n const toMiddleware = normalizedEntriesNameMap[entry.toMiddleware];\n if (toMiddleware === undefined) {\n if (debug) {\n return;\n }\n throw new Error(`${entry.toMiddleware} is not found when adding ` +\n `${getMiddlewareNameWithAliases(entry.name, entry.aliases)} ` +\n `middleware ${entry.relation} ${entry.toMiddleware}`);\n }\n if (entry.relation === \"after\") {\n toMiddleware.after.push(entry);\n }\n if (entry.relation === \"before\") {\n toMiddleware.before.push(entry);\n }\n }\n });\n const mainChain = sort(normalizedAbsoluteEntries)\n .map(expandRelativeMiddlewareList)\n .reduce((wholeList, expandedMiddlewareList) => {\n wholeList.push(...expandedMiddlewareList);\n return wholeList;\n }, []);\n return mainChain;\n };\n const stack = {\n add: (middleware, options = {}) => {\n const { name, override, aliases: _aliases } = options;\n const entry = {\n step: \"initialize\",\n priority: \"normal\",\n middleware,\n ...options,\n };\n const aliases = getAllAliases(name, _aliases);\n if (aliases.length > 0) {\n if (aliases.some((alias) => entriesNameSet.has(alias))) {\n if (!override)\n throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n for (const alias of aliases) {\n const toOverrideIndex = absoluteEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n if (toOverrideIndex === -1) {\n continue;\n }\n const toOverride = absoluteEntries[toOverrideIndex];\n if (toOverride.step !== entry.step || entry.priority !== toOverride.priority) {\n throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware with ` +\n `${toOverride.priority} priority in ${toOverride.step} step cannot ` +\n `be overridden by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware with ` +\n `${entry.priority} priority in ${entry.step} step.`);\n }\n absoluteEntries.splice(toOverrideIndex, 1);\n }\n }\n for (const alias of aliases) {\n entriesNameSet.add(alias);\n }\n }\n absoluteEntries.push(entry);\n },\n addRelativeTo: (middleware, options) => {\n const { name, override, aliases: _aliases } = options;\n const entry = {\n middleware,\n ...options,\n };\n const aliases = getAllAliases(name, _aliases);\n if (aliases.length > 0) {\n if (aliases.some((alias) => entriesNameSet.has(alias))) {\n if (!override)\n throw new Error(`Duplicate middleware name '${getMiddlewareNameWithAliases(name, _aliases)}'`);\n for (const alias of aliases) {\n const toOverrideIndex = relativeEntries.findIndex((entry) => entry.name === alias || entry.aliases?.some((a) => a === alias));\n if (toOverrideIndex === -1) {\n continue;\n }\n const toOverride = relativeEntries[toOverrideIndex];\n if (toOverride.toMiddleware !== entry.toMiddleware || toOverride.relation !== entry.relation) {\n throw new Error(`\"${getMiddlewareNameWithAliases(toOverride.name, toOverride.aliases)}\" middleware ` +\n `${toOverride.relation} \"${toOverride.toMiddleware}\" middleware cannot be overridden ` +\n `by \"${getMiddlewareNameWithAliases(name, _aliases)}\" middleware ${entry.relation} ` +\n `\"${entry.toMiddleware}\" middleware.`);\n }\n relativeEntries.splice(toOverrideIndex, 1);\n }\n }\n for (const alias of aliases) {\n entriesNameSet.add(alias);\n }\n }\n relativeEntries.push(entry);\n },\n clone: () => cloneTo(constructStack()),\n use: (plugin) => {\n plugin.applyToStack(stack);\n },\n remove: (toRemove) => {\n if (typeof toRemove === \"string\")\n return removeByName(toRemove);\n else\n return removeByReference(toRemove);\n },\n removeByTag: (toRemove) => {\n let isRemoved = false;\n const filterCb = (entry) => {\n const { tags, name, aliases: _aliases } = entry;\n if (tags && tags.includes(toRemove)) {\n const aliases = getAllAliases(name, _aliases);\n for (const alias of aliases) {\n entriesNameSet.delete(alias);\n }\n isRemoved = true;\n return false;\n }\n return true;\n };\n absoluteEntries = absoluteEntries.filter(filterCb);\n relativeEntries = relativeEntries.filter(filterCb);\n return isRemoved;\n },\n concat: (from) => {\n const cloned = cloneTo(constructStack());\n cloned.use(from);\n cloned.identifyOnResolve(identifyOnResolve || cloned.identifyOnResolve() || (from.identifyOnResolve?.() ?? false));\n return cloned;\n },\n applyToStack: cloneTo,\n identify: () => {\n return getMiddlewareList(true).map((mw) => {\n const step = mw.step ??\n mw.relation +\n \" \" +\n mw.toMiddleware;\n return getMiddlewareNameWithAliases(mw.name, mw.aliases) + \" - \" + step;\n });\n },\n identifyOnResolve(toggle) {\n if (typeof toggle === \"boolean\")\n identifyOnResolve = toggle;\n return identifyOnResolve;\n },\n resolve: (handler, context) => {\n for (const middleware of getMiddlewareList()\n .map((entry) => entry.middleware)\n .reverse()) {\n handler = middleware(handler, context);\n }\n if (identifyOnResolve) {\n console.log(stack.identify());\n }\n return handler;\n },\n };\n return stack;\n};\nconst stepWeights = {\n initialize: 5,\n serialize: 4,\n build: 3,\n finalizeRequest: 2,\n deserialize: 1,\n};\nconst priorityWeights = {\n high: 3,\n normal: 2,\n low: 1,\n};\n","import { constructStack } from \"@smithy/middleware-stack\";\nexport class Client {\n constructor(config) {\n this.middlewareStack = constructStack();\n this.config = config;\n }\n send(command, optionsOrCb, cb) {\n const options = typeof optionsOrCb !== \"function\" ? optionsOrCb : undefined;\n const callback = typeof optionsOrCb === \"function\" ? optionsOrCb : cb;\n const handler = command.resolveMiddleware(this.middlewareStack, this.config, options);\n if (callback) {\n handler(command)\n .then((result) => callback(null, result.output), (err) => callback(err))\n .catch(() => { });\n }\n else {\n return handler(command).then((result) => result.output);\n }\n }\n destroy() {\n if (this.config.requestHandler.destroy)\n this.config.requestHandler.destroy();\n }\n}\n","const alphabetByEncoding = {};\nconst alphabetByValue = new Array(64);\nfor (let i = 0, start = \"A\".charCodeAt(0), limit = \"Z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n alphabetByEncoding[char] = i;\n alphabetByValue[i] = char;\n}\nfor (let i = 0, start = \"a\".charCodeAt(0), limit = \"z\".charCodeAt(0); i + start <= limit; i++) {\n const char = String.fromCharCode(i + start);\n const index = i + 26;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nfor (let i = 0; i < 10; i++) {\n alphabetByEncoding[i.toString(10)] = i + 52;\n const char = i.toString(10);\n const index = i + 52;\n alphabetByEncoding[char] = index;\n alphabetByValue[index] = char;\n}\nalphabetByEncoding[\"+\"] = 62;\nalphabetByValue[62] = \"+\";\nalphabetByEncoding[\"/\"] = 63;\nalphabetByValue[63] = \"/\";\nconst bitsPerLetter = 6;\nconst bitsPerByte = 8;\nconst maxLetterValue = 0b111111;\nexport { alphabetByEncoding, alphabetByValue, bitsPerLetter, bitsPerByte, maxLetterValue };\n","import { alphabetByEncoding, bitsPerByte, bitsPerLetter } from \"./constants.browser\";\nexport const fromBase64 = (input) => {\n let totalByteLength = (input.length / 4) * 3;\n if (input.slice(-2) === \"==\") {\n totalByteLength -= 2;\n }\n else if (input.slice(-1) === \"=\") {\n totalByteLength--;\n }\n const out = new ArrayBuffer(totalByteLength);\n const dataView = new DataView(out);\n for (let i = 0; i < input.length; i += 4) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = i + 3; j <= limit; j++) {\n if (input[j] !== \"=\") {\n if (!(input[j] in alphabetByEncoding)) {\n throw new TypeError(`Invalid character ${input[j]} in base64 string.`);\n }\n bits |= alphabetByEncoding[input[j]] << ((limit - j) * bitsPerLetter);\n bitLength += bitsPerLetter;\n }\n else {\n bits >>= bitsPerLetter;\n }\n }\n const chunkOffset = (i / 4) * 3;\n bits >>= bitLength % bitsPerByte;\n const byteLength = Math.floor(bitLength / bitsPerByte);\n for (let k = 0; k < byteLength; k++) {\n const offset = (byteLength - k - 1) * bitsPerByte;\n dataView.setUint8(chunkOffset + k, (bits & (255 << offset)) >> offset);\n }\n }\n return new Uint8Array(out);\n};\n","import { alphabetByValue, bitsPerByte, bitsPerLetter, maxLetterValue } from \"./constants.browser\";\nexport function toBase64(input) {\n let str = \"\";\n for (let i = 0; i < input.length; i += 3) {\n let bits = 0;\n let bitLength = 0;\n for (let j = i, limit = Math.min(i + 3, input.length); j < limit; j++) {\n bits |= input[j] << ((limit - j - 1) * bitsPerByte);\n bitLength += bitsPerByte;\n }\n const bitClusterCount = Math.ceil(bitLength / bitsPerLetter);\n bits <<= bitClusterCount * bitsPerLetter - bitLength;\n for (let k = 1; k <= bitClusterCount; k++) {\n const offset = (bitClusterCount - k) * bitsPerLetter;\n str += alphabetByValue[(bits & (maxLetterValue << offset)) >> offset];\n }\n str += \"==\".slice(0, 4 - bitClusterCount);\n }\n return str;\n}\n","import { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { Uint8ArrayBlobAdapter } from \"./Uint8ArrayBlobAdapter\";\nexport function transformToString(payload, encoding = \"utf-8\") {\n if (encoding === \"base64\") {\n return toBase64(payload);\n }\n return toUtf8(payload);\n}\nexport function transformFromString(str, encoding) {\n if (encoding === \"base64\") {\n return Uint8ArrayBlobAdapter.mutate(fromBase64(str));\n }\n return Uint8ArrayBlobAdapter.mutate(fromUtf8(str));\n}\n","import { transformFromString, transformToString } from \"./transforms\";\nexport class Uint8ArrayBlobAdapter extends Uint8Array {\n static fromString(source, encoding = \"utf-8\") {\n switch (typeof source) {\n case \"string\":\n return transformFromString(source, encoding);\n default:\n throw new Error(`Unsupported conversion from ${typeof source} to Uint8ArrayBlobAdapter.`);\n }\n }\n static mutate(source) {\n Object.setPrototypeOf(source, Uint8ArrayBlobAdapter.prototype);\n return source;\n }\n transformToString(encoding = \"utf-8\") {\n return transformToString(this, encoding);\n }\n}\n","import { escapeUri } from \"@smithy/util-uri-escape\";\nexport function buildQueryString(query) {\n const parts = [];\n for (let key of Object.keys(query).sort()) {\n const value = query[key];\n key = escapeUri(key);\n if (Array.isArray(value)) {\n for (let i = 0, iLen = value.length; i < iLen; i++) {\n parts.push(`${key}=${escapeUri(value[i])}`);\n }\n }\n else {\n let qsEntry = key;\n if (value || typeof value === \"string\") {\n qsEntry += `=${escapeUri(value)}`;\n }\n parts.push(qsEntry);\n }\n }\n return parts.join(\"&\");\n}\n","export function requestTimeout(timeoutInMs = 0) {\n return new Promise((resolve, reject) => {\n if (timeoutInMs) {\n setTimeout(() => {\n const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);\n timeoutError.name = \"TimeoutError\";\n reject(timeoutError);\n }, timeoutInMs);\n }\n });\n}\n","import { HttpResponse } from \"@smithy/protocol-http\";\nimport { buildQueryString } from \"@smithy/querystring-builder\";\nimport { requestTimeout } from \"./request-timeout\";\nexport const keepAliveSupport = {\n supported: Boolean(typeof Request !== \"undefined\" && \"keepalive\" in new Request(\"https://[::1]\")),\n};\nexport class FetchHttpHandler {\n static create(instanceOrOptions) {\n if (typeof instanceOrOptions?.handle === \"function\") {\n return instanceOrOptions;\n }\n return new FetchHttpHandler(instanceOrOptions);\n }\n constructor(options) {\n if (typeof options === \"function\") {\n this.configProvider = options().then((opts) => opts || {});\n }\n else {\n this.config = options ?? {};\n this.configProvider = Promise.resolve(this.config);\n }\n }\n destroy() {\n }\n async handle(request, { abortSignal } = {}) {\n if (!this.config) {\n this.config = await this.configProvider;\n }\n const requestTimeoutInMs = this.config.requestTimeout;\n const keepAlive = this.config.keepAlive === true;\n if (abortSignal?.aborted) {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n return Promise.reject(abortError);\n }\n let path = request.path;\n const queryString = buildQueryString(request.query || {});\n if (queryString) {\n path += `?${queryString}`;\n }\n if (request.fragment) {\n path += `#${request.fragment}`;\n }\n let auth = \"\";\n if (request.username != null || request.password != null) {\n const username = request.username ?? \"\";\n const password = request.password ?? \"\";\n auth = `${username}:${password}@`;\n }\n const { port, method } = request;\n const url = `${request.protocol}//${auth}${request.hostname}${port ? `:${port}` : \"\"}${path}`;\n const body = method === \"GET\" || method === \"HEAD\" ? undefined : request.body;\n const requestOptions = { body, headers: new Headers(request.headers), method: method };\n if (typeof AbortController !== \"undefined\") {\n requestOptions[\"signal\"] = abortSignal;\n }\n if (keepAliveSupport.supported) {\n requestOptions[\"keepalive\"] = keepAlive;\n }\n const fetchRequest = new Request(url, requestOptions);\n const raceOfPromises = [\n fetch(fetchRequest).then((response) => {\n const fetchHeaders = response.headers;\n const transformedHeaders = {};\n for (const pair of fetchHeaders.entries()) {\n transformedHeaders[pair[0]] = pair[1];\n }\n const hasReadableStream = response.body != undefined;\n if (!hasReadableStream) {\n return response.blob().then((body) => ({\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body,\n }),\n }));\n }\n return {\n response: new HttpResponse({\n headers: transformedHeaders,\n reason: response.statusText,\n statusCode: response.status,\n body: response.body,\n }),\n };\n }),\n requestTimeout(requestTimeoutInMs),\n ];\n if (abortSignal) {\n raceOfPromises.push(new Promise((resolve, reject) => {\n abortSignal.onabort = () => {\n const abortError = new Error(\"Request aborted\");\n abortError.name = \"AbortError\";\n reject(abortError);\n };\n }));\n }\n return Promise.race(raceOfPromises);\n }\n updateHttpClientConfig(key, value) {\n this.config = undefined;\n this.configProvider = this.configProvider.then((config) => {\n config[key] = value;\n return config;\n });\n }\n httpHandlerConfigs() {\n return this.config ?? {};\n }\n}\n","import { fromBase64 } from \"@smithy/util-base64\";\nexport const streamCollector = (stream) => {\n if (typeof Blob === \"function\" && stream instanceof Blob) {\n return collectBlob(stream);\n }\n return collectStream(stream);\n};\nasync function collectBlob(blob) {\n const base64 = await readToBase64(blob);\n const arrayBuffer = fromBase64(base64);\n return new Uint8Array(arrayBuffer);\n}\nasync function collectStream(stream) {\n let res = new Uint8Array(0);\n const reader = stream.getReader();\n let isDone = false;\n while (!isDone) {\n const { done, value } = await reader.read();\n if (value) {\n const prior = res;\n res = new Uint8Array(prior.length + value.length);\n res.set(prior);\n res.set(value, prior.length);\n }\n isDone = done;\n }\n return res;\n}\nfunction readToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (reader.readyState !== 2) {\n return reject(new Error(\"Reader aborted too early\"));\n }\n const result = (reader.result ?? \"\");\n const commaIndex = result.indexOf(\",\");\n const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;\n resolve(result.substring(dataOffset));\n };\n reader.onabort = () => reject(new Error(\"Read aborted\"));\n reader.onerror = () => reject(reader.error);\n reader.readAsDataURL(blob);\n });\n}\n","import { Uint8ArrayBlobAdapter } from \"@smithy/util-stream\";\nexport const collectBody = async (streamBody = new Uint8Array(), context) => {\n if (streamBody instanceof Uint8Array) {\n return Uint8ArrayBlobAdapter.mutate(streamBody);\n }\n if (!streamBody) {\n return Uint8ArrayBlobAdapter.mutate(new Uint8Array());\n }\n const fromContext = context.streamCollector(streamBody);\n return Uint8ArrayBlobAdapter.mutate(await fromContext);\n};\n","import { constructStack } from \"@smithy/middleware-stack\";\nimport { SMITHY_CONTEXT_KEY } from \"@smithy/types\";\nexport class Command {\n constructor() {\n this.middlewareStack = constructStack();\n }\n static classBuilder() {\n return new ClassBuilder();\n }\n resolveMiddlewareWithContext(clientStack, configuration, options, { middlewareFn, clientName, commandName, inputFilterSensitiveLog, outputFilterSensitiveLog, smithyContext, additionalContext, CommandCtor, }) {\n for (const mw of middlewareFn.bind(this)(CommandCtor, clientStack, configuration, options)) {\n this.middlewareStack.use(mw);\n }\n const stack = clientStack.concat(this.middlewareStack);\n const { logger } = configuration;\n const handlerExecutionContext = {\n logger,\n clientName,\n commandName,\n inputFilterSensitiveLog,\n outputFilterSensitiveLog,\n [SMITHY_CONTEXT_KEY]: {\n ...smithyContext,\n },\n ...additionalContext,\n };\n const { requestHandler } = configuration;\n return stack.resolve((request) => requestHandler.handle(request.request, options || {}), handlerExecutionContext);\n }\n}\nclass ClassBuilder {\n constructor() {\n this._init = () => { };\n this._ep = {};\n this._middlewareFn = () => [];\n this._commandName = \"\";\n this._clientName = \"\";\n this._additionalContext = {};\n this._smithyContext = {};\n this._inputFilterSensitiveLog = (_) => _;\n this._outputFilterSensitiveLog = (_) => _;\n this._serializer = null;\n this._deserializer = null;\n }\n init(cb) {\n this._init = cb;\n }\n ep(endpointParameterInstructions) {\n this._ep = endpointParameterInstructions;\n return this;\n }\n m(middlewareSupplier) {\n this._middlewareFn = middlewareSupplier;\n return this;\n }\n s(service, operation, smithyContext = {}) {\n this._smithyContext = {\n service,\n operation,\n ...smithyContext,\n };\n return this;\n }\n c(additionalContext = {}) {\n this._additionalContext = additionalContext;\n return this;\n }\n n(clientName, commandName) {\n this._clientName = clientName;\n this._commandName = commandName;\n return this;\n }\n f(inputFilter = (_) => _, outputFilter = (_) => _) {\n this._inputFilterSensitiveLog = inputFilter;\n this._outputFilterSensitiveLog = outputFilter;\n return this;\n }\n ser(serializer) {\n this._serializer = serializer;\n return this;\n }\n de(deserializer) {\n this._deserializer = deserializer;\n return this;\n }\n build() {\n const closure = this;\n let CommandRef;\n return (CommandRef = class extends Command {\n static getEndpointParameterInstructions() {\n return closure._ep;\n }\n constructor(input) {\n super();\n this.input = input;\n this.serialize = closure._serializer;\n this.deserialize = closure._deserializer;\n closure._init(this);\n }\n resolveMiddleware(stack, configuration, options) {\n return this.resolveMiddlewareWithContext(stack, configuration, options, {\n CommandCtor: CommandRef,\n middlewareFn: closure._middlewareFn,\n clientName: closure._clientName,\n commandName: closure._commandName,\n inputFilterSensitiveLog: closure._inputFilterSensitiveLog,\n outputFilterSensitiveLog: closure._outputFilterSensitiveLog,\n smithyContext: closure._smithyContext,\n additionalContext: closure._additionalContext,\n });\n }\n });\n }\n}\n","export const SENSITIVE_STRING = \"***SensitiveInformation***\";\n","export const createAggregatedClient = (commands, Client) => {\n for (const command of Object.keys(commands)) {\n const CommandCtor = commands[command];\n const methodImpl = async function (args, optionsOrCb, cb) {\n const command = new CommandCtor(args);\n if (typeof optionsOrCb === \"function\") {\n this.send(command, optionsOrCb);\n }\n else if (typeof cb === \"function\") {\n if (typeof optionsOrCb !== \"object\")\n throw new Error(`Expected http options but got ${typeof optionsOrCb}`);\n this.send(command, optionsOrCb || {}, cb);\n }\n else {\n return this.send(command, optionsOrCb);\n }\n };\n const methodName = (command[0].toLowerCase() + command.slice(1)).replace(/Command$/, \"\");\n Client.prototype[methodName] = methodImpl;\n }\n};\n","export const parseBoolean = (value) => {\n switch (value) {\n case \"true\":\n return true;\n case \"false\":\n return false;\n default:\n throw new Error(`Unable to parse boolean value \"${value}\"`);\n }\n};\nexport const expectBoolean = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"number\") {\n if (value === 0 || value === 1) {\n logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n }\n if (value === 0) {\n return false;\n }\n if (value === 1) {\n return true;\n }\n }\n if (typeof value === \"string\") {\n const lower = value.toLowerCase();\n if (lower === \"false\" || lower === \"true\") {\n logger.warn(stackTraceWarning(`Expected boolean, got ${typeof value}: ${value}`));\n }\n if (lower === \"false\") {\n return false;\n }\n if (lower === \"true\") {\n return true;\n }\n }\n if (typeof value === \"boolean\") {\n return value;\n }\n throw new TypeError(`Expected boolean, got ${typeof value}: ${value}`);\n};\nexport const expectNumber = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n const parsed = parseFloat(value);\n if (!Number.isNaN(parsed)) {\n if (String(parsed) !== String(value)) {\n logger.warn(stackTraceWarning(`Expected number but observed string: ${value}`));\n }\n return parsed;\n }\n }\n if (typeof value === \"number\") {\n return value;\n }\n throw new TypeError(`Expected number, got ${typeof value}: ${value}`);\n};\nconst MAX_FLOAT = Math.ceil(2 ** 127 * (2 - 2 ** -23));\nexport const expectFloat32 = (value) => {\n const expected = expectNumber(value);\n if (expected !== undefined && !Number.isNaN(expected) && expected !== Infinity && expected !== -Infinity) {\n if (Math.abs(expected) > MAX_FLOAT) {\n throw new TypeError(`Expected 32-bit float, got ${value}`);\n }\n }\n return expected;\n};\nexport const expectLong = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Number.isInteger(value) && !Number.isNaN(value)) {\n return value;\n }\n throw new TypeError(`Expected integer, got ${typeof value}: ${value}`);\n};\nexport const expectInt = expectLong;\nexport const expectInt32 = (value) => expectSizedInt(value, 32);\nexport const expectShort = (value) => expectSizedInt(value, 16);\nexport const expectByte = (value) => expectSizedInt(value, 8);\nconst expectSizedInt = (value, size) => {\n const expected = expectLong(value);\n if (expected !== undefined && castInt(expected, size) !== expected) {\n throw new TypeError(`Expected ${size}-bit integer, got ${value}`);\n }\n return expected;\n};\nconst castInt = (value, size) => {\n switch (size) {\n case 32:\n return Int32Array.of(value)[0];\n case 16:\n return Int16Array.of(value)[0];\n case 8:\n return Int8Array.of(value)[0];\n }\n};\nexport const expectNonNull = (value, location) => {\n if (value === null || value === undefined) {\n if (location) {\n throw new TypeError(`Expected a non-null value for ${location}`);\n }\n throw new TypeError(\"Expected a non-null value\");\n }\n return value;\n};\nexport const expectObject = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"object\" && !Array.isArray(value)) {\n return value;\n }\n const receivedType = Array.isArray(value) ? \"array\" : typeof value;\n throw new TypeError(`Expected object, got ${receivedType}: ${value}`);\n};\nexport const expectString = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return value;\n }\n if ([\"boolean\", \"number\", \"bigint\"].includes(typeof value)) {\n logger.warn(stackTraceWarning(`Expected string, got ${typeof value}: ${value}`));\n return String(value);\n }\n throw new TypeError(`Expected string, got ${typeof value}: ${value}`);\n};\nexport const expectUnion = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n const asObject = expectObject(value);\n const setKeys = Object.entries(asObject)\n .filter(([, v]) => v != null)\n .map(([k]) => k);\n if (setKeys.length === 0) {\n throw new TypeError(`Unions must have exactly one non-null member. None were found.`);\n }\n if (setKeys.length > 1) {\n throw new TypeError(`Unions must have exactly one non-null member. Keys ${setKeys} were not null.`);\n }\n return asObject;\n};\nexport const strictParseDouble = (value) => {\n if (typeof value == \"string\") {\n return expectNumber(parseNumber(value));\n }\n return expectNumber(value);\n};\nexport const strictParseFloat = strictParseDouble;\nexport const strictParseFloat32 = (value) => {\n if (typeof value == \"string\") {\n return expectFloat32(parseNumber(value));\n }\n return expectFloat32(value);\n};\nconst NUMBER_REGEX = /(-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(-?Infinity)|(NaN)/g;\nconst parseNumber = (value) => {\n const matches = value.match(NUMBER_REGEX);\n if (matches === null || matches[0].length !== value.length) {\n throw new TypeError(`Expected real number, got implicit NaN`);\n }\n return parseFloat(value);\n};\nexport const limitedParseDouble = (value) => {\n if (typeof value == \"string\") {\n return parseFloatString(value);\n }\n return expectNumber(value);\n};\nexport const handleFloat = limitedParseDouble;\nexport const limitedParseFloat = limitedParseDouble;\nexport const limitedParseFloat32 = (value) => {\n if (typeof value == \"string\") {\n return parseFloatString(value);\n }\n return expectFloat32(value);\n};\nconst parseFloatString = (value) => {\n switch (value) {\n case \"NaN\":\n return NaN;\n case \"Infinity\":\n return Infinity;\n case \"-Infinity\":\n return -Infinity;\n default:\n throw new Error(`Unable to parse float value: ${value}`);\n }\n};\nexport const strictParseLong = (value) => {\n if (typeof value === \"string\") {\n return expectLong(parseNumber(value));\n }\n return expectLong(value);\n};\nexport const strictParseInt = strictParseLong;\nexport const strictParseInt32 = (value) => {\n if (typeof value === \"string\") {\n return expectInt32(parseNumber(value));\n }\n return expectInt32(value);\n};\nexport const strictParseShort = (value) => {\n if (typeof value === \"string\") {\n return expectShort(parseNumber(value));\n }\n return expectShort(value);\n};\nexport const strictParseByte = (value) => {\n if (typeof value === \"string\") {\n return expectByte(parseNumber(value));\n }\n return expectByte(value);\n};\nconst stackTraceWarning = (message) => {\n return String(new TypeError(message).stack || message)\n .split(\"\\n\")\n .slice(0, 5)\n .filter((s) => !s.includes(\"stackTraceWarning\"))\n .join(\"\\n\");\n};\nexport const logger = {\n warn: console.warn,\n};\n","import { strictParseByte, strictParseDouble, strictParseFloat32, strictParseShort } from \"./parse-utils\";\nconst DAYS = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst MONTHS = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\nexport function dateToUtcString(date) {\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const dayOfWeek = date.getUTCDay();\n const dayOfMonthInt = date.getUTCDate();\n const hoursInt = date.getUTCHours();\n const minutesInt = date.getUTCMinutes();\n const secondsInt = date.getUTCSeconds();\n const dayOfMonthString = dayOfMonthInt < 10 ? `0${dayOfMonthInt}` : `${dayOfMonthInt}`;\n const hoursString = hoursInt < 10 ? `0${hoursInt}` : `${hoursInt}`;\n const minutesString = minutesInt < 10 ? `0${minutesInt}` : `${minutesInt}`;\n const secondsString = secondsInt < 10 ? `0${secondsInt}` : `${secondsInt}`;\n return `${DAYS[dayOfWeek]}, ${dayOfMonthString} ${MONTHS[month]} ${year} ${hoursString}:${minutesString}:${secondsString} GMT`;\n}\nconst RFC3339 = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?[zZ]$/);\nexport const parseRfc3339DateTime = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n }\n const match = RFC3339.exec(value);\n if (!match) {\n throw new TypeError(\"Invalid RFC-3339 date-time value\");\n }\n const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n const year = strictParseShort(stripLeadingZeroes(yearStr));\n const month = parseDateValue(monthStr, \"month\", 1, 12);\n const day = parseDateValue(dayStr, \"day\", 1, 31);\n return buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n};\nconst RFC3339_WITH_OFFSET = new RegExp(/^(\\d{4})-(\\d{2})-(\\d{2})[tT](\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))?(([-+]\\d{2}\\:\\d{2})|[zZ])$/);\nexport const parseRfc3339DateTimeWithOffset = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new TypeError(\"RFC-3339 date-times must be expressed as strings\");\n }\n const match = RFC3339_WITH_OFFSET.exec(value);\n if (!match) {\n throw new TypeError(\"Invalid RFC-3339 date-time value\");\n }\n const [_, yearStr, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, offsetStr] = match;\n const year = strictParseShort(stripLeadingZeroes(yearStr));\n const month = parseDateValue(monthStr, \"month\", 1, 12);\n const day = parseDateValue(dayStr, \"day\", 1, 31);\n const date = buildDate(year, month, day, { hours, minutes, seconds, fractionalMilliseconds });\n if (offsetStr.toUpperCase() != \"Z\") {\n date.setTime(date.getTime() - parseOffsetToMilliseconds(offsetStr));\n }\n return date;\n};\nconst IMF_FIXDATE = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d{2}) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst RFC_850_DATE = new RegExp(/^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d{2})-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? GMT$/);\nconst ASC_TIME = new RegExp(/^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( [1-9]|\\d{2}) (\\d{1,2}):(\\d{2}):(\\d{2})(?:\\.(\\d+))? (\\d{4})$/);\nexport const parseRfc7231DateTime = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (typeof value !== \"string\") {\n throw new TypeError(\"RFC-7231 date-times must be expressed as strings\");\n }\n let match = IMF_FIXDATE.exec(value);\n if (match) {\n const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n }\n match = RFC_850_DATE.exec(value);\n if (match) {\n const [_, dayStr, monthStr, yearStr, hours, minutes, seconds, fractionalMilliseconds] = match;\n return adjustRfc850Year(buildDate(parseTwoDigitYear(yearStr), parseMonthByShortName(monthStr), parseDateValue(dayStr, \"day\", 1, 31), {\n hours,\n minutes,\n seconds,\n fractionalMilliseconds,\n }));\n }\n match = ASC_TIME.exec(value);\n if (match) {\n const [_, monthStr, dayStr, hours, minutes, seconds, fractionalMilliseconds, yearStr] = match;\n return buildDate(strictParseShort(stripLeadingZeroes(yearStr)), parseMonthByShortName(monthStr), parseDateValue(dayStr.trimLeft(), \"day\", 1, 31), { hours, minutes, seconds, fractionalMilliseconds });\n }\n throw new TypeError(\"Invalid RFC-7231 date-time value\");\n};\nexport const parseEpochTimestamp = (value) => {\n if (value === null || value === undefined) {\n return undefined;\n }\n let valueAsDouble;\n if (typeof value === \"number\") {\n valueAsDouble = value;\n }\n else if (typeof value === \"string\") {\n valueAsDouble = strictParseDouble(value);\n }\n else {\n throw new TypeError(\"Epoch timestamps must be expressed as floating point numbers or their string representation\");\n }\n if (Number.isNaN(valueAsDouble) || valueAsDouble === Infinity || valueAsDouble === -Infinity) {\n throw new TypeError(\"Epoch timestamps must be valid, non-Infinite, non-NaN numerics\");\n }\n return new Date(Math.round(valueAsDouble * 1000));\n};\nconst buildDate = (year, month, day, time) => {\n const adjustedMonth = month - 1;\n validateDayOfMonth(year, adjustedMonth, day);\n return new Date(Date.UTC(year, adjustedMonth, day, parseDateValue(time.hours, \"hour\", 0, 23), parseDateValue(time.minutes, \"minute\", 0, 59), parseDateValue(time.seconds, \"seconds\", 0, 60), parseMilliseconds(time.fractionalMilliseconds)));\n};\nconst parseTwoDigitYear = (value) => {\n const thisYear = new Date().getUTCFullYear();\n const valueInThisCentury = Math.floor(thisYear / 100) * 100 + strictParseShort(stripLeadingZeroes(value));\n if (valueInThisCentury < thisYear) {\n return valueInThisCentury + 100;\n }\n return valueInThisCentury;\n};\nconst FIFTY_YEARS_IN_MILLIS = 50 * 365 * 24 * 60 * 60 * 1000;\nconst adjustRfc850Year = (input) => {\n if (input.getTime() - new Date().getTime() > FIFTY_YEARS_IN_MILLIS) {\n return new Date(Date.UTC(input.getUTCFullYear() - 100, input.getUTCMonth(), input.getUTCDate(), input.getUTCHours(), input.getUTCMinutes(), input.getUTCSeconds(), input.getUTCMilliseconds()));\n }\n return input;\n};\nconst parseMonthByShortName = (value) => {\n const monthIdx = MONTHS.indexOf(value);\n if (monthIdx < 0) {\n throw new TypeError(`Invalid month: ${value}`);\n }\n return monthIdx + 1;\n};\nconst DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nconst validateDayOfMonth = (year, month, day) => {\n let maxDays = DAYS_IN_MONTH[month];\n if (month === 1 && isLeapYear(year)) {\n maxDays = 29;\n }\n if (day > maxDays) {\n throw new TypeError(`Invalid day for ${MONTHS[month]} in ${year}: ${day}`);\n }\n};\nconst isLeapYear = (year) => {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n};\nconst parseDateValue = (value, type, lower, upper) => {\n const dateVal = strictParseByte(stripLeadingZeroes(value));\n if (dateVal < lower || dateVal > upper) {\n throw new TypeError(`${type} must be between ${lower} and ${upper}, inclusive`);\n }\n return dateVal;\n};\nconst parseMilliseconds = (value) => {\n if (value === null || value === undefined) {\n return 0;\n }\n return strictParseFloat32(\"0.\" + value) * 1000;\n};\nconst parseOffsetToMilliseconds = (value) => {\n const directionStr = value[0];\n let direction = 1;\n if (directionStr == \"+\") {\n direction = 1;\n }\n else if (directionStr == \"-\") {\n direction = -1;\n }\n else {\n throw new TypeError(`Offset direction, ${directionStr}, must be \"+\" or \"-\"`);\n }\n const hour = Number(value.substring(1, 3));\n const minute = Number(value.substring(4, 6));\n return direction * (hour * 60 + minute) * 60 * 1000;\n};\nconst stripLeadingZeroes = (value) => {\n let idx = 0;\n while (idx < value.length - 1 && value.charAt(idx) === \"0\") {\n idx++;\n }\n if (idx === 0) {\n return value;\n }\n return value.slice(idx);\n};\n","export class ServiceException extends Error {\n constructor(options) {\n super(options.message);\n Object.setPrototypeOf(this, ServiceException.prototype);\n this.name = options.name;\n this.$fault = options.$fault;\n this.$metadata = options.$metadata;\n }\n}\nexport const decorateServiceException = (exception, additions = {}) => {\n Object.entries(additions)\n .filter(([, v]) => v !== undefined)\n .forEach(([k, v]) => {\n if (exception[k] == undefined || exception[k] === \"\") {\n exception[k] = v;\n }\n });\n const message = exception.message || exception.Message || \"UnknownError\";\n exception.message = message;\n delete exception.Message;\n return exception;\n};\n","import { decorateServiceException } from \"./exceptions\";\nexport const throwDefaultError = ({ output, parsedBody, exceptionCtor, errorCode }) => {\n const $metadata = deserializeMetadata(output);\n const statusCode = $metadata.httpStatusCode ? $metadata.httpStatusCode + \"\" : undefined;\n const response = new exceptionCtor({\n name: parsedBody?.code || parsedBody?.Code || errorCode || statusCode || \"UnknownError\",\n $fault: \"client\",\n $metadata,\n });\n throw decorateServiceException(response, parsedBody);\n};\nexport const withBaseException = (ExceptionCtor) => {\n return ({ output, parsedBody, errorCode }) => {\n throwDefaultError({ output, parsedBody, exceptionCtor: ExceptionCtor, errorCode });\n };\n};\nconst deserializeMetadata = (output) => ({\n httpStatusCode: output.statusCode,\n requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n extendedRequestId: output.headers[\"x-amz-id-2\"],\n cfId: output.headers[\"x-amz-cf-id\"],\n});\n","export const loadConfigsForDefaultMode = (mode) => {\n switch (mode) {\n case \"standard\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 3100,\n };\n case \"in-region\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 1100,\n };\n case \"cross-region\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 3100,\n };\n case \"mobile\":\n return {\n retryMode: \"standard\",\n connectionTimeout: 30000,\n };\n default:\n return {};\n }\n};\n","import { AlgorithmId } from \"@smithy/types\";\nexport { AlgorithmId };\nexport const getChecksumConfiguration = (runtimeConfig) => {\n const checksumAlgorithms = [];\n for (const id in AlgorithmId) {\n const algorithmId = AlgorithmId[id];\n if (runtimeConfig[algorithmId] === undefined) {\n continue;\n }\n checksumAlgorithms.push({\n algorithmId: () => algorithmId,\n checksumConstructor: () => runtimeConfig[algorithmId],\n });\n }\n return {\n _checksumAlgorithms: checksumAlgorithms,\n addChecksumAlgorithm(algo) {\n this._checksumAlgorithms.push(algo);\n },\n checksumAlgorithms() {\n return this._checksumAlgorithms;\n },\n };\n};\nexport const resolveChecksumRuntimeConfig = (clientConfig) => {\n const runtimeConfig = {};\n clientConfig.checksumAlgorithms().forEach((checksumAlgorithm) => {\n runtimeConfig[checksumAlgorithm.algorithmId()] = checksumAlgorithm.checksumConstructor();\n });\n return runtimeConfig;\n};\n","export const getRetryConfiguration = (runtimeConfig) => {\n let _retryStrategy = runtimeConfig.retryStrategy;\n return {\n setRetryStrategy(retryStrategy) {\n _retryStrategy = retryStrategy;\n },\n retryStrategy() {\n return _retryStrategy;\n },\n };\n};\nexport const resolveRetryRuntimeConfig = (retryStrategyConfiguration) => {\n const runtimeConfig = {};\n runtimeConfig.retryStrategy = retryStrategyConfiguration.retryStrategy();\n return runtimeConfig;\n};\n","import { getChecksumConfiguration, resolveChecksumRuntimeConfig } from \"./checksum\";\nimport { getRetryConfiguration, resolveRetryRuntimeConfig } from \"./retry\";\nexport const getDefaultExtensionConfiguration = (runtimeConfig) => {\n return {\n ...getChecksumConfiguration(runtimeConfig),\n ...getRetryConfiguration(runtimeConfig),\n };\n};\nexport const getDefaultClientConfiguration = getDefaultExtensionConfiguration;\nexport const resolveDefaultRuntimeConfig = (config) => {\n return {\n ...resolveChecksumRuntimeConfig(config),\n ...resolveRetryRuntimeConfig(config),\n };\n};\n","export function extendedEncodeURIComponent(str) {\n return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {\n return \"%\" + c.charCodeAt(0).toString(16).toUpperCase();\n });\n}\n","export const StringWrapper = function () {\n const Class = Object.getPrototypeOf(this).constructor;\n const Constructor = Function.bind.apply(String, [null, ...arguments]);\n const instance = new Constructor();\n Object.setPrototypeOf(instance, Class.prototype);\n return instance;\n};\nStringWrapper.prototype = Object.create(String.prototype, {\n constructor: {\n value: StringWrapper,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n});\nObject.setPrototypeOf(StringWrapper, String);\nexport class LazyJsonString extends StringWrapper {\n deserializeJSON() {\n return JSON.parse(super.toString());\n }\n toJSON() {\n return super.toString();\n }\n static fromObject(object) {\n if (object instanceof LazyJsonString) {\n return object;\n }\n else if (object instanceof String || typeof object === \"string\") {\n return new LazyJsonString(object);\n }\n return new LazyJsonString(JSON.stringify(object));\n }\n}\n","export function map(arg0, arg1, arg2) {\n let target;\n let filter;\n let instructions;\n if (typeof arg1 === \"undefined\" && typeof arg2 === \"undefined\") {\n target = {};\n instructions = arg0;\n }\n else {\n target = arg0;\n if (typeof arg1 === \"function\") {\n filter = arg1;\n instructions = arg2;\n return mapWithFilter(target, filter, instructions);\n }\n else {\n instructions = arg1;\n }\n }\n for (const key of Object.keys(instructions)) {\n if (!Array.isArray(instructions[key])) {\n target[key] = instructions[key];\n continue;\n }\n applyInstruction(target, null, instructions, key);\n }\n return target;\n}\nexport const convertMap = (target) => {\n const output = {};\n for (const [k, v] of Object.entries(target || {})) {\n output[k] = [, v];\n }\n return output;\n};\nexport const take = (source, instructions) => {\n const out = {};\n for (const key in instructions) {\n applyInstruction(out, source, instructions, key);\n }\n return out;\n};\nconst mapWithFilter = (target, filter, instructions) => {\n return map(target, Object.entries(instructions).reduce((_instructions, [key, value]) => {\n if (Array.isArray(value)) {\n _instructions[key] = value;\n }\n else {\n if (typeof value === \"function\") {\n _instructions[key] = [filter, value()];\n }\n else {\n _instructions[key] = [filter, value];\n }\n }\n return _instructions;\n }, {}));\n};\nconst applyInstruction = (target, source, instructions, targetKey) => {\n if (source !== null) {\n let instruction = instructions[targetKey];\n if (typeof instruction === \"function\") {\n instruction = [, instruction];\n }\n const [filter = nonNullish, valueFn = pass, sourceKey = targetKey] = instruction;\n if ((typeof filter === \"function\" && filter(source[sourceKey])) || (typeof filter !== \"function\" && !!filter)) {\n target[targetKey] = valueFn(source[sourceKey]);\n }\n return;\n }\n let [filter, value] = instructions[targetKey];\n if (typeof value === \"function\") {\n let _value;\n const defaultFilterPassed = filter === undefined && (_value = value()) != null;\n const customFilterPassed = (typeof filter === \"function\" && !!filter(void 0)) || (typeof filter !== \"function\" && !!filter);\n if (defaultFilterPassed) {\n target[targetKey] = _value;\n }\n else if (customFilterPassed) {\n target[targetKey] = value();\n }\n }\n else {\n const defaultFilterPassed = filter === undefined && value != null;\n const customFilterPassed = (typeof filter === \"function\" && !!filter(value)) || (typeof filter !== \"function\" && !!filter);\n if (defaultFilterPassed || customFilterPassed) {\n target[targetKey] = value;\n }\n }\n};\nconst nonNullish = (_) => _ != null;\nconst pass = (_) => _;\n","import { extendedEncodeURIComponent } from \"./extended-encode-uri-component\";\nexport const resolvedPath = (resolvedPath, input, memberName, labelValueProvider, uriLabel, isGreedyLabel) => {\n if (input != null && input[memberName] !== undefined) {\n const labelValue = labelValueProvider();\n if (labelValue.length <= 0) {\n throw new Error(\"Empty value provided for input HTTP label: \" + memberName + \".\");\n }\n resolvedPath = resolvedPath.replace(uriLabel, isGreedyLabel\n ? labelValue\n .split(\"/\")\n .map((segment) => extendedEncodeURIComponent(segment))\n .join(\"/\")\n : extendedEncodeURIComponent(labelValue));\n }\n else {\n throw new Error(\"No value provided for input HTTP label: \" + memberName + \".\");\n }\n return resolvedPath;\n};\n","export const _json = (obj) => {\n if (obj == null) {\n return {};\n }\n if (Array.isArray(obj)) {\n return obj.filter((_) => _ != null).map(_json);\n }\n if (typeof obj === \"object\") {\n const target = {};\n for (const key of Object.keys(obj)) {\n if (obj[key] == null) {\n continue;\n }\n target[key] = _json(obj[key]);\n }\n return target;\n }\n return obj;\n};\n","export const isStreamingPayload = (request) => request?.body instanceof ReadableStream;\n","import { HttpRequest, HttpResponse } from \"@smithy/protocol-http\";\nimport { isServerError, isThrottlingError, isTransientError } from \"@smithy/service-error-classification\";\nimport { NoOpLogger } from \"@smithy/smithy-client\";\nimport { INVOCATION_ID_HEADER, REQUEST_HEADER } from \"@smithy/util-retry\";\nimport { v4 } from \"uuid\";\nimport { isStreamingPayload } from \"./isStreamingPayload/isStreamingPayload\";\nimport { asSdkError } from \"./util\";\nexport const retryMiddleware = (options) => (next, context) => async (args) => {\n let retryStrategy = await options.retryStrategy();\n const maxAttempts = await options.maxAttempts();\n if (isRetryStrategyV2(retryStrategy)) {\n retryStrategy = retryStrategy;\n let retryToken = await retryStrategy.acquireInitialRetryToken(context[\"partition_id\"]);\n let lastError = new Error();\n let attempts = 0;\n let totalRetryDelay = 0;\n const { request } = args;\n const isRequest = HttpRequest.isInstance(request);\n if (isRequest) {\n request.headers[INVOCATION_ID_HEADER] = v4();\n }\n while (true) {\n try {\n if (isRequest) {\n request.headers[REQUEST_HEADER] = `attempt=${attempts + 1}; max=${maxAttempts}`;\n }\n const { response, output } = await next(args);\n retryStrategy.recordSuccess(retryToken);\n output.$metadata.attempts = attempts + 1;\n output.$metadata.totalRetryDelay = totalRetryDelay;\n return { response, output };\n }\n catch (e) {\n const retryErrorInfo = getRetryErrorInfo(e);\n lastError = asSdkError(e);\n if (isRequest && isStreamingPayload(request)) {\n (context.logger instanceof NoOpLogger ? console : context.logger)?.warn(\"An error was encountered in a non-retryable streaming request.\");\n throw lastError;\n }\n try {\n retryToken = await retryStrategy.refreshRetryTokenForRetry(retryToken, retryErrorInfo);\n }\n catch (refreshError) {\n if (!lastError.$metadata) {\n lastError.$metadata = {};\n }\n lastError.$metadata.attempts = attempts + 1;\n lastError.$metadata.totalRetryDelay = totalRetryDelay;\n throw lastError;\n }\n attempts = retryToken.getRetryCount();\n const delay = retryToken.getRetryDelay();\n totalRetryDelay += delay;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n else {\n retryStrategy = retryStrategy;\n if (retryStrategy?.mode)\n context.userAgent = [...(context.userAgent || []), [\"cfg/retry-mode\", retryStrategy.mode]];\n return retryStrategy.retry(next, args);\n }\n};\nconst isRetryStrategyV2 = (retryStrategy) => typeof retryStrategy.acquireInitialRetryToken !== \"undefined\" &&\n typeof retryStrategy.refreshRetryTokenForRetry !== \"undefined\" &&\n typeof retryStrategy.recordSuccess !== \"undefined\";\nconst getRetryErrorInfo = (error) => {\n const errorInfo = {\n errorType: getRetryErrorType(error),\n };\n const retryAfterHint = getRetryAfterHint(error.$response);\n if (retryAfterHint) {\n errorInfo.retryAfterHint = retryAfterHint;\n }\n return errorInfo;\n};\nconst getRetryErrorType = (error) => {\n if (isThrottlingError(error))\n return \"THROTTLING\";\n if (isTransientError(error))\n return \"TRANSIENT\";\n if (isServerError(error))\n return \"SERVER_ERROR\";\n return \"CLIENT_ERROR\";\n};\nexport const retryMiddlewareOptions = {\n name: \"retryMiddleware\",\n tags: [\"RETRY\"],\n step: \"finalizeRequest\",\n priority: \"high\",\n override: true,\n};\nexport const getRetryPlugin = (options) => ({\n applyToStack: (clientStack) => {\n clientStack.add(retryMiddleware(options), retryMiddlewareOptions);\n },\n});\nexport const getRetryAfterHint = (response) => {\n if (!HttpResponse.isInstance(response))\n return;\n const retryAfterHeaderName = Object.keys(response.headers).find((key) => key.toLowerCase() === \"retry-after\");\n if (!retryAfterHeaderName)\n return;\n const retryAfter = response.headers[retryAfterHeaderName];\n const retryAfterSeconds = Number(retryAfter);\n if (!Number.isNaN(retryAfterSeconds))\n return new Date(retryAfterSeconds * 1000);\n const retryAfterDate = new Date(retryAfter);\n return retryAfterDate;\n};\n","export const resolveClientEndpointParameters = (options) => {\n return {\n ...options,\n useDualstackEndpoint: options.useDualstackEndpoint ?? false,\n useFipsEndpoint: options.useFipsEndpoint ?? false,\n defaultSigningName: \"chime\",\n };\n};\nexport const commonParams = {\n UseFIPS: { type: \"builtInParams\", name: \"useFipsEndpoint\" },\n Endpoint: { type: \"builtInParams\", name: \"endpoint\" },\n Region: { type: \"builtInParams\", name: \"region\" },\n UseDualStack: { type: \"builtInParams\", name: \"useDualstackEndpoint\" },\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.EMPTY_DATA_SHA_256 = exports.SHA_256_HMAC_ALGO = exports.SHA_256_HASH = void 0;\nexports.SHA_256_HASH = { name: \"SHA-256\" };\nexports.SHA_256_HMAC_ALGO = {\n name: \"HMAC\",\n hash: exports.SHA_256_HASH\n};\nexports.EMPTY_DATA_SHA_256 = new Uint8Array([\n 227,\n 176,\n 196,\n 66,\n 152,\n 252,\n 28,\n 20,\n 154,\n 251,\n 244,\n 200,\n 153,\n 111,\n 185,\n 36,\n 39,\n 174,\n 65,\n 228,\n 100,\n 155,\n 147,\n 76,\n 164,\n 149,\n 153,\n 27,\n 120,\n 82,\n 184,\n 85\n]);\n//# sourceMappingURL=constants.js.map","const fallbackWindow = {};\nexport function locateWindow() {\n if (typeof window !== \"undefined\") {\n return window;\n }\n else if (typeof self !== \"undefined\") {\n return self;\n }\n return fallbackWindow;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sha256 = void 0;\nvar isEmptyData_1 = require(\"./isEmptyData\");\nvar constants_1 = require(\"./constants\");\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.secret = secret;\n this.reset();\n }\n Sha256.prototype.update = function (toHash) {\n var _this = this;\n if ((0, isEmptyData_1.isEmptyData)(toHash)) {\n return;\n }\n this.operation = this.operation.then(function (operation) {\n operation.onerror = function () {\n _this.operation = Promise.reject(new Error(\"Error encountered updating hash\"));\n };\n operation.process(toArrayBufferView(toHash));\n return operation;\n });\n this.operation.catch(function () { });\n };\n Sha256.prototype.digest = function () {\n return this.operation.then(function (operation) {\n return new Promise(function (resolve, reject) {\n operation.onerror = function () {\n reject(new Error(\"Error encountered finalizing hash\"));\n };\n operation.oncomplete = function () {\n if (operation.result) {\n resolve(new Uint8Array(operation.result));\n }\n reject(new Error(\"Error encountered finalizing hash\"));\n };\n operation.finish();\n });\n });\n };\n Sha256.prototype.reset = function () {\n if (this.secret) {\n this.operation = getKeyPromise(this.secret).then(function (keyData) {\n return (0, util_locate_window_1.locateWindow)().msCrypto.subtle.sign(constants_1.SHA_256_HMAC_ALGO, keyData);\n });\n this.operation.catch(function () { });\n }\n else {\n this.operation = Promise.resolve((0, util_locate_window_1.locateWindow)().msCrypto.subtle.digest(\"SHA-256\"));\n }\n };\n return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction getKeyPromise(secret) {\n return new Promise(function (resolve, reject) {\n var keyOperation = (0, util_locate_window_1.locateWindow)().msCrypto.subtle.importKey(\"raw\", toArrayBufferView(secret), constants_1.SHA_256_HMAC_ALGO, false, [\"sign\"]);\n keyOperation.oncomplete = function () {\n if (keyOperation.result) {\n resolve(keyOperation.result);\n }\n reject(new Error(\"ImportKey completed without importing key.\"));\n };\n keyOperation.onerror = function () {\n reject(new Error(\"ImportKey failed to import key.\"));\n };\n });\n}\nfunction toArrayBufferView(data) {\n if (typeof data === \"string\") {\n return (0, util_utf8_browser_1.fromUtf8)(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\n//# sourceMappingURL=ie11Sha256.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToBuffer = void 0;\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : util_utf8_browser_1.fromUtf8;\nfunction convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\nexports.convertToBuffer = convertToBuffer;\n//# sourceMappingURL=convertToBuffer.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numToUint8 = void 0;\nfunction numToUint8(num) {\n return new Uint8Array([\n (num & 0xff000000) >> 24,\n (num & 0x00ff0000) >> 16,\n (num & 0x0000ff00) >> 8,\n num & 0x000000ff,\n ]);\n}\nexports.numToUint8 = numToUint8;\n//# sourceMappingURL=numToUint8.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = void 0;\n// IE 11 does not support Array.from, so we do it manually\nfunction uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\nexports.uint32ArrayFrom = uint32ArrayFrom;\n//# sourceMappingURL=uint32ArrayFrom.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;\nvar convertToBuffer_1 = require(\"./convertToBuffer\");\nObject.defineProperty(exports, \"convertToBuffer\", { enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nObject.defineProperty(exports, \"isEmptyData\", { enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } });\nvar numToUint8_1 = require(\"./numToUint8\");\nObject.defineProperty(exports, \"numToUint8\", { enumerable: true, get: function () { return numToUint8_1.numToUint8; } });\nvar uint32ArrayFrom_1 = require(\"./uint32ArrayFrom\");\nObject.defineProperty(exports, \"uint32ArrayFrom\", { enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sha256 = void 0;\nvar util_1 = require(\"@aws-crypto/util\");\nvar constants_1 = require(\"./constants\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.toHash = new Uint8Array(0);\n this.secret = secret;\n this.reset();\n }\n Sha256.prototype.update = function (data) {\n if ((0, util_1.isEmptyData)(data)) {\n return;\n }\n var update = (0, util_1.convertToBuffer)(data);\n var typedArray = new Uint8Array(this.toHash.byteLength + update.byteLength);\n typedArray.set(this.toHash, 0);\n typedArray.set(update, this.toHash.byteLength);\n this.toHash = typedArray;\n };\n Sha256.prototype.digest = function () {\n var _this = this;\n if (this.key) {\n return this.key.then(function (key) {\n return (0, util_locate_window_1.locateWindow)()\n .crypto.subtle.sign(constants_1.SHA_256_HMAC_ALGO, key, _this.toHash)\n .then(function (data) { return new Uint8Array(data); });\n });\n }\n if ((0, util_1.isEmptyData)(this.toHash)) {\n return Promise.resolve(constants_1.EMPTY_DATA_SHA_256);\n }\n return Promise.resolve()\n .then(function () {\n return (0, util_locate_window_1.locateWindow)().crypto.subtle.digest(constants_1.SHA_256_HASH, _this.toHash);\n })\n .then(function (data) { return Promise.resolve(new Uint8Array(data)); });\n };\n Sha256.prototype.reset = function () {\n var _this = this;\n this.toHash = new Uint8Array(0);\n if (this.secret && this.secret !== void 0) {\n this.key = new Promise(function (resolve, reject) {\n (0, util_locate_window_1.locateWindow)()\n .crypto.subtle.importKey(\"raw\", (0, util_1.convertToBuffer)(_this.secret), constants_1.SHA_256_HMAC_ALGO, false, [\"sign\"])\n .then(resolve, reject);\n });\n this.key.catch(function () { });\n }\n };\n return Sha256;\n}());\nexports.Sha256 = Sha256;\n//# sourceMappingURL=webCryptoSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MAX_HASHABLE_LENGTH = exports.INIT = exports.KEY = exports.DIGEST_LENGTH = exports.BLOCK_SIZE = void 0;\n/**\n * @internal\n */\nexports.BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexports.DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexports.KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/**\n * @internal\n */\nexports.INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n];\n/**\n * @internal\n */\nexports.MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RawSha256 = void 0;\nvar constants_1 = require(\"./constants\");\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n function RawSha256() {\n this.state = Int32Array.from(constants_1.INIT);\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @internal\n */\n this.finished = false;\n }\n RawSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error(\"Attempted to update an already finished hash.\");\n }\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n if (this.bytesHashed * 8 > constants_1.MAX_HASHABLE_LENGTH) {\n throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n }\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n if (this.bufferLength === constants_1.BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n };\n RawSha256.prototype.digest = function () {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % constants_1.BLOCK_SIZE >= constants_1.BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(constants_1.BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(constants_1.BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Uint8Array(constants_1.DIGEST_LENGTH);\n for (var i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return out;\n };\n RawSha256.prototype.hashBuffer = function () {\n var _a = this, buffer = _a.buffer, state = _a.state;\n var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] =\n ((buffer[i * 4] & 0xff) << 24) |\n ((buffer[i * 4 + 1] & 0xff) << 16) |\n ((buffer[i * 4 + 2] & 0xff) << 8) |\n (buffer[i * 4 + 3] & 0xff);\n }\n else {\n var u = this.temp[i - 2];\n var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n u = this.temp[i - 15];\n var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n this.temp[i] =\n ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n }\n var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n ((state4 >>> 11) | (state4 << 21)) ^\n ((state4 >>> 25) | (state4 << 7))) +\n ((state4 & state5) ^ (~state4 & state6))) |\n 0) +\n ((state7 + ((constants_1.KEY[i] + this.temp[i]) | 0)) | 0)) |\n 0;\n var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n ((state0 >>> 13) | (state0 << 19)) ^\n ((state0 >>> 22) | (state0 << 10))) +\n ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n };\n return RawSha256;\n}());\nexports.RawSha256 = RawSha256;\n//# sourceMappingURL=RawSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sha256 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar constants_1 = require(\"./constants\");\nvar RawSha256_1 = require(\"./RawSha256\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.secret = secret;\n this.hash = new RawSha256_1.RawSha256();\n this.reset();\n }\n Sha256.prototype.update = function (toHash) {\n if ((0, util_1.isEmptyData)(toHash) || this.error) {\n return;\n }\n try {\n this.hash.update((0, util_1.convertToBuffer)(toHash));\n }\n catch (e) {\n this.error = e;\n }\n };\n /* This synchronous method keeps compatibility\n * with the v2 aws-sdk.\n */\n Sha256.prototype.digestSync = function () {\n if (this.error) {\n throw this.error;\n }\n if (this.outer) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n return this.outer.digest();\n }\n return this.hash.digest();\n };\n /* The underlying digest method here is synchronous.\n * To keep the same interface with the other hash functions\n * the default is to expose this as an async method.\n * However, it can sometimes be useful to have a sync method.\n */\n Sha256.prototype.digest = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, this.digestSync()];\n });\n });\n };\n Sha256.prototype.reset = function () {\n this.hash = new RawSha256_1.RawSha256();\n if (this.secret) {\n this.outer = new RawSha256_1.RawSha256();\n var inner = bufferFromSecret(this.secret);\n var outer = new Uint8Array(constants_1.BLOCK_SIZE);\n outer.set(inner);\n for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n this.hash.update(inner);\n this.outer.update(outer);\n // overwrite the copied key in memory\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n }\n };\n return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction bufferFromSecret(secret) {\n var input = (0, util_1.convertToBuffer)(secret);\n if (input.byteLength > constants_1.BLOCK_SIZE) {\n var bufferHash = new RawSha256_1.RawSha256();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n var buffer = new Uint8Array(constants_1.BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n//# sourceMappingURL=jsSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./jsSha256\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.supportsZeroByteGCM = exports.supportsSubtleCrypto = exports.supportsSecureRandom = exports.supportsWebCrypto = void 0;\nvar tslib_1 = require(\"tslib\");\nvar subtleCryptoMethods = [\n \"decrypt\",\n \"digest\",\n \"encrypt\",\n \"exportKey\",\n \"generateKey\",\n \"importKey\",\n \"sign\",\n \"verify\"\n];\nfunction supportsWebCrypto(window) {\n if (supportsSecureRandom(window) &&\n typeof window.crypto.subtle === \"object\") {\n var subtle = window.crypto.subtle;\n return supportsSubtleCrypto(subtle);\n }\n return false;\n}\nexports.supportsWebCrypto = supportsWebCrypto;\nfunction supportsSecureRandom(window) {\n if (typeof window === \"object\" && typeof window.crypto === \"object\") {\n var getRandomValues = window.crypto.getRandomValues;\n return typeof getRandomValues === \"function\";\n }\n return false;\n}\nexports.supportsSecureRandom = supportsSecureRandom;\nfunction supportsSubtleCrypto(subtle) {\n return (subtle &&\n subtleCryptoMethods.every(function (methodName) { return typeof subtle[methodName] === \"function\"; }));\n}\nexports.supportsSubtleCrypto = supportsSubtleCrypto;\nfunction supportsZeroByteGCM(subtle) {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n var key, zeroByteAuthTag, _a;\n return tslib_1.__generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!supportsSubtleCrypto(subtle))\n return [2 /*return*/, false];\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, , 5]);\n return [4 /*yield*/, subtle.generateKey({ name: \"AES-GCM\", length: 128 }, false, [\"encrypt\"])];\n case 2:\n key = _b.sent();\n return [4 /*yield*/, subtle.encrypt({\n name: \"AES-GCM\",\n iv: new Uint8Array(Array(12)),\n additionalData: new Uint8Array(Array(16)),\n tagLength: 128\n }, key, new Uint8Array(0))];\n case 3:\n zeroByteAuthTag = _b.sent();\n return [2 /*return*/, zeroByteAuthTag.byteLength === 16];\n case 4:\n _a = _b.sent();\n return [2 /*return*/, false];\n case 5: return [2 /*return*/];\n }\n });\n });\n}\nexports.supportsZeroByteGCM = supportsZeroByteGCM;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwcG9ydHNXZWJDcnlwdG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3VwcG9ydHNXZWJDcnlwdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVVBLElBQU0sbUJBQW1CLEdBQThCO0lBQ3JELFNBQVM7SUFDVCxRQUFRO0lBQ1IsU0FBUztJQUNULFdBQVc7SUFDWCxhQUFhO0lBQ2IsV0FBVztJQUNYLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQztBQUVGLFNBQWdCLGlCQUFpQixDQUFDLE1BQWM7SUFDOUMsSUFDRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7UUFDNUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQ3hDO1FBQ1EsSUFBQSxNQUFNLEdBQUssTUFBTSxDQUFDLE1BQU0sT0FBbEIsQ0FBbUI7UUFFakMsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNyQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVhELDhDQVdDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsTUFBYztJQUNqRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1FBQzNELElBQUEsZUFBZSxHQUFLLE1BQU0sQ0FBQyxNQUFNLGdCQUFsQixDQUFtQjtRQUUxQyxPQUFPLE9BQU8sZUFBZSxLQUFLLFVBQVUsQ0FBQztLQUM5QztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVJELG9EQVFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsTUFBb0I7SUFDdkQsT0FBTyxDQUNMLE1BQU07UUFDTixtQkFBbUIsQ0FBQyxLQUFLLENBQ3ZCLFVBQUEsVUFBVSxJQUFJLE9BQUEsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssVUFBVSxFQUF4QyxDQUF3QyxDQUN2RCxDQUNGLENBQUM7QUFDSixDQUFDO0FBUEQsb0RBT0M7QUFFRCxTQUFzQixtQkFBbUIsQ0FBQyxNQUFvQjs7Ozs7O29CQUM1RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO3dCQUFFLHNCQUFPLEtBQUssRUFBQzs7OztvQkFFbEMscUJBQU0sTUFBTSxDQUFDLFdBQVcsQ0FDbEMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFDaEMsS0FBSyxFQUNMLENBQUMsU0FBUyxDQUFDLENBQ1osRUFBQTs7b0JBSkssR0FBRyxHQUFHLFNBSVg7b0JBQ3VCLHFCQUFNLE1BQU0sQ0FBQyxPQUFPLENBQzFDOzRCQUNFLElBQUksRUFBRSxTQUFTOzRCQUNmLEVBQUUsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQzdCLGNBQWMsRUFBRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7NEJBQ3pDLFNBQVMsRUFBRSxHQUFHO3lCQUNmLEVBQ0QsR0FBRyxFQUNILElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUNsQixFQUFBOztvQkFUSyxlQUFlLEdBQUcsU0FTdkI7b0JBQ0Qsc0JBQU8sZUFBZSxDQUFDLFVBQVUsS0FBSyxFQUFFLEVBQUM7OztvQkFFekMsc0JBQU8sS0FBSyxFQUFDOzs7OztDQUVoQjtBQXRCRCxrREFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFN1YnRsZUNyeXB0b01ldGhvZCA9XG4gIHwgXCJkZWNyeXB0XCJcbiAgfCBcImRpZ2VzdFwiXG4gIHwgXCJlbmNyeXB0XCJcbiAgfCBcImV4cG9ydEtleVwiXG4gIHwgXCJnZW5lcmF0ZUtleVwiXG4gIHwgXCJpbXBvcnRLZXlcIlxuICB8IFwic2lnblwiXG4gIHwgXCJ2ZXJpZnlcIjtcblxuY29uc3Qgc3VidGxlQ3J5cHRvTWV0aG9kczogQXJyYXk8U3VidGxlQ3J5cHRvTWV0aG9kPiA9IFtcbiAgXCJkZWNyeXB0XCIsXG4gIFwiZGlnZXN0XCIsXG4gIFwiZW5jcnlwdFwiLFxuICBcImV4cG9ydEtleVwiLFxuICBcImdlbmVyYXRlS2V5XCIsXG4gIFwiaW1wb3J0S2V5XCIsXG4gIFwic2lnblwiLFxuICBcInZlcmlmeVwiXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNXZWJDcnlwdG8od2luZG93OiBXaW5kb3cpOiBib29sZWFuIHtcbiAgaWYgKFxuICAgIHN1cHBvcnRzU2VjdXJlUmFuZG9tKHdpbmRvdykgJiZcbiAgICB0eXBlb2Ygd2luZG93LmNyeXB0by5zdWJ0bGUgPT09IFwib2JqZWN0XCJcbiAgKSB7XG4gICAgY29uc3QgeyBzdWJ0bGUgfSA9IHdpbmRvdy5jcnlwdG87XG5cbiAgICByZXR1cm4gc3VwcG9ydHNTdWJ0bGVDcnlwdG8oc3VidGxlKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzU2VjdXJlUmFuZG9tKHdpbmRvdzogV2luZG93KTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB3aW5kb3cuY3J5cHRvID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgeyBnZXRSYW5kb21WYWx1ZXMgfSA9IHdpbmRvdy5jcnlwdG87XG5cbiAgICByZXR1cm4gdHlwZW9mIGdldFJhbmRvbVZhbHVlcyA9PT0gXCJmdW5jdGlvblwiO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNTdWJ0bGVDcnlwdG8oc3VidGxlOiBTdWJ0bGVDcnlwdG8pIHtcbiAgcmV0dXJuIChcbiAgICBzdWJ0bGUgJiZcbiAgICBzdWJ0bGVDcnlwdG9NZXRob2RzLmV2ZXJ5KFxuICAgICAgbWV0aG9kTmFtZSA9PiB0eXBlb2Ygc3VidGxlW21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdXBwb3J0c1plcm9CeXRlR0NNKHN1YnRsZTogU3VidGxlQ3J5cHRvKSB7XG4gIGlmICghc3VwcG9ydHNTdWJ0bGVDcnlwdG8oc3VidGxlKSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IGtleSA9IGF3YWl0IHN1YnRsZS5nZW5lcmF0ZUtleShcbiAgICAgIHsgbmFtZTogXCJBRVMtR0NNXCIsIGxlbmd0aDogMTI4IH0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcImVuY3J5cHRcIl1cbiAgICApO1xuICAgIGNvbnN0IHplcm9CeXRlQXV0aFRhZyA9IGF3YWl0IHN1YnRsZS5lbmNyeXB0KFxuICAgICAge1xuICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgaXY6IG5ldyBVaW50OEFycmF5KEFycmF5KDEyKSksXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiBuZXcgVWludDhBcnJheShBcnJheSgxNikpLFxuICAgICAgICB0YWdMZW5ndGg6IDEyOFxuICAgICAgfSxcbiAgICAgIGtleSxcbiAgICAgIG5ldyBVaW50OEFycmF5KDApXG4gICAgKTtcbiAgICByZXR1cm4gemVyb0J5dGVBdXRoVGFnLmJ5dGVMZW5ndGggPT09IDE2O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./supportsWebCrypto\"), exports);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsOERBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vc3VwcG9ydHNXZWJDcnlwdG9cIjtcbiJdfQ==","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=CryptoOperation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=Key.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=KeyOperation.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n//# sourceMappingURL=MsSubtleCrypto.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isMsWindow = void 0;\nvar msSubtleCryptoMethods = [\n \"decrypt\",\n \"digest\",\n \"encrypt\",\n \"exportKey\",\n \"generateKey\",\n \"importKey\",\n \"sign\",\n \"verify\"\n];\nfunction quacksLikeAnMsWindow(window) {\n return \"MSInputMethodContext\" in window && \"msCrypto\" in window;\n}\n/**\n * Determines if the provided window is (or is like) the window object one would\n * expect to encounter in Internet Explorer 11.\n */\nfunction isMsWindow(window) {\n if (quacksLikeAnMsWindow(window) && window.msCrypto.subtle !== undefined) {\n var _a = window.msCrypto, getRandomValues = _a.getRandomValues, subtle_1 = _a.subtle;\n return msSubtleCryptoMethods\n .map(function (methodName) { return subtle_1[methodName]; })\n .concat(getRandomValues)\n .every(function (method) { return typeof method === \"function\"; });\n }\n return false;\n}\nexports.isMsWindow = isMsWindow;\n//# sourceMappingURL=MsWindow.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./CryptoOperation\"), exports);\ntslib_1.__exportStar(require(\"./Key\"), exports);\ntslib_1.__exportStar(require(\"./KeyOperation\"), exports);\ntslib_1.__exportStar(require(\"./MsSubtleCrypto\"), exports);\ntslib_1.__exportStar(require(\"./MsWindow\"), exports);\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sha256 = void 0;\nvar ie11Sha256_1 = require(\"./ie11Sha256\");\nvar webCryptoSha256_1 = require(\"./webCryptoSha256\");\nvar sha256_js_1 = require(\"@aws-crypto/sha256-js\");\nvar supports_web_crypto_1 = require(\"@aws-crypto/supports-web-crypto\");\nvar ie11_detection_1 = require(\"@aws-crypto/ie11-detection\");\nvar util_locate_window_1 = require(\"@aws-sdk/util-locate-window\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n if ((0, supports_web_crypto_1.supportsWebCrypto)((0, util_locate_window_1.locateWindow)())) {\n this.hash = new webCryptoSha256_1.Sha256(secret);\n }\n else if ((0, ie11_detection_1.isMsWindow)((0, util_locate_window_1.locateWindow)())) {\n this.hash = new ie11Sha256_1.Sha256(secret);\n }\n else {\n this.hash = new sha256_js_1.Sha256(secret);\n }\n }\n Sha256.prototype.update = function (data, encoding) {\n this.hash.update((0, util_1.convertToBuffer)(data));\n };\n Sha256.prototype.digest = function () {\n return this.hash.digest();\n };\n Sha256.prototype.reset = function () {\n this.hash.reset();\n };\n return Sha256;\n}());\nexports.Sha256 = Sha256;\n//# sourceMappingURL=crossPlatformSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebCryptoSha256 = exports.Ie11Sha256 = void 0;\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./crossPlatformSha256\"), exports);\nvar ie11Sha256_1 = require(\"./ie11Sha256\");\nObject.defineProperty(exports, \"Ie11Sha256\", { enumerable: true, get: function () { return ie11Sha256_1.Sha256; } });\nvar webCryptoSha256_1 = require(\"./webCryptoSha256\");\nObject.defineProperty(exports, \"WebCryptoSha256\", { enumerable: true, get: function () { return webCryptoSha256_1.Sha256; } });\n//# sourceMappingURL=index.js.map","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n 'Amazon Silk': 'amazon_silk',\n 'Android Browser': 'android',\n Bada: 'bada',\n BlackBerry: 'blackberry',\n Chrome: 'chrome',\n Chromium: 'chromium',\n Electron: 'electron',\n Epiphany: 'epiphany',\n Firefox: 'firefox',\n Focus: 'focus',\n Generic: 'generic',\n 'Google Search': 'google_search',\n Googlebot: 'googlebot',\n 'Internet Explorer': 'ie',\n 'K-Meleon': 'k_meleon',\n Maxthon: 'maxthon',\n 'Microsoft Edge': 'edge',\n 'MZ Browser': 'mz',\n 'NAVER Whale Browser': 'naver',\n Opera: 'opera',\n 'Opera Coast': 'opera_coast',\n PhantomJS: 'phantomjs',\n Puffin: 'puffin',\n QupZilla: 'qupzilla',\n QQ: 'qq',\n QQLite: 'qqlite',\n Safari: 'safari',\n Sailfish: 'sailfish',\n 'Samsung Internet for Android': 'samsung_internet',\n SeaMonkey: 'seamonkey',\n Sleipnir: 'sleipnir',\n Swing: 'swing',\n Tizen: 'tizen',\n 'UC Browser': 'uc',\n Vivaldi: 'vivaldi',\n 'WebOS Browser': 'webos',\n WeChat: 'wechat',\n 'Yandex Browser': 'yandex',\n Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n amazon_silk: 'Amazon Silk',\n android: 'Android Browser',\n bada: 'Bada',\n blackberry: 'BlackBerry',\n chrome: 'Chrome',\n chromium: 'Chromium',\n electron: 'Electron',\n epiphany: 'Epiphany',\n firefox: 'Firefox',\n focus: 'Focus',\n generic: 'Generic',\n googlebot: 'Googlebot',\n google_search: 'Google Search',\n ie: 'Internet Explorer',\n k_meleon: 'K-Meleon',\n maxthon: 'Maxthon',\n edge: 'Microsoft Edge',\n mz: 'MZ Browser',\n naver: 'NAVER Whale Browser',\n opera: 'Opera',\n opera_coast: 'Opera Coast',\n phantomjs: 'PhantomJS',\n puffin: 'Puffin',\n qupzilla: 'QupZilla',\n qq: 'QQ Browser',\n qqlite: 'QQ Browser Lite',\n safari: 'Safari',\n sailfish: 'Sailfish',\n samsung_internet: 'Samsung Internet for Android',\n seamonkey: 'SeaMonkey',\n sleipnir: 'Sleipnir',\n swing: 'Swing',\n tizen: 'Tizen',\n uc: 'UC Browser',\n vivaldi: 'Vivaldi',\n webos: 'WebOS Browser',\n wechat: 'WeChat',\n yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n tablet: 'tablet',\n mobile: 'mobile',\n desktop: 'desktop',\n tv: 'tv',\n};\n\nexport const OS_MAP = {\n WindowsPhone: 'Windows Phone',\n Windows: 'Windows',\n MacOS: 'macOS',\n iOS: 'iOS',\n Android: 'Android',\n WebOS: 'WebOS',\n BlackBerry: 'BlackBerry',\n Bada: 'Bada',\n Tizen: 'Tizen',\n Linux: 'Linux',\n ChromeOS: 'Chrome OS',\n PlayStation4: 'PlayStation 4',\n Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n EdgeHTML: 'EdgeHTML',\n Blink: 'Blink',\n Trident: 'Trident',\n Presto: 'Presto',\n Gecko: 'Gecko',\n WebKit: 'WebKit',\n};\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n /**\n * Get first matched item for a string\n * @param {RegExp} regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getFirstMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n /**\n * Get second matched item for a string\n * @param regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getSecondMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n /**\n * Match a regexp and return a constant or undefined\n * @param {RegExp} regexp\n * @param {String} ua\n * @param {*} _const Any const that will be returned if regexp matches the string\n * @return {*}\n */\n static matchAndReturnConst(regexp, ua, _const) {\n if (regexp.test(ua)) {\n return _const;\n }\n return void (0);\n }\n\n static getWindowsVersionName(version) {\n switch (version) {\n case 'NT': return 'NT';\n case 'XP': return 'XP';\n case 'NT 5.0': return '2000';\n case 'NT 5.1': return 'XP';\n case 'NT 5.2': return '2003';\n case 'NT 6.0': return 'Vista';\n case 'NT 6.1': return '7';\n case 'NT 6.2': return '8';\n case 'NT 6.3': return '8.1';\n case 'NT 10.0': return '10';\n default: return undefined;\n }\n }\n\n /**\n * Get macOS version name\n * 10.5 - Leopard\n * 10.6 - Snow Leopard\n * 10.7 - Lion\n * 10.8 - Mountain Lion\n * 10.9 - Mavericks\n * 10.10 - Yosemite\n * 10.11 - El Capitan\n * 10.12 - Sierra\n * 10.13 - High Sierra\n * 10.14 - Mojave\n * 10.15 - Catalina\n *\n * @example\n * getMacOSVersionName(\"10.14\") // 'Mojave'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getMacOSVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] !== 10) return undefined;\n switch (v[1]) {\n case 5: return 'Leopard';\n case 6: return 'Snow Leopard';\n case 7: return 'Lion';\n case 8: return 'Mountain Lion';\n case 9: return 'Mavericks';\n case 10: return 'Yosemite';\n case 11: return 'El Capitan';\n case 12: return 'Sierra';\n case 13: return 'High Sierra';\n case 14: return 'Mojave';\n case 15: return 'Catalina';\n default: return undefined;\n }\n }\n\n /**\n * Get Android version name\n * 1.5 - Cupcake\n * 1.6 - Donut\n * 2.0 - Eclair\n * 2.1 - Eclair\n * 2.2 - Froyo\n * 2.x - Gingerbread\n * 3.x - Honeycomb\n * 4.0 - Ice Cream Sandwich\n * 4.1 - Jelly Bean\n * 4.4 - KitKat\n * 5.x - Lollipop\n * 6.x - Marshmallow\n * 7.x - Nougat\n * 8.x - Oreo\n * 9.x - Pie\n *\n * @example\n * getAndroidVersionName(\"7.0\") // 'Nougat'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getAndroidVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] === 1 && v[1] < 5) return undefined;\n if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n if (v[0] === 1 && v[1] >= 6) return 'Donut';\n if (v[0] === 2 && v[1] < 2) return 'Eclair';\n if (v[0] === 2 && v[1] === 2) return 'Froyo';\n if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n if (v[0] === 3) return 'Honeycomb';\n if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n if (v[0] === 5) return 'Lollipop';\n if (v[0] === 6) return 'Marshmallow';\n if (v[0] === 7) return 'Nougat';\n if (v[0] === 8) return 'Oreo';\n if (v[0] === 9) return 'Pie';\n return undefined;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n static getVersionPrecision(version) {\n return version.split('.').length;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions('1.10.2.1', '1.8.2.1.90') // 1\n * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1\n * compareVersions('1.10.2.1', '1.10.2.1'); // 0\n * compareVersions('1.10.2.1', '1.0800.2'); // -1\n * compareVersions('1.10.2.1', '1.10', true); // 0\n *\n * @param {String} versionA versions versions to compare\n * @param {String} versionB versions versions to compare\n * @param {boolean} [isLoose] enable loose comparison\n * @return {Number} comparison result: -1 when versionA is lower,\n * 1 when versionA is bigger, 0 when both equal\n */\n /* eslint consistent-return: 1 */\n static compareVersions(versionA, versionB, isLoose = false) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n const versionAPrecision = Utils.getVersionPrecision(versionA);\n const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n let precision = Math.max(versionAPrecision, versionBPrecision);\n let lastPrecision = 0;\n\n const chunks = Utils.map([versionA, versionB], (version) => {\n const delta = precision - Utils.getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n const _version = version + new Array(delta + 1).join('.0');\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n });\n\n // adjust precision for loose comparison\n if (isLoose) {\n lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n }\n\n // iterate in reverse order by reversed chunks array\n precision -= 1;\n while (precision >= lastPrecision) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n\n if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === lastPrecision) {\n // all version chunks are same\n return 0;\n }\n\n precision -= 1;\n } else if (chunks[0][precision] < chunks[1][precision]) {\n return -1;\n }\n }\n\n return undefined;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n static map(arr, iterator) {\n const result = [];\n let i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i += 1) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Array::find polyfill\n *\n * @param {Array} arr\n * @param {Function} predicate\n * @return {Array}\n */\n static find(arr, predicate) {\n let i;\n let l;\n if (Array.prototype.find) {\n return Array.prototype.find.call(arr, predicate);\n }\n for (i = 0, l = arr.length; i < l; i += 1) {\n const value = arr[i];\n if (predicate(value, i)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Object::assign polyfill\n *\n * @param {Object} obj\n * @param {Object} ...objs\n * @return {Object}\n */\n static assign(obj, ...assigners) {\n const result = obj;\n let i;\n let l;\n if (Object.assign) {\n return Object.assign(obj, ...assigners);\n }\n for (i = 0, l = assigners.length; i < l; i += 1) {\n const assigner = assigners[i];\n if (typeof assigner === 'object' && assigner !== null) {\n const keys = Object.keys(assigner);\n keys.forEach((key) => {\n result[key] = assigner[key];\n });\n }\n }\n return obj;\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('Microsoft Edge') // edge\n *\n * @param {string} browserName\n * @return {string}\n */\n static getBrowserAlias(browserName) {\n return BROWSER_ALIASES_MAP[browserName];\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('edge') // Microsoft Edge\n *\n * @param {string} browserAlias\n * @return {string}\n */\n static getBrowserTypeByAlias(browserAlias) {\n return BROWSER_MAP[browserAlias] || '';\n }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe(ua) {\n const browser = {\n name: 'Googlebot',\n };\n const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera < 13.0 */\n {\n test: [/opera/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera > 13.0 */\n {\n test: [/opr\\/|opios/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/SamsungBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Samsung Internet for Android',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Whale/i],\n describe(ua) {\n const browser = {\n name: 'NAVER Whale Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MZBrowser/i],\n describe(ua) {\n const browser = {\n name: 'MZ Browser',\n };\n const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/focus/i],\n describe(ua) {\n const browser = {\n name: 'Focus',\n };\n const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/swing/i],\n describe(ua) {\n const browser = {\n name: 'Swing',\n };\n const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/coast/i],\n describe(ua) {\n const browser = {\n name: 'Opera Coast',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe(ua) {\n const browser = {\n name: 'Opera Touch',\n };\n const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/yabrowser/i],\n describe(ua) {\n const browser = {\n name: 'Yandex Browser',\n };\n const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/ucbrowser/i],\n describe(ua) {\n const browser = {\n name: 'UC Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Maxthon|mxios/i],\n describe(ua) {\n const browser = {\n name: 'Maxthon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/epiphany/i],\n describe(ua) {\n const browser = {\n name: 'Epiphany',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/puffin/i],\n describe(ua) {\n const browser = {\n name: 'Puffin',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sleipnir/i],\n describe(ua) {\n const browser = {\n name: 'Sleipnir',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/k-meleon/i],\n describe(ua) {\n const browser = {\n name: 'K-Meleon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/micromessenger/i],\n describe(ua) {\n const browser = {\n name: 'WeChat',\n };\n const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qqbrowser/i],\n describe(ua) {\n const browser = {\n name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n };\n const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/msie|trident/i],\n describe(ua) {\n const browser = {\n name: 'Internet Explorer',\n };\n const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/\\sedg\\//i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/edg([ea]|ios)/i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/vivaldi/i],\n describe(ua) {\n const browser = {\n name: 'Vivaldi',\n };\n const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/seamonkey/i],\n describe(ua) {\n const browser = {\n name: 'SeaMonkey',\n };\n const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sailfish/i],\n describe(ua) {\n const browser = {\n name: 'Sailfish',\n };\n\n const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/silk/i],\n describe(ua) {\n const browser = {\n name: 'Amazon Silk',\n };\n const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/phantom/i],\n describe(ua) {\n const browser = {\n name: 'PhantomJS',\n };\n const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/slimerjs/i],\n describe(ua) {\n const browser = {\n name: 'SlimerJS',\n };\n const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const browser = {\n name: 'BlackBerry',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const browser = {\n name: 'WebOS Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/bada/i],\n describe(ua) {\n const browser = {\n name: 'Bada',\n };\n const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/tizen/i],\n describe(ua) {\n const browser = {\n name: 'Tizen',\n };\n const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qupzilla/i],\n describe(ua) {\n const browser = {\n name: 'QupZilla',\n };\n const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe(ua) {\n const browser = {\n name: 'Firefox',\n };\n const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/electron/i],\n describe(ua) {\n const browser = {\n name: 'Electron',\n };\n const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MiuiBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Miui',\n };\n const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chromium/i],\n describe(ua) {\n const browser = {\n name: 'Chromium',\n };\n const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chrome|crios|crmo/i],\n describe(ua) {\n const browser = {\n name: 'Chrome',\n };\n const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/GSA/i],\n describe(ua) {\n const browser = {\n name: 'Google Search',\n };\n const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Android Browser */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const browser = {\n name: 'Android Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* PlayStation 4 */\n {\n test: [/playstation 4/i],\n describe(ua) {\n const browser = {\n name: 'PlayStation 4',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Safari */\n {\n test: [/safari|applewebkit/i],\n describe(ua) {\n const browser = {\n name: 'Safari',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Something else */\n {\n test: [/.*/i],\n describe(ua) {\n /* Here we try to make sure that there are explicit details about the device\n * in order to decide what regexp exactly we want to apply\n * (as there is a specific decision based on that conclusion)\n */\n const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n const hasDeviceSpec = ua.search('\\\\(') !== -1;\n const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n return {\n name: Utils.getFirstMatch(regexp, ua),\n version: Utils.getSecondMatch(regexp, ua),\n };\n },\n },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n /* Roku */\n {\n test: [/Roku\\/DVP/],\n describe(ua) {\n const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n return {\n name: OS_MAP.Roku,\n version,\n };\n },\n },\n\n /* Windows Phone */\n {\n test: [/windows phone/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.WindowsPhone,\n version,\n };\n },\n },\n\n /* Windows */\n {\n test: [/windows /i],\n describe(ua) {\n const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n const versionName = Utils.getWindowsVersionName(version);\n\n return {\n name: OS_MAP.Windows,\n version,\n versionName,\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe(ua) {\n const result = {\n name: OS_MAP.iOS,\n };\n const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n if (version) {\n result.version = version;\n }\n return result;\n },\n },\n\n /* macOS */\n {\n test: [/macintosh/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n const versionName = Utils.getMacOSVersionName(version);\n\n const os = {\n name: OS_MAP.MacOS,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* iOS */\n {\n test: [/(ipod|iphone|ipad)/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n return {\n name: OS_MAP.iOS,\n version,\n };\n },\n },\n\n /* Android */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n const versionName = Utils.getAndroidVersionName(version);\n const os = {\n name: OS_MAP.Android,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* WebOS */\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n const os = {\n name: OS_MAP.WebOS,\n };\n\n if (version && version.length) {\n os.version = version;\n }\n return os;\n },\n },\n\n /* BlackBerry */\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n return {\n name: OS_MAP.BlackBerry,\n version,\n };\n },\n },\n\n /* Bada */\n {\n test: [/bada/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Bada,\n version,\n };\n },\n },\n\n /* Tizen */\n {\n test: [/tizen/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Tizen,\n version,\n };\n },\n },\n\n /* Linux */\n {\n test: [/linux/i],\n describe() {\n return {\n name: OS_MAP.Linux,\n };\n },\n },\n\n /* Chrome OS */\n {\n test: [/CrOS/],\n describe() {\n return {\n name: OS_MAP.ChromeOS,\n };\n },\n },\n\n /* Playstation 4 */\n {\n test: [/PlayStation 4/],\n describe(ua) {\n const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.PlayStation4,\n version,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe() {\n return {\n type: 'bot',\n vendor: 'Google',\n };\n },\n },\n\n /* Huawei */\n {\n test: [/huawei/i],\n describe(ua) {\n const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n const platform = {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Huawei',\n };\n if (model) {\n platform.model = model;\n }\n return platform;\n },\n },\n\n /* Nexus Tablet */\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Nexus',\n };\n },\n },\n\n /* iPad */\n {\n test: [/ipad/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Amazon Kindle Fire */\n {\n test: [/kftt build/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n model: 'Kindle Fire HD 7',\n };\n },\n },\n\n /* Another Amazon Tablet with Silk */\n {\n test: [/silk/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n };\n },\n },\n\n /* Tablet */\n {\n test: [/tablet(?! pc)/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* iPod/iPhone */\n {\n test(parser) {\n const iDevice = parser.test(/ipod|iphone/i);\n const likeIDevice = parser.test(/like (ipod|iphone)/i);\n return iDevice && !likeIDevice;\n },\n describe(ua) {\n const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Apple',\n model,\n };\n },\n },\n\n /* Nexus Mobile */\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Nexus',\n };\n },\n },\n\n /* Mobile */\n {\n test: [/[^-]mobi/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* BlackBerry */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'blackberry';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'BlackBerry',\n };\n },\n },\n\n /* Bada */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'bada';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* Windows Phone */\n {\n test(parser) {\n return parser.getBrowserName() === 'windows phone';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Microsoft',\n };\n },\n },\n\n /* Android Tablet */\n {\n test(parser) {\n const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* Android Mobile */\n {\n test(parser) {\n return parser.getOSName(true) === 'android';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* desktop */\n {\n test(parser) {\n return parser.getOSName(true) === 'macos';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n vendor: 'Apple',\n };\n },\n },\n\n /* Windows */\n {\n test(parser) {\n return parser.getOSName(true) === 'windows';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* Linux */\n {\n test(parser) {\n return parser.getOSName(true) === 'linux';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* PlayStation 4 */\n {\n test(parser) {\n return parser.getOSName(true) === 'playstation 4';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n\n /* Roku */\n {\n test(parser) {\n return parser.getOSName(true) === 'roku';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n /* EdgeHTML */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'microsoft edge';\n },\n describe(ua) {\n const isBlinkBased = /\\sedg\\//i.test(ua);\n\n // return blink if it's blink-based one\n if (isBlinkBased) {\n return {\n name: ENGINE_MAP.Blink,\n };\n }\n\n // otherwise match the version and return EdgeHTML\n const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n return {\n name: ENGINE_MAP.EdgeHTML,\n version,\n };\n },\n },\n\n /* Trident */\n {\n test: [/trident/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Trident,\n };\n\n const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Presto */\n {\n test(parser) {\n return parser.test(/presto/i);\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Presto,\n };\n\n const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Gecko */\n {\n test(parser) {\n const isGecko = parser.test(/gecko/i);\n const likeGecko = parser.test(/like gecko/i);\n return isGecko && !likeGecko;\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Gecko,\n };\n\n const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Blink */\n {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe() {\n return {\n name: ENGINE_MAP.Blink,\n };\n },\n },\n\n /* WebKit */\n {\n test: [/(apple)?webkit/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.WebKit,\n };\n\n const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n /**\n * Create instance of Parser\n *\n * @param {String} UA User-Agent string\n * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n * improvements if you need to make a more particular parsing\n * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n *\n * @throw {Error} in case of empty UA String\n *\n * @constructor\n */\n constructor(UA, skipParsing = false) {\n if (UA === void (0) || UA === null || UA === '') {\n throw new Error(\"UserAgent parameter can't be empty\");\n }\n\n this._ua = UA;\n\n /**\n * @typedef ParsedResult\n * @property {Object} browser\n * @property {String|undefined} [browser.name]\n * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n * @property {Object} os\n * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n * @property {Object} platform\n * @property {String|undefined} [platform.type]\n * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n * @property {String|undefined} [platform.vendor] Vendor of the device,\n * like `\"Apple\"` or `\"Samsung\"`\n * @property {String|undefined} [platform.model] Device model,\n * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n * @property {Object} engine\n * @property {String|undefined} [engine.name]\n * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n * @property {String|undefined} [engine.version] String version of the engine\n */\n this.parsedResult = {};\n\n if (skipParsing !== true) {\n this.parse();\n }\n }\n\n /**\n * Get UserAgent string of current Parser instance\n * @return {String} User-Agent String of the current object\n *\n * @public\n */\n getUA() {\n return this._ua;\n }\n\n /**\n * Test a UA string for a regexp\n * @param {RegExp} regex\n * @return {Boolean}\n */\n test(regex) {\n return regex.test(this._ua);\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n */\n parseBrowser() {\n this.parsedResult.browser = {};\n\n const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n if (typeof _browser.test === 'function') {\n return _browser.test(this);\n }\n\n if (_browser.test instanceof Array) {\n return _browser.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (browserDescriptor) {\n this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n }\n\n return this.parsedResult.browser;\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n *\n * @public\n */\n getBrowser() {\n if (this.parsedResult.browser) {\n return this.parsedResult.browser;\n }\n\n return this.parseBrowser();\n }\n\n /**\n * Get browser's name\n * @return {String} Browser's name or an empty string\n *\n * @public\n */\n getBrowserName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getBrowser().name).toLowerCase() || '';\n }\n return this.getBrowser().name || '';\n }\n\n\n /**\n * Get browser's version\n * @return {String} version of browser\n *\n * @public\n */\n getBrowserVersion() {\n return this.getBrowser().version;\n }\n\n /**\n * Get OS\n * @return {Object}\n *\n * @example\n * this.getOS();\n * {\n * name: 'macOS',\n * version: '10.11.12'\n * }\n */\n getOS() {\n if (this.parsedResult.os) {\n return this.parsedResult.os;\n }\n\n return this.parseOS();\n }\n\n /**\n * Parse OS and save it to this.parsedResult.os\n * @return {*|{}}\n */\n parseOS() {\n this.parsedResult.os = {};\n\n const os = Utils.find(osParsersList, (_os) => {\n if (typeof _os.test === 'function') {\n return _os.test(this);\n }\n\n if (_os.test instanceof Array) {\n return _os.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (os) {\n this.parsedResult.os = os.describe(this.getUA());\n }\n\n return this.parsedResult.os;\n }\n\n /**\n * Get OS name\n * @param {Boolean} [toLowerCase] return lower-cased value\n * @return {String} name of the OS — macOS, Windows, Linux, etc.\n */\n getOSName(toLowerCase) {\n const { name } = this.getOS();\n\n if (toLowerCase) {\n return String(name).toLowerCase() || '';\n }\n\n return name || '';\n }\n\n /**\n * Get OS version\n * @return {String} full version with dots ('10.11.12', '5.6', etc)\n */\n getOSVersion() {\n return this.getOS().version;\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n getPlatform() {\n if (this.parsedResult.platform) {\n return this.parsedResult.platform;\n }\n\n return this.parsePlatform();\n }\n\n /**\n * Get platform name\n * @param {Boolean} [toLowerCase=false]\n * @return {*}\n */\n getPlatformType(toLowerCase = false) {\n const { type } = this.getPlatform();\n\n if (toLowerCase) {\n return String(type).toLowerCase() || '';\n }\n\n return type || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parsePlatform() {\n this.parsedResult.platform = {};\n\n const platform = Utils.find(platformParsersList, (_platform) => {\n if (typeof _platform.test === 'function') {\n return _platform.test(this);\n }\n\n if (_platform.test instanceof Array) {\n return _platform.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (platform) {\n this.parsedResult.platform = platform.describe(this.getUA());\n }\n\n return this.parsedResult.platform;\n }\n\n /**\n * Get parsed engine\n * @return {{}}\n */\n getEngine() {\n if (this.parsedResult.engine) {\n return this.parsedResult.engine;\n }\n\n return this.parseEngine();\n }\n\n /**\n * Get engines's name\n * @return {String} Engines's name or an empty string\n *\n * @public\n */\n getEngineName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getEngine().name).toLowerCase() || '';\n }\n return this.getEngine().name || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parseEngine() {\n this.parsedResult.engine = {};\n\n const engine = Utils.find(enginesParsersList, (_engine) => {\n if (typeof _engine.test === 'function') {\n return _engine.test(this);\n }\n\n if (_engine.test instanceof Array) {\n return _engine.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (engine) {\n this.parsedResult.engine = engine.describe(this.getUA());\n }\n\n return this.parsedResult.engine;\n }\n\n /**\n * Parse full information about the browser\n * @returns {Parser}\n */\n parse() {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n this.parseEngine();\n\n return this;\n }\n\n /**\n * Get parsed result\n * @return {ParsedResult}\n */\n getResult() {\n return Utils.assign({}, this.parsedResult);\n }\n\n /**\n * Check if parsed browser matches certain conditions\n *\n * @param {Object} checkTree It's one or two layered object,\n * which can include a platform or an OS on the first layer\n * and should have browsers specs on the bottom-laying layer\n *\n * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n * Returns `undefined` when the browser is no described in the checkTree object.\n *\n * @example\n * const browser = Bowser.getParser(window.navigator.userAgent);\n * if (browser.satisfies({chrome: '>118.01.1322' }))\n * // or with os\n * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n * // or with platforms\n * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n */\n satisfies(checkTree) {\n const platformsAndOSes = {};\n let platformsAndOSCounter = 0;\n const browsers = {};\n let browsersCounter = 0;\n\n const allDefinitions = Object.keys(checkTree);\n\n allDefinitions.forEach((key) => {\n const currentDefinition = checkTree[key];\n if (typeof currentDefinition === 'string') {\n browsers[key] = currentDefinition;\n browsersCounter += 1;\n } else if (typeof currentDefinition === 'object') {\n platformsAndOSes[key] = currentDefinition;\n platformsAndOSCounter += 1;\n }\n });\n\n if (platformsAndOSCounter > 0) {\n const platformsAndOSNames = Object.keys(platformsAndOSes);\n const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n if (OSMatchingDefinition) {\n const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n if (osResult !== void 0) {\n return osResult;\n }\n }\n\n const platformMatchingDefinition = Utils.find(\n platformsAndOSNames,\n name => (this.isPlatform(name)),\n );\n if (platformMatchingDefinition) {\n const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n if (platformResult !== void 0) {\n return platformResult;\n }\n }\n }\n\n if (browsersCounter > 0) {\n const browserNames = Object.keys(browsers);\n const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n if (matchingDefinition !== void 0) {\n return this.compareVersion(browsers[matchingDefinition]);\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the browser name equals the passed string\n * @param browserName The string to compare with the browser name\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {boolean}\n */\n isBrowser(browserName, includingAlias = false) {\n const defaultBrowserName = this.getBrowserName().toLowerCase();\n let browserNameLower = browserName.toLowerCase();\n const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n if (includingAlias && alias) {\n browserNameLower = alias.toLowerCase();\n }\n return browserNameLower === defaultBrowserName;\n }\n\n compareVersion(version) {\n let expectedResults = [0];\n let comparableVersion = version;\n let isLoose = false;\n\n const currentBrowserVersion = this.getBrowserVersion();\n\n if (typeof currentBrowserVersion !== 'string') {\n return void 0;\n }\n\n if (version[0] === '>' || version[0] === '<') {\n comparableVersion = version.substr(1);\n if (version[1] === '=') {\n isLoose = true;\n comparableVersion = version.substr(2);\n } else {\n expectedResults = [];\n }\n if (version[0] === '>') {\n expectedResults.push(1);\n } else {\n expectedResults.push(-1);\n }\n } else if (version[0] === '=') {\n comparableVersion = version.substr(1);\n } else if (version[0] === '~') {\n isLoose = true;\n comparableVersion = version.substr(1);\n }\n\n return expectedResults.indexOf(\n Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n ) > -1;\n }\n\n isOS(osName) {\n return this.getOSName(true) === String(osName).toLowerCase();\n }\n\n isPlatform(platformType) {\n return this.getPlatformType(true) === String(platformType).toLowerCase();\n }\n\n isEngine(engineName) {\n return this.getEngineName(true) === String(engineName).toLowerCase();\n }\n\n /**\n * Is anything? Check if the browser is called \"anything\",\n * the OS called \"anything\" or the platform called \"anything\"\n * @param {String} anything\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {Boolean}\n */\n is(anything, includingAlias = false) {\n return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n || this.isPlatform(anything);\n }\n\n /**\n * Check if any of the given values satisfies this.is(anything)\n * @param {String[]} anythings\n * @returns {Boolean}\n */\n some(anythings = []) {\n return anythings.some(anything => this.is(anything));\n }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n BROWSER_MAP,\n ENGINE_MAP,\n OS_MAP,\n PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n /**\n * Creates a {@link Parser} instance\n *\n * @param {String} UA UserAgent string\n * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n * explicitly. Same as `skipParsing` for {@link Parser}.\n * @returns {Parser}\n * @throws {Error} when UA is not a String\n *\n * @example\n * const parser = Bowser.getParser(window.navigator.userAgent);\n * const result = parser.getResult();\n */\n static getParser(UA, skipParsing = false) {\n if (typeof UA !== 'string') {\n throw new Error('UserAgent should be a string');\n }\n return new Parser(UA, skipParsing);\n }\n\n /**\n * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n *\n * @param UA\n * @return {ParsedResult}\n *\n * @example\n * const result = Bowser.parse(window.navigator.userAgent);\n */\n static parse(UA) {\n return (new Parser(UA)).getResult();\n }\n\n static get BROWSER_MAP() {\n return BROWSER_MAP;\n }\n\n static get ENGINE_MAP() {\n return ENGINE_MAP;\n }\n\n static get OS_MAP() {\n return OS_MAP;\n }\n\n static get PLATFORMS_MAP() {\n return PLATFORMS_MAP;\n }\n}\n\nexport default Bowser;\n","import bowser from \"bowser\";\nexport const defaultUserAgent = ({ serviceId, clientVersion }) => async () => {\n const parsedUA = typeof window !== \"undefined\" && window?.navigator?.userAgent\n ? bowser.parse(window.navigator.userAgent)\n : undefined;\n const sections = [\n [\"aws-sdk-js\", clientVersion],\n [\"ua\", \"2.0\"],\n [`os/${parsedUA?.os?.name || \"other\"}`, parsedUA?.os?.version],\n [\"lang/js\"],\n [\"md/browser\", `${parsedUA?.browser?.name ?? \"unknown\"}_${parsedUA?.browser?.version ?? \"unknown\"}`],\n ];\n if (serviceId) {\n sections.push([`api/${serviceId}`, clientVersion]);\n }\n return sections;\n};\n","export const invalidProvider = (message) => () => Promise.reject(message);\n","const TEXT_ENCODER = typeof TextEncoder == \"function\" ? new TextEncoder() : null;\nexport const calculateBodyLength = (body) => {\n if (typeof body === \"string\") {\n if (TEXT_ENCODER) {\n return TEXT_ENCODER.encode(body).byteLength;\n }\n let len = body.length;\n for (let i = len - 1; i >= 0; i--) {\n const code = body.charCodeAt(i);\n if (code > 0x7f && code <= 0x7ff)\n len++;\n else if (code > 0x7ff && code <= 0xffff)\n len += 2;\n if (code >= 0xdc00 && code <= 0xdfff)\n i--;\n }\n return len;\n }\n else if (typeof body.byteLength === \"number\") {\n return body.byteLength;\n }\n else if (typeof body.size === \"number\") {\n return body.size;\n }\n throw new Error(`Body Length computation failed for ${body}`);\n};\n","const s = \"required\", t = \"fn\", u = \"argv\", v = \"ref\";\nconst a = true, b = \"isSet\", c = \"booleanEquals\", d = \"error\", e = \"endpoint\", f = \"tree\", g = \"PartitionResult\", h = { [s]: false, \"type\": \"String\" }, i = { [s]: true, \"default\": false, \"type\": \"Boolean\" }, j = { [v]: \"Endpoint\" }, k = { [t]: c, [u]: [{ [v]: \"UseFIPS\" }, true] }, l = { [t]: c, [u]: [{ [v]: \"UseDualStack\" }, true] }, m = {}, n = { [t]: \"getAttr\", [u]: [{ [v]: g }, \"supportsFIPS\"] }, o = { [t]: c, [u]: [true, { [t]: \"getAttr\", [u]: [{ [v]: g }, \"supportsDualStack\"] }] }, p = [k], q = [l], r = [{ [v]: \"Region\" }];\nconst _data = { version: \"1.0\", parameters: { Region: h, UseDualStack: i, UseFIPS: i, Endpoint: h }, rules: [{ conditions: [{ [t]: b, [u]: [j] }], rules: [{ conditions: p, error: \"Invalid Configuration: FIPS and custom endpoint are not supported\", type: d }, { conditions: q, error: \"Invalid Configuration: Dualstack and custom endpoint are not supported\", type: d }, { endpoint: { url: j, properties: m, headers: m }, type: e }], type: f }, { conditions: [{ [t]: b, [u]: r }], rules: [{ conditions: [{ [t]: \"aws.partition\", [u]: r, assign: g }], rules: [{ conditions: [k, l], rules: [{ conditions: [{ [t]: c, [u]: [a, n] }, o], rules: [{ endpoint: { url: \"https://messaging-chime-fips.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: m, headers: m }, type: e }], type: f }, { error: \"FIPS and DualStack are enabled, but this partition does not support one or both\", type: d }], type: f }, { conditions: p, rules: [{ conditions: [{ [t]: c, [u]: [n, a] }], rules: [{ endpoint: { url: \"https://messaging-chime-fips.{Region}.{PartitionResult#dnsSuffix}\", properties: m, headers: m }, type: e }], type: f }, { error: \"FIPS is enabled but this partition does not support FIPS\", type: d }], type: f }, { conditions: q, rules: [{ conditions: [o], rules: [{ endpoint: { url: \"https://messaging-chime.{Region}.{PartitionResult#dualStackDnsSuffix}\", properties: m, headers: m }, type: e }], type: f }, { error: \"DualStack is enabled but this partition does not support DualStack\", type: d }], type: f }, { endpoint: { url: \"https://messaging-chime.{Region}.{PartitionResult#dnsSuffix}\", properties: m, headers: m }, type: e }], type: f }], type: f }, { error: \"Invalid Configuration: Missing Region\", type: d }] };\nexport const ruleSet = _data;\n","import { resolveEndpoint } from \"@smithy/util-endpoints\";\nimport { ruleSet } from \"./ruleset\";\nexport const defaultEndpointResolver = (endpointParams, context = {}) => {\n return resolveEndpoint(ruleSet, {\n endpointParams: endpointParams,\n logger: context.logger,\n });\n};\n","import { NoOpLogger } from \"@smithy/smithy-client\";\nimport { parseUrl } from \"@smithy/url-parser\";\nimport { fromBase64, toBase64 } from \"@smithy/util-base64\";\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\";\nimport { defaultEndpointResolver } from \"./endpoint/endpointResolver\";\nexport const getRuntimeConfig = (config) => {\n return {\n apiVersion: \"2021-05-15\",\n base64Decoder: config?.base64Decoder ?? fromBase64,\n base64Encoder: config?.base64Encoder ?? toBase64,\n disableHostPrefix: config?.disableHostPrefix ?? false,\n endpointProvider: config?.endpointProvider ?? defaultEndpointResolver,\n extensions: config?.extensions ?? [],\n logger: config?.logger ?? new NoOpLogger(),\n serviceId: config?.serviceId ?? \"Chime SDK Messaging\",\n urlParser: config?.urlParser ?? parseUrl,\n utf8Decoder: config?.utf8Decoder ?? fromUtf8,\n utf8Encoder: config?.utf8Encoder ?? toUtf8,\n };\n};\n","export const DEFAULTS_MODE_OPTIONS = [\"in-region\", \"cross-region\", \"mobile\", \"standard\", \"legacy\"];\n","import { memoize } from \"@smithy/property-provider\";\nimport bowser from \"bowser\";\nimport { DEFAULTS_MODE_OPTIONS } from \"./constants\";\nexport const resolveDefaultsModeConfig = ({ defaultsMode, } = {}) => memoize(async () => {\n const mode = typeof defaultsMode === \"function\" ? await defaultsMode() : defaultsMode;\n switch (mode?.toLowerCase()) {\n case \"auto\":\n return Promise.resolve(isMobileBrowser() ? \"mobile\" : \"standard\");\n case \"mobile\":\n case \"in-region\":\n case \"cross-region\":\n case \"standard\":\n case \"legacy\":\n return Promise.resolve(mode?.toLocaleLowerCase());\n case undefined:\n return Promise.resolve(\"legacy\");\n default:\n throw new Error(`Invalid parameter for \"defaultsMode\", expect ${DEFAULTS_MODE_OPTIONS.join(\", \")}, got ${mode}`);\n }\n});\nconst isMobileBrowser = () => {\n const parsedUA = typeof window !== \"undefined\" && window?.navigator?.userAgent\n ? bowser.parse(window.navigator.userAgent)\n : undefined;\n const platform = parsedUA?.platform?.type;\n return platform === \"tablet\" || platform === \"mobile\";\n};\n","import packageInfo from \"../package.json\";\nimport { Sha256 } from \"@aws-crypto/sha256-browser\";\nimport { defaultUserAgent } from \"@aws-sdk/util-user-agent-browser\";\nimport { DEFAULT_USE_DUALSTACK_ENDPOINT, DEFAULT_USE_FIPS_ENDPOINT } from \"@smithy/config-resolver\";\nimport { FetchHttpHandler as RequestHandler, streamCollector } from \"@smithy/fetch-http-handler\";\nimport { invalidProvider } from \"@smithy/invalid-dependency\";\nimport { calculateBodyLength } from \"@smithy/util-body-length-browser\";\nimport { DEFAULT_MAX_ATTEMPTS, DEFAULT_RETRY_MODE } from \"@smithy/util-retry\";\nimport { getRuntimeConfig as getSharedRuntimeConfig } from \"./runtimeConfig.shared\";\nimport { loadConfigsForDefaultMode } from \"@smithy/smithy-client\";\nimport { resolveDefaultsModeConfig } from \"@smithy/util-defaults-mode-browser\";\nexport const getRuntimeConfig = (config) => {\n const defaultsMode = resolveDefaultsModeConfig(config);\n const defaultConfigProvider = () => defaultsMode().then(loadConfigsForDefaultMode);\n const clientSharedValues = getSharedRuntimeConfig(config);\n return {\n ...clientSharedValues,\n ...config,\n runtime: \"browser\",\n defaultsMode,\n bodyLengthChecker: config?.bodyLengthChecker ?? calculateBodyLength,\n credentialDefaultProvider: config?.credentialDefaultProvider ?? ((_) => () => Promise.reject(new Error(\"Credential is missing\"))),\n defaultUserAgentProvider: config?.defaultUserAgentProvider ??\n defaultUserAgent({ serviceId: clientSharedValues.serviceId, clientVersion: packageInfo.version }),\n maxAttempts: config?.maxAttempts ?? DEFAULT_MAX_ATTEMPTS,\n region: config?.region ?? invalidProvider(\"Region is missing\"),\n requestHandler: config?.requestHandler ?? new RequestHandler(defaultConfigProvider),\n retryMode: config?.retryMode ?? (async () => (await defaultConfigProvider()).retryMode || DEFAULT_RETRY_MODE),\n sha256: config?.sha256 ?? Sha256,\n streamCollector: config?.streamCollector ?? streamCollector,\n useDualstackEndpoint: config?.useDualstackEndpoint ?? (() => Promise.resolve(DEFAULT_USE_DUALSTACK_ENDPOINT)),\n useFipsEndpoint: config?.useFipsEndpoint ?? (() => Promise.resolve(DEFAULT_USE_FIPS_ENDPOINT)),\n };\n};\n","export const getAwsRegionExtensionConfiguration = (runtimeConfig) => {\n let runtimeConfigRegion = async () => {\n if (runtimeConfig.region === undefined) {\n throw new Error(\"Region is missing from runtimeConfig\");\n }\n const region = runtimeConfig.region;\n if (typeof region === \"string\") {\n return region;\n }\n return region();\n };\n return {\n setRegion(region) {\n runtimeConfigRegion = region;\n },\n region() {\n return runtimeConfigRegion;\n },\n };\n};\nexport const resolveAwsRegionExtensionConfiguration = (awsRegionExtensionConfiguration) => {\n return {\n region: awsRegionExtensionConfiguration.region(),\n };\n};\n","import { getAwsRegionExtensionConfiguration, resolveAwsRegionExtensionConfiguration, } from \"@aws-sdk/region-config-resolver\";\nimport { getHttpHandlerExtensionConfiguration, resolveHttpHandlerRuntimeConfig } from \"@smithy/protocol-http\";\nimport { getDefaultExtensionConfiguration, resolveDefaultRuntimeConfig } from \"@smithy/smithy-client\";\nconst asPartial = (t) => t;\nexport const resolveRuntimeExtensions = (runtimeConfig, extensions) => {\n const extensionConfiguration = {\n ...asPartial(getAwsRegionExtensionConfiguration(runtimeConfig)),\n ...asPartial(getDefaultExtensionConfiguration(runtimeConfig)),\n ...asPartial(getHttpHandlerExtensionConfiguration(runtimeConfig)),\n };\n extensions.forEach((extension) => extension.configure(extensionConfiguration));\n return {\n ...runtimeConfig,\n ...resolveAwsRegionExtensionConfiguration(extensionConfiguration),\n ...resolveDefaultRuntimeConfig(extensionConfiguration),\n ...resolveHttpHandlerRuntimeConfig(extensionConfiguration),\n };\n};\n","import { getHostHeaderPlugin, resolveHostHeaderConfig, } from \"@aws-sdk/middleware-host-header\";\nimport { getLoggerPlugin } from \"@aws-sdk/middleware-logger\";\nimport { getRecursionDetectionPlugin } from \"@aws-sdk/middleware-recursion-detection\";\nimport { getAwsAuthPlugin, resolveAwsAuthConfig, } from \"@aws-sdk/middleware-signing\";\nimport { getUserAgentPlugin, resolveUserAgentConfig, } from \"@aws-sdk/middleware-user-agent\";\nimport { resolveRegionConfig } from \"@smithy/config-resolver\";\nimport { getContentLengthPlugin } from \"@smithy/middleware-content-length\";\nimport { resolveEndpointConfig } from \"@smithy/middleware-endpoint\";\nimport { getRetryPlugin, resolveRetryConfig } from \"@smithy/middleware-retry\";\nimport { Client as __Client, } from \"@smithy/smithy-client\";\nimport { resolveClientEndpointParameters, } from \"./endpoint/EndpointParameters\";\nimport { getRuntimeConfig as __getRuntimeConfig } from \"./runtimeConfig\";\nimport { resolveRuntimeExtensions } from \"./runtimeExtensions\";\nexport { __Client };\nexport class ChimeSDKMessagingClient extends __Client {\n constructor(...[configuration]) {\n const _config_0 = __getRuntimeConfig(configuration || {});\n const _config_1 = resolveClientEndpointParameters(_config_0);\n const _config_2 = resolveRegionConfig(_config_1);\n const _config_3 = resolveEndpointConfig(_config_2);\n const _config_4 = resolveRetryConfig(_config_3);\n const _config_5 = resolveHostHeaderConfig(_config_4);\n const _config_6 = resolveAwsAuthConfig(_config_5);\n const _config_7 = resolveUserAgentConfig(_config_6);\n const _config_8 = resolveRuntimeExtensions(_config_7, configuration?.extensions || []);\n super(_config_8);\n this.config = _config_8;\n this.middlewareStack.use(getRetryPlugin(this.config));\n this.middlewareStack.use(getContentLengthPlugin(this.config));\n this.middlewareStack.use(getHostHeaderPlugin(this.config));\n this.middlewareStack.use(getLoggerPlugin(this.config));\n this.middlewareStack.use(getRecursionDetectionPlugin(this.config));\n this.middlewareStack.use(getAwsAuthPlugin(this.config));\n this.middlewareStack.use(getUserAgentPlugin(this.config));\n }\n destroy() {\n super.destroy();\n }\n}\n","import { HttpRequest } from \"@smithy/protocol-http\";\nimport { resolvedPath } from \"@smithy/smithy-client\";\nexport function requestBuilder(input, context) {\n return new RequestBuilder(input, context);\n}\nexport class RequestBuilder {\n constructor(input, context) {\n this.input = input;\n this.context = context;\n this.query = {};\n this.method = \"\";\n this.headers = {};\n this.path = \"\";\n this.body = null;\n this.hostname = \"\";\n this.resolvePathStack = [];\n }\n async build() {\n const { hostname, protocol = \"https\", port, path: basePath } = await this.context.endpoint();\n this.path = basePath;\n for (const resolvePath of this.resolvePathStack) {\n resolvePath(this.path);\n }\n return new HttpRequest({\n protocol,\n hostname: this.hostname || hostname,\n port,\n method: this.method,\n path: this.path,\n query: this.query,\n body: this.body,\n headers: this.headers,\n });\n }\n hn(hostname) {\n this.hostname = hostname;\n return this;\n }\n bp(uriLabel) {\n this.resolvePathStack.push((basePath) => {\n this.path = `${basePath?.endsWith(\"/\") ? basePath.slice(0, -1) : basePath || \"\"}` + uriLabel;\n });\n return this;\n }\n p(memberName, labelValueProvider, uriLabel, isGreedyLabel) {\n this.resolvePathStack.push((path) => {\n this.path = resolvedPath(path, this.input, memberName, labelValueProvider, uriLabel, isGreedyLabel);\n });\n return this;\n }\n h(headers) {\n this.headers = headers;\n return this;\n }\n q(query) {\n this.query = query;\n return this;\n }\n b(body) {\n this.body = body;\n return this;\n }\n m(method) {\n this.method = method;\n return this;\n }\n}\n","import { endpointMiddlewareOptions } from \"@smithy/middleware-endpoint\";\nimport { httpAuthSchemeMiddleware } from \"./httpAuthSchemeMiddleware\";\nexport const httpAuthSchemeEndpointRuleSetMiddlewareOptions = {\n step: \"serialize\",\n tags: [\"HTTP_AUTH_SCHEME\"],\n name: \"httpAuthSchemeMiddleware\",\n override: true,\n relation: \"before\",\n toMiddleware: endpointMiddlewareOptions.name,\n};\nexport const getHttpAuthSchemeEndpointRuleSetPlugin = (config, { httpAuthSchemeParametersProvider, identityProviderConfigProvider, }) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(httpAuthSchemeMiddleware(config, {\n httpAuthSchemeParametersProvider,\n identityProviderConfigProvider,\n }), httpAuthSchemeEndpointRuleSetMiddlewareOptions);\n },\n});\n","import { serializerMiddlewareOption } from \"@smithy/middleware-serde\";\nimport { httpAuthSchemeMiddleware } from \"./httpAuthSchemeMiddleware\";\nexport const httpAuthSchemeMiddlewareOptions = {\n step: \"serialize\",\n tags: [\"HTTP_AUTH_SCHEME\"],\n name: \"httpAuthSchemeMiddleware\",\n override: true,\n relation: \"before\",\n toMiddleware: serializerMiddlewareOption.name,\n};\nexport const getHttpAuthSchemePlugin = (config, { httpAuthSchemeParametersProvider, identityProviderConfigProvider, }) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(httpAuthSchemeMiddleware(config, {\n httpAuthSchemeParametersProvider,\n identityProviderConfigProvider,\n }), httpAuthSchemeMiddlewareOptions);\n },\n});\n","import { retryMiddlewareOptions } from \"@smithy/middleware-retry\";\nimport { httpSigningMiddleware } from \"./httpSigningMiddleware\";\nexport const httpSigningMiddlewareOptions = {\n step: \"finalizeRequest\",\n tags: [\"HTTP_SIGNING\"],\n name: \"httpSigningMiddleware\",\n aliases: [\"apiKeyMiddleware\", \"tokenMiddleware\", \"awsAuthMiddleware\"],\n override: true,\n relation: \"after\",\n toMiddleware: retryMiddlewareOptions.name,\n};\nexport const getHttpSigningPlugin = (config) => ({\n applyToStack: (clientStack) => {\n clientStack.addRelativeTo(httpSigningMiddleware(config), httpSigningMiddlewareOptions);\n },\n});\n","const makePagedClientRequest = async (CommandCtor, client, input, ...args) => {\n return await client.send(new CommandCtor(input), ...args);\n};\nexport function createPaginator(ClientCtor, CommandCtor, inputTokenName, outputTokenName, pageSizeTokenName) {\n return async function* paginateOperation(config, input, ...additionalArguments) {\n let token = config.startingToken || undefined;\n let hasNext = true;\n let page;\n while (hasNext) {\n input[inputTokenName] = token;\n if (pageSizeTokenName) {\n input[pageSizeTokenName] = input[pageSizeTokenName] ?? config.pageSize;\n }\n if (config.client instanceof ClientCtor) {\n page = await makePagedClientRequest(CommandCtor, config.client, input, ...additionalArguments);\n }\n else {\n throw new Error(`Invalid client, expected instance of ${ClientCtor.name}`);\n }\n yield page;\n const prevToken = token;\n token = page[outputTokenName];\n hasNext = !!(token && (!config.stopOnSameToken || token !== prevToken));\n }\n return undefined;\n };\n}\n","import { ServiceException as __ServiceException, } from \"@smithy/smithy-client\";\nexport { __ServiceException };\nexport class ChimeSDKMessagingServiceException extends __ServiceException {\n constructor(options) {\n super(options);\n Object.setPrototypeOf(this, ChimeSDKMessagingServiceException.prototype);\n }\n}\n","import { SENSITIVE_STRING } from \"@smithy/smithy-client\";\nimport { ChimeSDKMessagingServiceException as __BaseException } from \"./ChimeSDKMessagingServiceException\";\nexport const AllowNotifications = {\n ALL: \"ALL\",\n FILTERED: \"FILTERED\",\n NONE: \"NONE\",\n};\nexport const ChannelMembershipType = {\n DEFAULT: \"DEFAULT\",\n HIDDEN: \"HIDDEN\",\n};\nexport const ErrorCode = {\n AccessDenied: \"AccessDenied\",\n BadRequest: \"BadRequest\",\n Conflict: \"Conflict\",\n Forbidden: \"Forbidden\",\n NotFound: \"NotFound\",\n PhoneNumberAssociationsExist: \"PhoneNumberAssociationsExist\",\n PreconditionFailed: \"PreconditionFailed\",\n ResourceLimitExceeded: \"ResourceLimitExceeded\",\n ServiceFailure: \"ServiceFailure\",\n ServiceUnavailable: \"ServiceUnavailable\",\n Throttled: \"Throttled\",\n Throttling: \"Throttling\",\n Unauthorized: \"Unauthorized\",\n Unprocessable: \"Unprocessable\",\n VoiceConnectorGroupAssociationsExist: \"VoiceConnectorGroupAssociationsExist\",\n};\nexport class BadRequestException extends __BaseException {\n constructor(opts) {\n super({\n name: \"BadRequestException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"BadRequestException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, BadRequestException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ConflictException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ConflictException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ConflictException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ConflictException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ForbiddenException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ForbiddenException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ForbiddenException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ForbiddenException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class NotFoundException extends __BaseException {\n constructor(opts) {\n super({\n name: \"NotFoundException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"NotFoundException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, NotFoundException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ServiceFailureException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ServiceFailureException\",\n $fault: \"server\",\n ...opts,\n });\n this.name = \"ServiceFailureException\";\n this.$fault = \"server\";\n Object.setPrototypeOf(this, ServiceFailureException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ServiceUnavailableException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ServiceUnavailableException\",\n $fault: \"server\",\n ...opts,\n });\n this.name = \"ServiceUnavailableException\";\n this.$fault = \"server\";\n Object.setPrototypeOf(this, ServiceUnavailableException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ThrottledClientException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ThrottledClientException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ThrottledClientException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ThrottledClientException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class UnauthorizedClientException extends __BaseException {\n constructor(opts) {\n super({\n name: \"UnauthorizedClientException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"UnauthorizedClientException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, UnauthorizedClientException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport class ResourceLimitExceededException extends __BaseException {\n constructor(opts) {\n super({\n name: \"ResourceLimitExceededException\",\n $fault: \"client\",\n ...opts,\n });\n this.name = \"ResourceLimitExceededException\";\n this.$fault = \"client\";\n Object.setPrototypeOf(this, ResourceLimitExceededException.prototype);\n this.Code = opts.Code;\n this.Message = opts.Message;\n }\n}\nexport const ExpirationCriterion = {\n CREATED_TIMESTAMP: \"CREATED_TIMESTAMP\",\n LAST_MESSAGE_TIMESTAMP: \"LAST_MESSAGE_TIMESTAMP\",\n};\nexport const ChannelMode = {\n RESTRICTED: \"RESTRICTED\",\n UNRESTRICTED: \"UNRESTRICTED\",\n};\nexport const ChannelPrivacy = {\n PRIVATE: \"PRIVATE\",\n PUBLIC: \"PUBLIC\",\n};\nexport const InvocationType = {\n ASYNC: \"ASYNC\",\n};\nexport const FallbackAction = {\n ABORT: \"ABORT\",\n CONTINUE: \"CONTINUE\",\n};\nexport const PushNotificationType = {\n DEFAULT: \"DEFAULT\",\n VOIP: \"VOIP\",\n};\nexport const ChannelMessagePersistenceType = {\n NON_PERSISTENT: \"NON_PERSISTENT\",\n PERSISTENT: \"PERSISTENT\",\n};\nexport const ChannelMessageStatus = {\n DENIED: \"DENIED\",\n FAILED: \"FAILED\",\n PENDING: \"PENDING\",\n SENT: \"SENT\",\n};\nexport const ChannelMessageType = {\n CONTROL: \"CONTROL\",\n STANDARD: \"STANDARD\",\n};\nexport const MessagingDataType = {\n Channel: \"Channel\",\n ChannelMessage: \"ChannelMessage\",\n};\nexport const SortOrder = {\n ASCENDING: \"ASCENDING\",\n DESCENDING: \"DESCENDING\",\n};\nexport const SearchFieldKey = {\n MEMBERS: \"MEMBERS\",\n};\nexport const SearchFieldOperator = {\n EQUALS: \"EQUALS\",\n INCLUDES: \"INCLUDES\",\n};\nexport const IdentityFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n});\nexport const BatchChannelMembershipsFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.InvitedBy && { InvitedBy: IdentityFilterSensitiveLog(obj.InvitedBy) }),\n ...(obj.Members && { Members: obj.Members.map((item) => IdentityFilterSensitiveLog(item)) }),\n});\nexport const BatchCreateChannelMembershipResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.BatchChannelMemberships && {\n BatchChannelMemberships: BatchChannelMembershipsFilterSensitiveLog(obj.BatchChannelMemberships),\n }),\n});\nexport const ChannelFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.CreatedBy && { CreatedBy: IdentityFilterSensitiveLog(obj.CreatedBy) }),\n});\nexport const ChannelAssociatedWithFlowSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n});\nexport const ChannelBanFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n ...(obj.CreatedBy && { CreatedBy: IdentityFilterSensitiveLog(obj.CreatedBy) }),\n});\nexport const ChannelBanSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n});\nexport const ProcessorFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n});\nexport const ChannelFlowFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Processors && { Processors: obj.Processors.map((item) => ProcessorFilterSensitiveLog(item)) }),\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n});\nexport const MessageAttributeValueFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.StringValues && { StringValues: SENSITIVE_STRING }),\n});\nexport const PushNotificationConfigurationFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Title && { Title: SENSITIVE_STRING }),\n ...(obj.Body && { Body: SENSITIVE_STRING }),\n});\nexport const ChannelMessageCallbackFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Content && { Content: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.PushNotification && {\n PushNotification: PushNotificationConfigurationFilterSensitiveLog(obj.PushNotification),\n }),\n ...(obj.MessageAttributes && {\n MessageAttributes: Object.entries(obj.MessageAttributes).reduce((acc, [key, value]) => ((acc[key] = MessageAttributeValueFilterSensitiveLog(value)), acc), {}),\n }),\n ...(obj.ContentType && { ContentType: SENSITIVE_STRING }),\n});\nexport const ChannelFlowCallbackRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMessage && { ChannelMessage: ChannelMessageCallbackFilterSensitiveLog(obj.ChannelMessage) }),\n});\nexport const ChannelFlowSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Processors && { Processors: obj.Processors.map((item) => ProcessorFilterSensitiveLog(item)) }),\n});\nexport const ChannelMembershipFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.InvitedBy && { InvitedBy: IdentityFilterSensitiveLog(obj.InvitedBy) }),\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n});\nexport const ChannelSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n});\nexport const ChannelMembershipForAppInstanceUserSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelSummary && { ChannelSummary: ChannelSummaryFilterSensitiveLog(obj.ChannelSummary) }),\n});\nexport const PushNotificationPreferencesFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.FilterRule && { FilterRule: SENSITIVE_STRING }),\n});\nexport const ChannelMembershipPreferencesFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.PushNotifications && {\n PushNotifications: PushNotificationPreferencesFilterSensitiveLog(obj.PushNotifications),\n }),\n});\nexport const ChannelMembershipSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n});\nexport const ChannelMessageFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Content && { Content: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.Sender && { Sender: IdentityFilterSensitiveLog(obj.Sender) }),\n ...(obj.MessageAttributes && {\n MessageAttributes: Object.entries(obj.MessageAttributes).reduce((acc, [key, value]) => ((acc[key] = MessageAttributeValueFilterSensitiveLog(value)), acc), {}),\n }),\n ...(obj.ContentType && { ContentType: SENSITIVE_STRING }),\n});\nexport const ChannelMessageSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Content && { Content: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.Sender && { Sender: IdentityFilterSensitiveLog(obj.Sender) }),\n ...(obj.MessageAttributes && {\n MessageAttributes: Object.entries(obj.MessageAttributes).reduce((acc, [key, value]) => ((acc[key] = MessageAttributeValueFilterSensitiveLog(value)), acc), {}),\n }),\n ...(obj.ContentType && { ContentType: SENSITIVE_STRING }),\n});\nexport const ChannelModeratedByAppInstanceUserSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelSummary && { ChannelSummary: ChannelSummaryFilterSensitiveLog(obj.ChannelSummary) }),\n});\nexport const ChannelModeratorFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Moderator && { Moderator: IdentityFilterSensitiveLog(obj.Moderator) }),\n ...(obj.CreatedBy && { CreatedBy: IdentityFilterSensitiveLog(obj.CreatedBy) }),\n});\nexport const ChannelModeratorSummaryFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Moderator && { Moderator: IdentityFilterSensitiveLog(obj.Moderator) }),\n});\nexport const TagFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Key && { Key: SENSITIVE_STRING }),\n ...(obj.Value && { Value: SENSITIVE_STRING }),\n});\nexport const CreateChannelRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.ClientRequestToken && { ClientRequestToken: SENSITIVE_STRING }),\n ...(obj.Tags && { Tags: obj.Tags.map((item) => TagFilterSensitiveLog(item)) }),\n ...(obj.ChannelId && { ChannelId: SENSITIVE_STRING }),\n});\nexport const CreateChannelBanResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n});\nexport const CreateChannelFlowRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Processors && { Processors: obj.Processors.map((item) => ProcessorFilterSensitiveLog(item)) }),\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Tags && { Tags: obj.Tags.map((item) => TagFilterSensitiveLog(item)) }),\n ...(obj.ClientRequestToken && { ClientRequestToken: SENSITIVE_STRING }),\n});\nexport const CreateChannelMembershipResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n});\nexport const CreateChannelModeratorResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelModerator && { ChannelModerator: IdentityFilterSensitiveLog(obj.ChannelModerator) }),\n});\nexport const DescribeChannelResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channel && { Channel: ChannelFilterSensitiveLog(obj.Channel) }),\n});\nexport const DescribeChannelBanResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelBan && { ChannelBan: ChannelBanFilterSensitiveLog(obj.ChannelBan) }),\n});\nexport const DescribeChannelFlowResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelFlow && { ChannelFlow: ChannelFlowFilterSensitiveLog(obj.ChannelFlow) }),\n});\nexport const DescribeChannelMembershipResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMembership && { ChannelMembership: ChannelMembershipFilterSensitiveLog(obj.ChannelMembership) }),\n});\nexport const DescribeChannelMembershipForAppInstanceUserResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMembership && {\n ChannelMembership: ChannelMembershipForAppInstanceUserSummaryFilterSensitiveLog(obj.ChannelMembership),\n }),\n});\nexport const DescribeChannelModeratedByAppInstanceUserResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channel && { Channel: ChannelModeratedByAppInstanceUserSummaryFilterSensitiveLog(obj.Channel) }),\n});\nexport const DescribeChannelModeratorResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelModerator && { ChannelModerator: ChannelModeratorFilterSensitiveLog(obj.ChannelModerator) }),\n});\nexport const GetChannelMembershipPreferencesResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n ...(obj.Preferences && { Preferences: ChannelMembershipPreferencesFilterSensitiveLog(obj.Preferences) }),\n});\nexport const GetChannelMessageResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMessage && { ChannelMessage: ChannelMessageFilterSensitiveLog(obj.ChannelMessage) }),\n});\nexport const ListChannelBansRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelBansResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n ...(obj.ChannelBans && { ChannelBans: obj.ChannelBans.map((item) => ChannelBanSummaryFilterSensitiveLog(item)) }),\n});\nexport const ListChannelFlowsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelFlowsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelFlows && { ChannelFlows: obj.ChannelFlows.map((item) => ChannelFlowSummaryFilterSensitiveLog(item)) }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMembershipsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMembershipsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMemberships && {\n ChannelMemberships: obj.ChannelMemberships.map((item) => ChannelMembershipSummaryFilterSensitiveLog(item)),\n }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMembershipsForAppInstanceUserRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMembershipsForAppInstanceUserResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.ChannelMemberships && {\n ChannelMemberships: obj.ChannelMemberships.map((item) => ChannelMembershipForAppInstanceUserSummaryFilterSensitiveLog(item)),\n }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMessagesRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelMessagesResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n ...(obj.ChannelMessages && {\n ChannelMessages: obj.ChannelMessages.map((item) => ChannelMessageSummaryFilterSensitiveLog(item)),\n }),\n});\nexport const ListChannelModeratorsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelModeratorsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n ...(obj.ChannelModerators && {\n ChannelModerators: obj.ChannelModerators.map((item) => ChannelModeratorSummaryFilterSensitiveLog(item)),\n }),\n});\nexport const ListChannelsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channels && { Channels: obj.Channels.map((item) => ChannelSummaryFilterSensitiveLog(item)) }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelsAssociatedWithChannelFlowRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelsAssociatedWithChannelFlowResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channels && {\n Channels: obj.Channels.map((item) => ChannelAssociatedWithFlowSummaryFilterSensitiveLog(item)),\n }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelsModeratedByAppInstanceUserRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListChannelsModeratedByAppInstanceUserResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channels && {\n Channels: obj.Channels.map((item) => ChannelModeratedByAppInstanceUserSummaryFilterSensitiveLog(item)),\n }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListSubChannelsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListSubChannelsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const ListTagsForResourceResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Tags && { Tags: obj.Tags.map((item) => TagFilterSensitiveLog(item)) }),\n});\nexport const PutChannelMembershipPreferencesRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Preferences && { Preferences: ChannelMembershipPreferencesFilterSensitiveLog(obj.Preferences) }),\n});\nexport const PutChannelMembershipPreferencesResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Member && { Member: IdentityFilterSensitiveLog(obj.Member) }),\n ...(obj.Preferences && { Preferences: ChannelMembershipPreferencesFilterSensitiveLog(obj.Preferences) }),\n});\nexport const SearchChannelsRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const SearchChannelsResponseFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Channels && { Channels: obj.Channels.map((item) => ChannelSummaryFilterSensitiveLog(item)) }),\n ...(obj.NextToken && { NextToken: SENSITIVE_STRING }),\n});\nexport const SendChannelMessageRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Content && { Content: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.ClientRequestToken && { ClientRequestToken: SENSITIVE_STRING }),\n ...(obj.PushNotification && {\n PushNotification: PushNotificationConfigurationFilterSensitiveLog(obj.PushNotification),\n }),\n ...(obj.MessageAttributes && {\n MessageAttributes: Object.entries(obj.MessageAttributes).reduce((acc, [key, value]) => ((acc[key] = MessageAttributeValueFilterSensitiveLog(value)), acc), {}),\n }),\n ...(obj.ContentType && { ContentType: SENSITIVE_STRING }),\n});\nexport const TagResourceRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Tags && { Tags: obj.Tags.map((item) => TagFilterSensitiveLog(item)) }),\n});\nexport const UntagResourceRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.TagKeys && { TagKeys: SENSITIVE_STRING }),\n});\nexport const UpdateChannelRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n});\nexport const UpdateChannelFlowRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Processors && { Processors: obj.Processors.map((item) => ProcessorFilterSensitiveLog(item)) }),\n ...(obj.Name && { Name: SENSITIVE_STRING }),\n});\nexport const UpdateChannelMessageRequestFilterSensitiveLog = (obj) => ({\n ...obj,\n ...(obj.Content && { Content: SENSITIVE_STRING }),\n ...(obj.Metadata && { Metadata: SENSITIVE_STRING }),\n ...(obj.ContentType && { ContentType: SENSITIVE_STRING }),\n});\n","import { requestBuilder as rb } from \"@smithy/core\";\nimport { _json, collectBody, decorateServiceException as __decorateServiceException, expectBoolean as __expectBoolean, expectNonNull as __expectNonNull, expectNumber as __expectNumber, expectObject as __expectObject, expectString as __expectString, map, parseEpochTimestamp as __parseEpochTimestamp, take, withBaseException, } from \"@smithy/smithy-client\";\nimport { v4 as generateIdempotencyToken } from \"uuid\";\nimport { ChimeSDKMessagingServiceException as __BaseException } from \"../models/ChimeSDKMessagingServiceException\";\nimport { BadRequestException, ConflictException, ForbiddenException, NotFoundException, ResourceLimitExceededException, ServiceFailureException, ServiceUnavailableException, ThrottledClientException, UnauthorizedClientException, } from \"../models/models_0\";\nexport const se_AssociateChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/channel-flow\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n ChannelFlowArn: [],\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_BatchCreateChannelMembershipCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_o]: [, \"batch-create\"],\n });\n let body;\n body = JSON.stringify(take(input, {\n MemberArns: (_) => _json(_),\n SubChannelId: [],\n Type: [],\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ChannelFlowCallbackCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_o]: [, \"channel-flow-callback\"],\n });\n let body;\n body = JSON.stringify(take(input, {\n CallbackId: [true, (_) => _ ?? generateIdempotencyToken()],\n ChannelMessage: (_) => _json(_),\n DeleteResource: [],\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_CreateChannelCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels\");\n let body;\n body = JSON.stringify(take(input, {\n AppInstanceArn: [],\n ChannelId: [],\n ClientRequestToken: [true, (_) => _ ?? generateIdempotencyToken()],\n ElasticChannelConfiguration: (_) => _json(_),\n ExpirationSettings: (_) => _json(_),\n MemberArns: (_) => _json(_),\n Metadata: [],\n Mode: [],\n ModeratorArns: (_) => _json(_),\n Name: [],\n Privacy: [],\n Tags: (_) => _json(_),\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_CreateChannelBanCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/bans\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n MemberArn: [],\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_CreateChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/channel-flows\");\n let body;\n body = JSON.stringify(take(input, {\n AppInstanceArn: [],\n ClientRequestToken: [true, (_) => _ ?? generateIdempotencyToken()],\n Name: [],\n Processors: (_) => _json(_),\n Tags: (_) => _json(_),\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_CreateChannelMembershipCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n MemberArn: [],\n SubChannelId: [],\n Type: [],\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_CreateChannelModeratorCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/moderators\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n ChannelModeratorArn: [],\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_DeleteChannelCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_DeleteChannelBanCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/bans/{MemberArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_DeleteChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/channel-flows/{ChannelFlowArn}\");\n b.p(\"ChannelFlowArn\", () => input.ChannelFlowArn, \"{ChannelFlowArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_DeleteChannelMembershipCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships/{MemberArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n const query = map({\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"DELETE\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_DeleteChannelMessageCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages/{MessageId}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MessageId\", () => input.MessageId, \"{MessageId}\", false);\n const query = map({\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"DELETE\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_DeleteChannelModeratorCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/moderators/{ChannelModeratorArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"ChannelModeratorArn\", () => input.ChannelModeratorArn, \"{ChannelModeratorArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_DeleteMessagingStreamingConfigurationsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/app-instances/{AppInstanceArn}/streaming-configurations\");\n b.p(\"AppInstanceArn\", () => input.AppInstanceArn, \"{AppInstanceArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_DescribeChannelCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_DescribeChannelBanCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/bans/{MemberArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_DescribeChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/channel-flows/{ChannelFlowArn}\");\n b.p(\"ChannelFlowArn\", () => input.ChannelFlowArn, \"{ChannelFlowArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_DescribeChannelMembershipCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships/{MemberArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n const query = map({\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_DescribeChannelMembershipForAppInstanceUserCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_s]: [, \"app-instance-user-membership\"],\n [_aiua]: [, __expectNonNull(input[_AIUA], `AppInstanceUserArn`)],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_DescribeChannelModeratedByAppInstanceUserCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_s]: [, \"app-instance-user-moderated-channel\"],\n [_aiua]: [, __expectNonNull(input[_AIUA], `AppInstanceUserArn`)],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_DescribeChannelModeratorCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/moderators/{ChannelModeratorArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"ChannelModeratorArn\", () => input.ChannelModeratorArn, \"{ChannelModeratorArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_DisassociateChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/channel-flow/{ChannelFlowArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"ChannelFlowArn\", () => input.ChannelFlowArn, \"{ChannelFlowArn}\", false);\n let body;\n b.m(\"DELETE\").h(headers).b(body);\n return b.build();\n};\nexport const se_GetChannelMembershipPreferencesCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships/{MemberArn}/preferences\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_GetChannelMessageCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages/{MessageId}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MessageId\", () => input.MessageId, \"{MessageId}\", false);\n const query = map({\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_GetChannelMessageStatusCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages/{MessageId}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MessageId\", () => input.MessageId, \"{MessageId}\", false);\n const query = map({\n [_s]: [, \"message-status\"],\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_GetMessagingSessionEndpointCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/endpoints/messaging-session\");\n let body;\n body = \"\";\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_GetMessagingStreamingConfigurationsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/app-instances/{AppInstanceArn}/streaming-configurations\");\n b.p(\"AppInstanceArn\", () => input.AppInstanceArn, \"{AppInstanceArn}\", false);\n let body;\n b.m(\"GET\").h(headers).b(body);\n return b.build();\n};\nexport const se_ListChannelBansCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/bans\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelFlowsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/channel-flows\");\n const query = map({\n [_aia]: [, __expectNonNull(input[_AIA], `AppInstanceArn`)],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelMembershipsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_t]: [, input[_T]],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelMembershipsForAppInstanceUserCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels\");\n const query = map({\n [_s]: [, \"app-instance-user-memberships\"],\n [_aiua]: [, input[_AIUA]],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelMessagesCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_so]: [, input[_SO]],\n [_nb]: [() => input.NotBefore !== void 0, () => (input[_NB].toISOString().split(\".\")[0] + \"Z\").toString()],\n [_na]: [() => input.NotAfter !== void 0, () => (input[_NA].toISOString().split(\".\")[0] + \"Z\").toString()],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n [_sci]: [, input[_SCI]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelModeratorsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/moderators\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels\");\n const query = map({\n [_aia]: [, __expectNonNull(input[_AIA], `AppInstanceArn`)],\n [_p]: [, input[_P]],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelsAssociatedWithChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/channels\");\n const query = map({\n [_s]: [, \"channel-flow-associations\"],\n [_cfa]: [, __expectNonNull(input[_CFA], `ChannelFlowArn`)],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListChannelsModeratedByAppInstanceUserCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels\");\n const query = map({\n [_s]: [, \"app-instance-user-moderated-channels\"],\n [_aiua]: [, input[_AIUA]],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListSubChannelsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/subchannels\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n const query = map({\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_ListTagsForResourceCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {};\n b.bp(\"/tags\");\n const query = map({\n [_a]: [, __expectNonNull(input[_RARN], `ResourceARN`)],\n });\n let body;\n b.m(\"GET\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_PutChannelExpirationSettingsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/expiration-settings\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n ExpirationSettings: (_) => _json(_),\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_PutChannelMembershipPreferencesCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/memberships/{MemberArn}/preferences\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MemberArn\", () => input.MemberArn, \"{MemberArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n Preferences: (_) => _json(_),\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_PutMessagingStreamingConfigurationsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/app-instances/{AppInstanceArn}/streaming-configurations\");\n b.p(\"AppInstanceArn\", () => input.AppInstanceArn, \"{AppInstanceArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n StreamingConfigurations: (_) => _json(_),\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_RedactChannelMessageCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages/{MessageId}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MessageId\", () => input.MessageId, \"{MessageId}\", false);\n const query = map({\n [_o]: [, \"redact\"],\n });\n let body;\n body = JSON.stringify(take(input, {\n SubChannelId: [],\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_SearchChannelsCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels\");\n const query = map({\n [_o]: [, \"search\"],\n [_mr]: [() => input.MaxResults !== void 0, () => input[_MR].toString()],\n [_nt]: [, input[_NT]],\n });\n let body;\n body = JSON.stringify(take(input, {\n Fields: (_) => _json(_),\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_SendChannelMessageCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n ClientRequestToken: [true, (_) => _ ?? generateIdempotencyToken()],\n Content: [],\n ContentType: [],\n MessageAttributes: (_) => _json(_),\n Metadata: [],\n Persistence: [],\n PushNotification: (_) => _json(_),\n SubChannelId: [],\n Target: (_) => _json(_),\n Type: [],\n }));\n b.m(\"POST\").h(headers).b(body);\n return b.build();\n};\nexport const se_TagResourceCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/tags\");\n const query = map({\n [_o]: [, \"tag-resource\"],\n });\n let body;\n body = JSON.stringify(take(input, {\n ResourceARN: [],\n Tags: (_) => _json(_),\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_UntagResourceCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/tags\");\n const query = map({\n [_o]: [, \"untag-resource\"],\n });\n let body;\n body = JSON.stringify(take(input, {\n ResourceARN: [],\n TagKeys: (_) => _json(_),\n }));\n b.m(\"POST\").h(headers).q(query).b(body);\n return b.build();\n};\nexport const se_UpdateChannelCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n Metadata: [],\n Mode: [],\n Name: [],\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_UpdateChannelFlowCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = {\n \"content-type\": \"application/json\",\n };\n b.bp(\"/channel-flows/{ChannelFlowArn}\");\n b.p(\"ChannelFlowArn\", () => input.ChannelFlowArn, \"{ChannelFlowArn}\", false);\n let body;\n body = JSON.stringify(take(input, {\n Name: [],\n Processors: (_) => _json(_),\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_UpdateChannelMessageCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n \"content-type\": \"application/json\",\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/messages/{MessageId}\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n b.p(\"MessageId\", () => input.MessageId, \"{MessageId}\", false);\n let body;\n body = JSON.stringify(take(input, {\n Content: [],\n ContentType: [],\n Metadata: [],\n SubChannelId: [],\n }));\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const se_UpdateChannelReadMarkerCommand = async (input, context) => {\n const b = rb(input, context);\n const headers = map({}, isSerializableHeaderValue, {\n [_xacb]: input[_CB],\n });\n b.bp(\"/channels/{ChannelArn}/readMarker\");\n b.p(\"ChannelArn\", () => input.ChannelArn, \"{ChannelArn}\", false);\n let body;\n b.m(\"PUT\").h(headers).b(body);\n return b.build();\n};\nexport const de_AssociateChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_AssociateChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_AssociateChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_BatchCreateChannelMembershipCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_BatchCreateChannelMembershipCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n BatchChannelMemberships: _json,\n Errors: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_BatchCreateChannelMembershipCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ChannelFlowCallbackCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ChannelFlowCallbackCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n CallbackId: __expectString,\n ChannelArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ChannelFlowCallbackCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_CreateChannelCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_CreateChannelCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_CreateChannelCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_CreateChannelBanCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_CreateChannelBanCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n Member: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_CreateChannelBanCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_CreateChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_CreateChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelFlowArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_CreateChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_CreateChannelMembershipCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_CreateChannelMembershipCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n Member: _json,\n SubChannelId: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_CreateChannelMembershipCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_CreateChannelModeratorCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_CreateChannelModeratorCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ChannelModerator: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_CreateChannelModeratorCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelBanCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelBanCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelBanCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelMembershipCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelMembershipCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelMembershipCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelMessageCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelMessageCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelMessageCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteChannelModeratorCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteChannelModeratorCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteChannelModeratorCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DeleteMessagingStreamingConfigurationsCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DeleteMessagingStreamingConfigurationsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DeleteMessagingStreamingConfigurationsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channel: (_) => de_Channel(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelBanCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelBanCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelBan: (_) => de_ChannelBan(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelBanCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelFlow: (_) => de_ChannelFlow(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelMembershipCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelMembershipCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelMembership: (_) => de_ChannelMembership(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelMembershipCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelMembershipForAppInstanceUserCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelMembershipForAppInstanceUserCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelMembership: (_) => de_ChannelMembershipForAppInstanceUserSummary(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelMembershipForAppInstanceUserCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelModeratedByAppInstanceUserCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelModeratedByAppInstanceUserCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channel: (_) => de_ChannelModeratedByAppInstanceUserSummary(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelModeratedByAppInstanceUserCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DescribeChannelModeratorCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_DescribeChannelModeratorCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelModerator: (_) => de_ChannelModerator(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_DescribeChannelModeratorCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_DisassociateChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_DisassociateChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_DisassociateChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_GetChannelMembershipPreferencesCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_GetChannelMembershipPreferencesCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n Member: _json,\n Preferences: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_GetChannelMembershipPreferencesCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_GetChannelMessageCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_GetChannelMessageCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelMessage: (_) => de_ChannelMessage(_, context),\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_GetChannelMessageCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_GetChannelMessageStatusCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_GetChannelMessageStatusCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Status: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_GetChannelMessageStatusCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_GetMessagingSessionEndpointCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_GetMessagingSessionEndpointCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Endpoint: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_GetMessagingSessionEndpointCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_GetMessagingStreamingConfigurationsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_GetMessagingStreamingConfigurationsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n StreamingConfigurations: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_GetMessagingStreamingConfigurationsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelBansCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelBansCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ChannelBans: _json,\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelBansCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelFlowsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelFlowsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelFlows: _json,\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelFlowsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelMembershipsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelMembershipsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ChannelMemberships: _json,\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelMembershipsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelMembershipsForAppInstanceUserCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelMembershipsForAppInstanceUserCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelMemberships: (_) => de_ChannelMembershipForAppInstanceUserSummaryList(_, context),\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelMembershipsForAppInstanceUserCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelMessagesCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelMessagesCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ChannelMessages: (_) => de_ChannelMessageSummaryList(_, context),\n NextToken: __expectString,\n SubChannelId: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelMessagesCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelModeratorsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelModeratorsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ChannelModerators: _json,\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelModeratorsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channels: (_) => de_ChannelSummaryList(_, context),\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelsAssociatedWithChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelsAssociatedWithChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channels: _json,\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelsAssociatedWithChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListChannelsModeratedByAppInstanceUserCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListChannelsModeratedByAppInstanceUserCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channels: (_) => de_ChannelModeratedByAppInstanceUserSummaryList(_, context),\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListChannelsModeratedByAppInstanceUserCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListSubChannelsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListSubChannelsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n NextToken: __expectString,\n SubChannels: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListSubChannelsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_ListTagsForResourceCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_ListTagsForResourceCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Tags: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_ListTagsForResourceCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_PutChannelExpirationSettingsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_PutChannelExpirationSettingsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n ExpirationSettings: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_PutChannelExpirationSettingsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_PutChannelMembershipPreferencesCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_PutChannelMembershipPreferencesCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n Member: _json,\n Preferences: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_PutChannelMembershipPreferencesCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_PutMessagingStreamingConfigurationsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_PutMessagingStreamingConfigurationsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n StreamingConfigurations: _json,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_PutMessagingStreamingConfigurationsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"NotFoundException\":\n case \"com.amazonaws.chimesdkmessaging#NotFoundException\":\n throw await de_NotFoundExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_RedactChannelMessageCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_RedactChannelMessageCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n MessageId: __expectString,\n SubChannelId: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_RedactChannelMessageCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_SearchChannelsCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_SearchChannelsCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n Channels: (_) => de_ChannelSummaryList(_, context),\n NextToken: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_SearchChannelsCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_SendChannelMessageCommand = async (output, context) => {\n if (output.statusCode !== 201 && output.statusCode >= 300) {\n return de_SendChannelMessageCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n MessageId: __expectString,\n Status: _json,\n SubChannelId: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_SendChannelMessageCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_TagResourceCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_TagResourceCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_TagResourceCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ResourceLimitExceededException\":\n case \"com.amazonaws.chimesdkmessaging#ResourceLimitExceededException\":\n throw await de_ResourceLimitExceededExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_UntagResourceCommand = async (output, context) => {\n if (output.statusCode !== 204 && output.statusCode >= 300) {\n return de_UntagResourceCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n await collectBody(output.body, context);\n return contents;\n};\nconst de_UntagResourceCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_UpdateChannelCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_UpdateChannelCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_UpdateChannelCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_UpdateChannelFlowCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_UpdateChannelFlowCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelFlowArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_UpdateChannelFlowCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_UpdateChannelMessageCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_UpdateChannelMessageCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n MessageId: __expectString,\n Status: _json,\n SubChannelId: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_UpdateChannelMessageCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nexport const de_UpdateChannelReadMarkerCommand = async (output, context) => {\n if (output.statusCode !== 200 && output.statusCode >= 300) {\n return de_UpdateChannelReadMarkerCommandError(output, context);\n }\n const contents = map({\n $metadata: deserializeMetadata(output),\n });\n const data = __expectNonNull(__expectObject(await parseBody(output.body, context)), \"body\");\n const doc = take(data, {\n ChannelArn: __expectString,\n });\n Object.assign(contents, doc);\n return contents;\n};\nconst de_UpdateChannelReadMarkerCommandError = async (output, context) => {\n const parsedOutput = {\n ...output,\n body: await parseErrorBody(output.body, context),\n };\n const errorCode = loadRestJsonErrorCode(output, parsedOutput.body);\n switch (errorCode) {\n case \"BadRequestException\":\n case \"com.amazonaws.chimesdkmessaging#BadRequestException\":\n throw await de_BadRequestExceptionRes(parsedOutput, context);\n case \"ConflictException\":\n case \"com.amazonaws.chimesdkmessaging#ConflictException\":\n throw await de_ConflictExceptionRes(parsedOutput, context);\n case \"ForbiddenException\":\n case \"com.amazonaws.chimesdkmessaging#ForbiddenException\":\n throw await de_ForbiddenExceptionRes(parsedOutput, context);\n case \"ServiceFailureException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceFailureException\":\n throw await de_ServiceFailureExceptionRes(parsedOutput, context);\n case \"ServiceUnavailableException\":\n case \"com.amazonaws.chimesdkmessaging#ServiceUnavailableException\":\n throw await de_ServiceUnavailableExceptionRes(parsedOutput, context);\n case \"ThrottledClientException\":\n case \"com.amazonaws.chimesdkmessaging#ThrottledClientException\":\n throw await de_ThrottledClientExceptionRes(parsedOutput, context);\n case \"UnauthorizedClientException\":\n case \"com.amazonaws.chimesdkmessaging#UnauthorizedClientException\":\n throw await de_UnauthorizedClientExceptionRes(parsedOutput, context);\n default:\n const parsedBody = parsedOutput.body;\n return throwDefaultError({\n output,\n parsedBody,\n errorCode,\n });\n }\n};\nconst throwDefaultError = withBaseException(__BaseException);\nconst de_BadRequestExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new BadRequestException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ConflictExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ConflictException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ForbiddenExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ForbiddenException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_NotFoundExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new NotFoundException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ResourceLimitExceededExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ResourceLimitExceededException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ServiceFailureExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ServiceFailureException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ServiceUnavailableExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ServiceUnavailableException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_ThrottledClientExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new ThrottledClientException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_UnauthorizedClientExceptionRes = async (parsedOutput, context) => {\n const contents = map({});\n const data = parsedOutput.body;\n const doc = take(data, {\n Code: __expectString,\n Message: __expectString,\n });\n Object.assign(contents, doc);\n const exception = new UnauthorizedClientException({\n $metadata: deserializeMetadata(parsedOutput),\n ...contents,\n });\n return __decorateServiceException(exception, parsedOutput.body);\n};\nconst de_AppInstanceUserMembershipSummary = (output, context) => {\n return take(output, {\n ReadMarkerTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n SubChannelId: __expectString,\n Type: __expectString,\n });\n};\nconst de_Channel = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n ChannelFlowArn: __expectString,\n CreatedBy: _json,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n ElasticChannelConfiguration: _json,\n ExpirationSettings: _json,\n LastMessageTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastUpdatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Metadata: __expectString,\n Mode: __expectString,\n Name: __expectString,\n Privacy: __expectString,\n });\n};\nconst de_ChannelBan = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n CreatedBy: _json,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Member: _json,\n });\n};\nconst de_ChannelFlow = (output, context) => {\n return take(output, {\n ChannelFlowArn: __expectString,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastUpdatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Name: __expectString,\n Processors: _json,\n });\n};\nconst de_ChannelMembership = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n InvitedBy: _json,\n LastUpdatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Member: _json,\n SubChannelId: __expectString,\n Type: __expectString,\n });\n};\nconst de_ChannelMembershipForAppInstanceUserSummary = (output, context) => {\n return take(output, {\n AppInstanceUserMembershipSummary: (_) => de_AppInstanceUserMembershipSummary(_, context),\n ChannelSummary: (_) => de_ChannelSummary(_, context),\n });\n};\nconst de_ChannelMembershipForAppInstanceUserSummaryList = (output, context) => {\n const retVal = (output || [])\n .filter((e) => e != null)\n .map((entry) => {\n return de_ChannelMembershipForAppInstanceUserSummary(entry, context);\n });\n return retVal;\n};\nconst de_ChannelMessage = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n Content: __expectString,\n ContentType: __expectString,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastEditedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastUpdatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n MessageAttributes: _json,\n MessageId: __expectString,\n Metadata: __expectString,\n Persistence: __expectString,\n Redacted: __expectBoolean,\n Sender: _json,\n Status: _json,\n SubChannelId: __expectString,\n Target: _json,\n Type: __expectString,\n });\n};\nconst de_ChannelMessageSummary = (output, context) => {\n return take(output, {\n Content: __expectString,\n ContentType: __expectString,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastEditedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n LastUpdatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n MessageAttributes: _json,\n MessageId: __expectString,\n Metadata: __expectString,\n Redacted: __expectBoolean,\n Sender: _json,\n Status: _json,\n Target: _json,\n Type: __expectString,\n });\n};\nconst de_ChannelMessageSummaryList = (output, context) => {\n const retVal = (output || [])\n .filter((e) => e != null)\n .map((entry) => {\n return de_ChannelMessageSummary(entry, context);\n });\n return retVal;\n};\nconst de_ChannelModeratedByAppInstanceUserSummary = (output, context) => {\n return take(output, {\n ChannelSummary: (_) => de_ChannelSummary(_, context),\n });\n};\nconst de_ChannelModeratedByAppInstanceUserSummaryList = (output, context) => {\n const retVal = (output || [])\n .filter((e) => e != null)\n .map((entry) => {\n return de_ChannelModeratedByAppInstanceUserSummary(entry, context);\n });\n return retVal;\n};\nconst de_ChannelModerator = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n CreatedBy: _json,\n CreatedTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Moderator: _json,\n });\n};\nconst de_ChannelSummary = (output, context) => {\n return take(output, {\n ChannelArn: __expectString,\n LastMessageTimestamp: (_) => __expectNonNull(__parseEpochTimestamp(__expectNumber(_))),\n Metadata: __expectString,\n Mode: __expectString,\n Name: __expectString,\n Privacy: __expectString,\n });\n};\nconst de_ChannelSummaryList = (output, context) => {\n const retVal = (output || [])\n .filter((e) => e != null)\n .map((entry) => {\n return de_ChannelSummary(entry, context);\n });\n return retVal;\n};\nconst deserializeMetadata = (output) => ({\n httpStatusCode: output.statusCode,\n requestId: output.headers[\"x-amzn-requestid\"] ?? output.headers[\"x-amzn-request-id\"] ?? output.headers[\"x-amz-request-id\"],\n extendedRequestId: output.headers[\"x-amz-id-2\"],\n cfId: output.headers[\"x-amz-cf-id\"],\n});\nconst collectBodyString = (streamBody, context) => collectBody(streamBody, context).then((body) => context.utf8Encoder(body));\nconst isSerializableHeaderValue = (value) => value !== undefined &&\n value !== null &&\n value !== \"\" &&\n (!Object.getOwnPropertyNames(value).includes(\"length\") || value.length != 0) &&\n (!Object.getOwnPropertyNames(value).includes(\"size\") || value.size != 0);\nconst _AIA = \"AppInstanceArn\";\nconst _AIUA = \"AppInstanceUserArn\";\nconst _CB = \"ChimeBearer\";\nconst _CFA = \"ChannelFlowArn\";\nconst _MR = \"MaxResults\";\nconst _NA = \"NotAfter\";\nconst _NB = \"NotBefore\";\nconst _NT = \"NextToken\";\nconst _P = \"Privacy\";\nconst _RARN = \"ResourceARN\";\nconst _SCI = \"SubChannelId\";\nconst _SO = \"SortOrder\";\nconst _T = \"Type\";\nconst _a = \"arn\";\nconst _aia = \"app-instance-arn\";\nconst _aiua = \"app-instance-user-arn\";\nconst _cfa = \"channel-flow-arn\";\nconst _mr = \"max-results\";\nconst _na = \"not-after\";\nconst _nb = \"not-before\";\nconst _nt = \"next-token\";\nconst _o = \"operation\";\nconst _p = \"privacy\";\nconst _s = \"scope\";\nconst _sci = \"sub-channel-id\";\nconst _so = \"sort-order\";\nconst _t = \"type\";\nconst _xacb = \"x-amz-chime-bearer\";\nconst parseBody = (streamBody, context) => collectBodyString(streamBody, context).then((encoded) => {\n if (encoded.length) {\n return JSON.parse(encoded);\n }\n return {};\n});\nconst parseErrorBody = async (errorBody, context) => {\n const value = await parseBody(errorBody, context);\n value.message = value.message ?? value.Message;\n return value;\n};\nconst loadRestJsonErrorCode = (output, data) => {\n const findKey = (object, key) => Object.keys(object).find((k) => k.toLowerCase() === key.toLowerCase());\n const sanitizeErrorCode = (rawValue) => {\n let cleanValue = rawValue;\n if (typeof cleanValue === \"number\") {\n cleanValue = cleanValue.toString();\n }\n if (cleanValue.indexOf(\",\") >= 0) {\n cleanValue = cleanValue.split(\",\")[0];\n }\n if (cleanValue.indexOf(\":\") >= 0) {\n cleanValue = cleanValue.split(\":\")[0];\n }\n if (cleanValue.indexOf(\"#\") >= 0) {\n cleanValue = cleanValue.split(\"#\")[1];\n }\n return cleanValue;\n };\n const headerKey = findKey(output.headers, \"x-amzn-errortype\");\n if (headerKey !== undefined) {\n return sanitizeErrorCode(output.headers[headerKey]);\n }\n if (data.code !== undefined) {\n return sanitizeErrorCode(data.code);\n }\n if (data[\"__type\"] !== undefined) {\n return sanitizeErrorCode(data[\"__type\"]);\n }\n};\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_AssociateChannelFlowCommand, se_AssociateChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class AssociateChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"AssociateChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"AssociateChannelFlowCommand\")\n .f(void 0, void 0)\n .ser(se_AssociateChannelFlowCommand)\n .de(de_AssociateChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { BatchCreateChannelMembershipResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_BatchCreateChannelMembershipCommand, se_BatchCreateChannelMembershipCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class BatchCreateChannelMembershipCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"BatchCreateChannelMembership\", {})\n .n(\"ChimeSDKMessagingClient\", \"BatchCreateChannelMembershipCommand\")\n .f(void 0, BatchCreateChannelMembershipResponseFilterSensitiveLog)\n .ser(se_BatchCreateChannelMembershipCommand)\n .de(de_BatchCreateChannelMembershipCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ChannelFlowCallbackRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ChannelFlowCallbackCommand, se_ChannelFlowCallbackCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ChannelFlowCallbackCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ChannelFlowCallback\", {})\n .n(\"ChimeSDKMessagingClient\", \"ChannelFlowCallbackCommand\")\n .f(ChannelFlowCallbackRequestFilterSensitiveLog, void 0)\n .ser(se_ChannelFlowCallbackCommand)\n .de(de_ChannelFlowCallbackCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateChannelBanResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_CreateChannelBanCommand, se_CreateChannelBanCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class CreateChannelBanCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"CreateChannelBan\", {})\n .n(\"ChimeSDKMessagingClient\", \"CreateChannelBanCommand\")\n .f(void 0, CreateChannelBanResponseFilterSensitiveLog)\n .ser(se_CreateChannelBanCommand)\n .de(de_CreateChannelBanCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateChannelRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_CreateChannelCommand, se_CreateChannelCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class CreateChannelCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"CreateChannel\", {})\n .n(\"ChimeSDKMessagingClient\", \"CreateChannelCommand\")\n .f(CreateChannelRequestFilterSensitiveLog, void 0)\n .ser(se_CreateChannelCommand)\n .de(de_CreateChannelCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateChannelFlowRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_CreateChannelFlowCommand, se_CreateChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class CreateChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"CreateChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"CreateChannelFlowCommand\")\n .f(CreateChannelFlowRequestFilterSensitiveLog, void 0)\n .ser(se_CreateChannelFlowCommand)\n .de(de_CreateChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateChannelMembershipResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_CreateChannelMembershipCommand, se_CreateChannelMembershipCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class CreateChannelMembershipCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"CreateChannelMembership\", {})\n .n(\"ChimeSDKMessagingClient\", \"CreateChannelMembershipCommand\")\n .f(void 0, CreateChannelMembershipResponseFilterSensitiveLog)\n .ser(se_CreateChannelMembershipCommand)\n .de(de_CreateChannelMembershipCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { CreateChannelModeratorResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_CreateChannelModeratorCommand, se_CreateChannelModeratorCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class CreateChannelModeratorCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"CreateChannelModerator\", {})\n .n(\"ChimeSDKMessagingClient\", \"CreateChannelModeratorCommand\")\n .f(void 0, CreateChannelModeratorResponseFilterSensitiveLog)\n .ser(se_CreateChannelModeratorCommand)\n .de(de_CreateChannelModeratorCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelBanCommand, se_DeleteChannelBanCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelBanCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannelBan\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelBanCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelBanCommand)\n .de(de_DeleteChannelBanCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelCommand, se_DeleteChannelCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannel\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelCommand)\n .de(de_DeleteChannelCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelFlowCommand, se_DeleteChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelFlowCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelFlowCommand)\n .de(de_DeleteChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelMembershipCommand, se_DeleteChannelMembershipCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelMembershipCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannelMembership\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelMembershipCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelMembershipCommand)\n .de(de_DeleteChannelMembershipCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelMessageCommand, se_DeleteChannelMessageCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelMessageCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannelMessage\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelMessageCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelMessageCommand)\n .de(de_DeleteChannelMessageCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteChannelModeratorCommand, se_DeleteChannelModeratorCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteChannelModeratorCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteChannelModerator\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteChannelModeratorCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteChannelModeratorCommand)\n .de(de_DeleteChannelModeratorCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DeleteMessagingStreamingConfigurationsCommand, se_DeleteMessagingStreamingConfigurationsCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DeleteMessagingStreamingConfigurationsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DeleteMessagingStreamingConfigurations\", {})\n .n(\"ChimeSDKMessagingClient\", \"DeleteMessagingStreamingConfigurationsCommand\")\n .f(void 0, void 0)\n .ser(se_DeleteMessagingStreamingConfigurationsCommand)\n .de(de_DeleteMessagingStreamingConfigurationsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelBanResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelBanCommand, se_DescribeChannelBanCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelBanCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelBan\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelBanCommand\")\n .f(void 0, DescribeChannelBanResponseFilterSensitiveLog)\n .ser(se_DescribeChannelBanCommand)\n .de(de_DescribeChannelBanCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelCommand, se_DescribeChannelCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannel\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelCommand\")\n .f(void 0, DescribeChannelResponseFilterSensitiveLog)\n .ser(se_DescribeChannelCommand)\n .de(de_DescribeChannelCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelFlowResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelFlowCommand, se_DescribeChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelFlowCommand\")\n .f(void 0, DescribeChannelFlowResponseFilterSensitiveLog)\n .ser(se_DescribeChannelFlowCommand)\n .de(de_DescribeChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelMembershipResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelMembershipCommand, se_DescribeChannelMembershipCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelMembershipCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelMembership\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelMembershipCommand\")\n .f(void 0, DescribeChannelMembershipResponseFilterSensitiveLog)\n .ser(se_DescribeChannelMembershipCommand)\n .de(de_DescribeChannelMembershipCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelMembershipForAppInstanceUserResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelMembershipForAppInstanceUserCommand, se_DescribeChannelMembershipForAppInstanceUserCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelMembershipForAppInstanceUserCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelMembershipForAppInstanceUser\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelMembershipForAppInstanceUserCommand\")\n .f(void 0, DescribeChannelMembershipForAppInstanceUserResponseFilterSensitiveLog)\n .ser(se_DescribeChannelMembershipForAppInstanceUserCommand)\n .de(de_DescribeChannelMembershipForAppInstanceUserCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelModeratedByAppInstanceUserResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelModeratedByAppInstanceUserCommand, se_DescribeChannelModeratedByAppInstanceUserCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelModeratedByAppInstanceUserCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelModeratedByAppInstanceUser\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelModeratedByAppInstanceUserCommand\")\n .f(void 0, DescribeChannelModeratedByAppInstanceUserResponseFilterSensitiveLog)\n .ser(se_DescribeChannelModeratedByAppInstanceUserCommand)\n .de(de_DescribeChannelModeratedByAppInstanceUserCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { DescribeChannelModeratorResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_DescribeChannelModeratorCommand, se_DescribeChannelModeratorCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DescribeChannelModeratorCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DescribeChannelModerator\", {})\n .n(\"ChimeSDKMessagingClient\", \"DescribeChannelModeratorCommand\")\n .f(void 0, DescribeChannelModeratorResponseFilterSensitiveLog)\n .ser(se_DescribeChannelModeratorCommand)\n .de(de_DescribeChannelModeratorCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_DisassociateChannelFlowCommand, se_DisassociateChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class DisassociateChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"DisassociateChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"DisassociateChannelFlowCommand\")\n .f(void 0, void 0)\n .ser(se_DisassociateChannelFlowCommand)\n .de(de_DisassociateChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { GetChannelMembershipPreferencesResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_GetChannelMembershipPreferencesCommand, se_GetChannelMembershipPreferencesCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class GetChannelMembershipPreferencesCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"GetChannelMembershipPreferences\", {})\n .n(\"ChimeSDKMessagingClient\", \"GetChannelMembershipPreferencesCommand\")\n .f(void 0, GetChannelMembershipPreferencesResponseFilterSensitiveLog)\n .ser(se_GetChannelMembershipPreferencesCommand)\n .de(de_GetChannelMembershipPreferencesCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { GetChannelMessageResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_GetChannelMessageCommand, se_GetChannelMessageCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class GetChannelMessageCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"GetChannelMessage\", {})\n .n(\"ChimeSDKMessagingClient\", \"GetChannelMessageCommand\")\n .f(void 0, GetChannelMessageResponseFilterSensitiveLog)\n .ser(se_GetChannelMessageCommand)\n .de(de_GetChannelMessageCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_GetChannelMessageStatusCommand, se_GetChannelMessageStatusCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class GetChannelMessageStatusCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"GetChannelMessageStatus\", {})\n .n(\"ChimeSDKMessagingClient\", \"GetChannelMessageStatusCommand\")\n .f(void 0, void 0)\n .ser(se_GetChannelMessageStatusCommand)\n .de(de_GetChannelMessageStatusCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_GetMessagingSessionEndpointCommand, se_GetMessagingSessionEndpointCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class GetMessagingSessionEndpointCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"GetMessagingSessionEndpoint\", {})\n .n(\"ChimeSDKMessagingClient\", \"GetMessagingSessionEndpointCommand\")\n .f(void 0, void 0)\n .ser(se_GetMessagingSessionEndpointCommand)\n .de(de_GetMessagingSessionEndpointCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_GetMessagingStreamingConfigurationsCommand, se_GetMessagingStreamingConfigurationsCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class GetMessagingStreamingConfigurationsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"GetMessagingStreamingConfigurations\", {})\n .n(\"ChimeSDKMessagingClient\", \"GetMessagingStreamingConfigurationsCommand\")\n .f(void 0, void 0)\n .ser(se_GetMessagingStreamingConfigurationsCommand)\n .de(de_GetMessagingStreamingConfigurationsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelBansRequestFilterSensitiveLog, ListChannelBansResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelBansCommand, se_ListChannelBansCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelBansCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelBans\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelBansCommand\")\n .f(ListChannelBansRequestFilterSensitiveLog, ListChannelBansResponseFilterSensitiveLog)\n .ser(se_ListChannelBansCommand)\n .de(de_ListChannelBansCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelFlowsRequestFilterSensitiveLog, ListChannelFlowsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelFlowsCommand, se_ListChannelFlowsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelFlowsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelFlows\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelFlowsCommand\")\n .f(ListChannelFlowsRequestFilterSensitiveLog, ListChannelFlowsResponseFilterSensitiveLog)\n .ser(se_ListChannelFlowsCommand)\n .de(de_ListChannelFlowsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelMembershipsRequestFilterSensitiveLog, ListChannelMembershipsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelMembershipsCommand, se_ListChannelMembershipsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelMembershipsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelMemberships\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelMembershipsCommand\")\n .f(ListChannelMembershipsRequestFilterSensitiveLog, ListChannelMembershipsResponseFilterSensitiveLog)\n .ser(se_ListChannelMembershipsCommand)\n .de(de_ListChannelMembershipsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelMembershipsForAppInstanceUserRequestFilterSensitiveLog, ListChannelMembershipsForAppInstanceUserResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelMembershipsForAppInstanceUserCommand, se_ListChannelMembershipsForAppInstanceUserCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelMembershipsForAppInstanceUserCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelMembershipsForAppInstanceUser\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelMembershipsForAppInstanceUserCommand\")\n .f(ListChannelMembershipsForAppInstanceUserRequestFilterSensitiveLog, ListChannelMembershipsForAppInstanceUserResponseFilterSensitiveLog)\n .ser(se_ListChannelMembershipsForAppInstanceUserCommand)\n .de(de_ListChannelMembershipsForAppInstanceUserCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelMessagesRequestFilterSensitiveLog, ListChannelMessagesResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelMessagesCommand, se_ListChannelMessagesCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelMessagesCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelMessages\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelMessagesCommand\")\n .f(ListChannelMessagesRequestFilterSensitiveLog, ListChannelMessagesResponseFilterSensitiveLog)\n .ser(se_ListChannelMessagesCommand)\n .de(de_ListChannelMessagesCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelModeratorsRequestFilterSensitiveLog, ListChannelModeratorsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelModeratorsCommand, se_ListChannelModeratorsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelModeratorsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelModerators\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelModeratorsCommand\")\n .f(ListChannelModeratorsRequestFilterSensitiveLog, ListChannelModeratorsResponseFilterSensitiveLog)\n .ser(se_ListChannelModeratorsCommand)\n .de(de_ListChannelModeratorsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelsAssociatedWithChannelFlowRequestFilterSensitiveLog, ListChannelsAssociatedWithChannelFlowResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelsAssociatedWithChannelFlowCommand, se_ListChannelsAssociatedWithChannelFlowCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelsAssociatedWithChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelsAssociatedWithChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelsAssociatedWithChannelFlowCommand\")\n .f(ListChannelsAssociatedWithChannelFlowRequestFilterSensitiveLog, ListChannelsAssociatedWithChannelFlowResponseFilterSensitiveLog)\n .ser(se_ListChannelsAssociatedWithChannelFlowCommand)\n .de(de_ListChannelsAssociatedWithChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelsRequestFilterSensitiveLog, ListChannelsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelsCommand, se_ListChannelsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannels\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelsCommand\")\n .f(ListChannelsRequestFilterSensitiveLog, ListChannelsResponseFilterSensitiveLog)\n .ser(se_ListChannelsCommand)\n .de(de_ListChannelsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListChannelsModeratedByAppInstanceUserRequestFilterSensitiveLog, ListChannelsModeratedByAppInstanceUserResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListChannelsModeratedByAppInstanceUserCommand, se_ListChannelsModeratedByAppInstanceUserCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListChannelsModeratedByAppInstanceUserCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListChannelsModeratedByAppInstanceUser\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListChannelsModeratedByAppInstanceUserCommand\")\n .f(ListChannelsModeratedByAppInstanceUserRequestFilterSensitiveLog, ListChannelsModeratedByAppInstanceUserResponseFilterSensitiveLog)\n .ser(se_ListChannelsModeratedByAppInstanceUserCommand)\n .de(de_ListChannelsModeratedByAppInstanceUserCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListSubChannelsRequestFilterSensitiveLog, ListSubChannelsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListSubChannelsCommand, se_ListSubChannelsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListSubChannelsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListSubChannels\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListSubChannelsCommand\")\n .f(ListSubChannelsRequestFilterSensitiveLog, ListSubChannelsResponseFilterSensitiveLog)\n .ser(se_ListSubChannelsCommand)\n .de(de_ListSubChannelsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { ListTagsForResourceResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_ListTagsForResourceCommand, se_ListTagsForResourceCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class ListTagsForResourceCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"ListTagsForResource\", {})\n .n(\"ChimeSDKMessagingClient\", \"ListTagsForResourceCommand\")\n .f(void 0, ListTagsForResourceResponseFilterSensitiveLog)\n .ser(se_ListTagsForResourceCommand)\n .de(de_ListTagsForResourceCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_PutChannelExpirationSettingsCommand, se_PutChannelExpirationSettingsCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class PutChannelExpirationSettingsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"PutChannelExpirationSettings\", {})\n .n(\"ChimeSDKMessagingClient\", \"PutChannelExpirationSettingsCommand\")\n .f(void 0, void 0)\n .ser(se_PutChannelExpirationSettingsCommand)\n .de(de_PutChannelExpirationSettingsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { PutChannelMembershipPreferencesRequestFilterSensitiveLog, PutChannelMembershipPreferencesResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_PutChannelMembershipPreferencesCommand, se_PutChannelMembershipPreferencesCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class PutChannelMembershipPreferencesCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"PutChannelMembershipPreferences\", {})\n .n(\"ChimeSDKMessagingClient\", \"PutChannelMembershipPreferencesCommand\")\n .f(PutChannelMembershipPreferencesRequestFilterSensitiveLog, PutChannelMembershipPreferencesResponseFilterSensitiveLog)\n .ser(se_PutChannelMembershipPreferencesCommand)\n .de(de_PutChannelMembershipPreferencesCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_PutMessagingStreamingConfigurationsCommand, se_PutMessagingStreamingConfigurationsCommand, } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class PutMessagingStreamingConfigurationsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"PutMessagingStreamingConfigurations\", {})\n .n(\"ChimeSDKMessagingClient\", \"PutMessagingStreamingConfigurationsCommand\")\n .f(void 0, void 0)\n .ser(se_PutMessagingStreamingConfigurationsCommand)\n .de(de_PutMessagingStreamingConfigurationsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_RedactChannelMessageCommand, se_RedactChannelMessageCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class RedactChannelMessageCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"RedactChannelMessage\", {})\n .n(\"ChimeSDKMessagingClient\", \"RedactChannelMessageCommand\")\n .f(void 0, void 0)\n .ser(se_RedactChannelMessageCommand)\n .de(de_RedactChannelMessageCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { SearchChannelsRequestFilterSensitiveLog, SearchChannelsResponseFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_SearchChannelsCommand, se_SearchChannelsCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class SearchChannelsCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"SearchChannels\", {})\n .n(\"ChimeSDKMessagingClient\", \"SearchChannelsCommand\")\n .f(SearchChannelsRequestFilterSensitiveLog, SearchChannelsResponseFilterSensitiveLog)\n .ser(se_SearchChannelsCommand)\n .de(de_SearchChannelsCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { SendChannelMessageRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_SendChannelMessageCommand, se_SendChannelMessageCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class SendChannelMessageCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"SendChannelMessage\", {})\n .n(\"ChimeSDKMessagingClient\", \"SendChannelMessageCommand\")\n .f(SendChannelMessageRequestFilterSensitiveLog, void 0)\n .ser(se_SendChannelMessageCommand)\n .de(de_SendChannelMessageCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { TagResourceRequestFilterSensitiveLog } from \"../models/models_0\";\nimport { de_TagResourceCommand, se_TagResourceCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class TagResourceCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"TagResource\", {})\n .n(\"ChimeSDKMessagingClient\", \"TagResourceCommand\")\n .f(TagResourceRequestFilterSensitiveLog, void 0)\n .ser(se_TagResourceCommand)\n .de(de_TagResourceCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { UntagResourceRequestFilterSensitiveLog } from \"../models/models_0\";\nimport { de_UntagResourceCommand, se_UntagResourceCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class UntagResourceCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"UntagResource\", {})\n .n(\"ChimeSDKMessagingClient\", \"UntagResourceCommand\")\n .f(UntagResourceRequestFilterSensitiveLog, void 0)\n .ser(se_UntagResourceCommand)\n .de(de_UntagResourceCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { UpdateChannelRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_UpdateChannelCommand, se_UpdateChannelCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class UpdateChannelCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"UpdateChannel\", {})\n .n(\"ChimeSDKMessagingClient\", \"UpdateChannelCommand\")\n .f(UpdateChannelRequestFilterSensitiveLog, void 0)\n .ser(se_UpdateChannelCommand)\n .de(de_UpdateChannelCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { UpdateChannelFlowRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_UpdateChannelFlowCommand, se_UpdateChannelFlowCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class UpdateChannelFlowCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"UpdateChannelFlow\", {})\n .n(\"ChimeSDKMessagingClient\", \"UpdateChannelFlowCommand\")\n .f(UpdateChannelFlowRequestFilterSensitiveLog, void 0)\n .ser(se_UpdateChannelFlowCommand)\n .de(de_UpdateChannelFlowCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { UpdateChannelMessageRequestFilterSensitiveLog, } from \"../models/models_0\";\nimport { de_UpdateChannelMessageCommand, se_UpdateChannelMessageCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class UpdateChannelMessageCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"UpdateChannelMessage\", {})\n .n(\"ChimeSDKMessagingClient\", \"UpdateChannelMessageCommand\")\n .f(UpdateChannelMessageRequestFilterSensitiveLog, void 0)\n .ser(se_UpdateChannelMessageCommand)\n .de(de_UpdateChannelMessageCommand)\n .build() {\n}\n","import { getEndpointPlugin } from \"@smithy/middleware-endpoint\";\nimport { getSerdePlugin } from \"@smithy/middleware-serde\";\nimport { Command as $Command } from \"@smithy/smithy-client\";\nimport { commonParams } from \"../endpoint/EndpointParameters\";\nimport { de_UpdateChannelReadMarkerCommand, se_UpdateChannelReadMarkerCommand } from \"../protocols/Aws_restJson1\";\nexport { $Command };\nexport class UpdateChannelReadMarkerCommand extends $Command\n .classBuilder()\n .ep({\n ...commonParams,\n})\n .m(function (Command, cs, config, o) {\n return [\n getSerdePlugin(config, this.serialize, this.deserialize),\n getEndpointPlugin(config, Command.getEndpointParameterInstructions()),\n ];\n})\n .s(\"ChimeMessagingService\", \"UpdateChannelReadMarker\", {})\n .n(\"ChimeSDKMessagingClient\", \"UpdateChannelReadMarkerCommand\")\n .f(void 0, void 0)\n .ser(se_UpdateChannelReadMarkerCommand)\n .de(de_UpdateChannelReadMarkerCommand)\n .build() {\n}\n","import { createAggregatedClient } from \"@smithy/smithy-client\";\nimport { ChimeSDKMessagingClient } from \"./ChimeSDKMessagingClient\";\nimport { AssociateChannelFlowCommand, } from \"./commands/AssociateChannelFlowCommand\";\nimport { BatchCreateChannelMembershipCommand, } from \"./commands/BatchCreateChannelMembershipCommand\";\nimport { ChannelFlowCallbackCommand, } from \"./commands/ChannelFlowCallbackCommand\";\nimport { CreateChannelBanCommand, } from \"./commands/CreateChannelBanCommand\";\nimport { CreateChannelCommand, } from \"./commands/CreateChannelCommand\";\nimport { CreateChannelFlowCommand, } from \"./commands/CreateChannelFlowCommand\";\nimport { CreateChannelMembershipCommand, } from \"./commands/CreateChannelMembershipCommand\";\nimport { CreateChannelModeratorCommand, } from \"./commands/CreateChannelModeratorCommand\";\nimport { DeleteChannelBanCommand, } from \"./commands/DeleteChannelBanCommand\";\nimport { DeleteChannelCommand, } from \"./commands/DeleteChannelCommand\";\nimport { DeleteChannelFlowCommand, } from \"./commands/DeleteChannelFlowCommand\";\nimport { DeleteChannelMembershipCommand, } from \"./commands/DeleteChannelMembershipCommand\";\nimport { DeleteChannelMessageCommand, } from \"./commands/DeleteChannelMessageCommand\";\nimport { DeleteChannelModeratorCommand, } from \"./commands/DeleteChannelModeratorCommand\";\nimport { DeleteMessagingStreamingConfigurationsCommand, } from \"./commands/DeleteMessagingStreamingConfigurationsCommand\";\nimport { DescribeChannelBanCommand, } from \"./commands/DescribeChannelBanCommand\";\nimport { DescribeChannelCommand, } from \"./commands/DescribeChannelCommand\";\nimport { DescribeChannelFlowCommand, } from \"./commands/DescribeChannelFlowCommand\";\nimport { DescribeChannelMembershipCommand, } from \"./commands/DescribeChannelMembershipCommand\";\nimport { DescribeChannelMembershipForAppInstanceUserCommand, } from \"./commands/DescribeChannelMembershipForAppInstanceUserCommand\";\nimport { DescribeChannelModeratedByAppInstanceUserCommand, } from \"./commands/DescribeChannelModeratedByAppInstanceUserCommand\";\nimport { DescribeChannelModeratorCommand, } from \"./commands/DescribeChannelModeratorCommand\";\nimport { DisassociateChannelFlowCommand, } from \"./commands/DisassociateChannelFlowCommand\";\nimport { GetChannelMembershipPreferencesCommand, } from \"./commands/GetChannelMembershipPreferencesCommand\";\nimport { GetChannelMessageCommand, } from \"./commands/GetChannelMessageCommand\";\nimport { GetChannelMessageStatusCommand, } from \"./commands/GetChannelMessageStatusCommand\";\nimport { GetMessagingSessionEndpointCommand, } from \"./commands/GetMessagingSessionEndpointCommand\";\nimport { GetMessagingStreamingConfigurationsCommand, } from \"./commands/GetMessagingStreamingConfigurationsCommand\";\nimport { ListChannelBansCommand, } from \"./commands/ListChannelBansCommand\";\nimport { ListChannelFlowsCommand, } from \"./commands/ListChannelFlowsCommand\";\nimport { ListChannelMembershipsCommand, } from \"./commands/ListChannelMembershipsCommand\";\nimport { ListChannelMembershipsForAppInstanceUserCommand, } from \"./commands/ListChannelMembershipsForAppInstanceUserCommand\";\nimport { ListChannelMessagesCommand, } from \"./commands/ListChannelMessagesCommand\";\nimport { ListChannelModeratorsCommand, } from \"./commands/ListChannelModeratorsCommand\";\nimport { ListChannelsAssociatedWithChannelFlowCommand, } from \"./commands/ListChannelsAssociatedWithChannelFlowCommand\";\nimport { ListChannelsCommand, } from \"./commands/ListChannelsCommand\";\nimport { ListChannelsModeratedByAppInstanceUserCommand, } from \"./commands/ListChannelsModeratedByAppInstanceUserCommand\";\nimport { ListSubChannelsCommand, } from \"./commands/ListSubChannelsCommand\";\nimport { ListTagsForResourceCommand, } from \"./commands/ListTagsForResourceCommand\";\nimport { PutChannelExpirationSettingsCommand, } from \"./commands/PutChannelExpirationSettingsCommand\";\nimport { PutChannelMembershipPreferencesCommand, } from \"./commands/PutChannelMembershipPreferencesCommand\";\nimport { PutMessagingStreamingConfigurationsCommand, } from \"./commands/PutMessagingStreamingConfigurationsCommand\";\nimport { RedactChannelMessageCommand, } from \"./commands/RedactChannelMessageCommand\";\nimport { SearchChannelsCommand, } from \"./commands/SearchChannelsCommand\";\nimport { SendChannelMessageCommand, } from \"./commands/SendChannelMessageCommand\";\nimport { TagResourceCommand } from \"./commands/TagResourceCommand\";\nimport { UntagResourceCommand, } from \"./commands/UntagResourceCommand\";\nimport { UpdateChannelCommand, } from \"./commands/UpdateChannelCommand\";\nimport { UpdateChannelFlowCommand, } from \"./commands/UpdateChannelFlowCommand\";\nimport { UpdateChannelMessageCommand, } from \"./commands/UpdateChannelMessageCommand\";\nimport { UpdateChannelReadMarkerCommand, } from \"./commands/UpdateChannelReadMarkerCommand\";\nconst commands = {\n AssociateChannelFlowCommand,\n BatchCreateChannelMembershipCommand,\n ChannelFlowCallbackCommand,\n CreateChannelCommand,\n CreateChannelBanCommand,\n CreateChannelFlowCommand,\n CreateChannelMembershipCommand,\n CreateChannelModeratorCommand,\n DeleteChannelCommand,\n DeleteChannelBanCommand,\n DeleteChannelFlowCommand,\n DeleteChannelMembershipCommand,\n DeleteChannelMessageCommand,\n DeleteChannelModeratorCommand,\n DeleteMessagingStreamingConfigurationsCommand,\n DescribeChannelCommand,\n DescribeChannelBanCommand,\n DescribeChannelFlowCommand,\n DescribeChannelMembershipCommand,\n DescribeChannelMembershipForAppInstanceUserCommand,\n DescribeChannelModeratedByAppInstanceUserCommand,\n DescribeChannelModeratorCommand,\n DisassociateChannelFlowCommand,\n GetChannelMembershipPreferencesCommand,\n GetChannelMessageCommand,\n GetChannelMessageStatusCommand,\n GetMessagingSessionEndpointCommand,\n GetMessagingStreamingConfigurationsCommand,\n ListChannelBansCommand,\n ListChannelFlowsCommand,\n ListChannelMembershipsCommand,\n ListChannelMembershipsForAppInstanceUserCommand,\n ListChannelMessagesCommand,\n ListChannelModeratorsCommand,\n ListChannelsCommand,\n ListChannelsAssociatedWithChannelFlowCommand,\n ListChannelsModeratedByAppInstanceUserCommand,\n ListSubChannelsCommand,\n ListTagsForResourceCommand,\n PutChannelExpirationSettingsCommand,\n PutChannelMembershipPreferencesCommand,\n PutMessagingStreamingConfigurationsCommand,\n RedactChannelMessageCommand,\n SearchChannelsCommand,\n SendChannelMessageCommand,\n TagResourceCommand,\n UntagResourceCommand,\n UpdateChannelCommand,\n UpdateChannelFlowCommand,\n UpdateChannelMessageCommand,\n UpdateChannelReadMarkerCommand,\n};\nexport class ChimeSDKMessaging extends ChimeSDKMessagingClient {\n}\ncreateAggregatedClient(commands, ChimeSDKMessaging);\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelBansCommand, } from \"../commands/ListChannelBansCommand\";\nexport const paginateListChannelBans = createPaginator(ChimeSDKMessagingClient, ListChannelBansCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelFlowsCommand, } from \"../commands/ListChannelFlowsCommand\";\nexport const paginateListChannelFlows = createPaginator(ChimeSDKMessagingClient, ListChannelFlowsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelMembershipsForAppInstanceUserCommand, } from \"../commands/ListChannelMembershipsForAppInstanceUserCommand\";\nexport const paginateListChannelMembershipsForAppInstanceUser = createPaginator(ChimeSDKMessagingClient, ListChannelMembershipsForAppInstanceUserCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelMembershipsCommand, } from \"../commands/ListChannelMembershipsCommand\";\nexport const paginateListChannelMemberships = createPaginator(ChimeSDKMessagingClient, ListChannelMembershipsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelMessagesCommand, } from \"../commands/ListChannelMessagesCommand\";\nexport const paginateListChannelMessages = createPaginator(ChimeSDKMessagingClient, ListChannelMessagesCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelModeratorsCommand, } from \"../commands/ListChannelModeratorsCommand\";\nexport const paginateListChannelModerators = createPaginator(ChimeSDKMessagingClient, ListChannelModeratorsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelsAssociatedWithChannelFlowCommand, } from \"../commands/ListChannelsAssociatedWithChannelFlowCommand\";\nexport const paginateListChannelsAssociatedWithChannelFlow = createPaginator(ChimeSDKMessagingClient, ListChannelsAssociatedWithChannelFlowCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelsModeratedByAppInstanceUserCommand, } from \"../commands/ListChannelsModeratedByAppInstanceUserCommand\";\nexport const paginateListChannelsModeratedByAppInstanceUser = createPaginator(ChimeSDKMessagingClient, ListChannelsModeratedByAppInstanceUserCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListChannelsCommand, } from \"../commands/ListChannelsCommand\";\nexport const paginateListChannels = createPaginator(ChimeSDKMessagingClient, ListChannelsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { ListSubChannelsCommand, } from \"../commands/ListSubChannelsCommand\";\nexport const paginateListSubChannels = createPaginator(ChimeSDKMessagingClient, ListSubChannelsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","import { createPaginator } from \"@smithy/core\";\nimport { ChimeSDKMessagingClient } from \"../ChimeSDKMessagingClient\";\nimport { SearchChannelsCommand, } from \"../commands/SearchChannelsCommand\";\nexport const paginateSearchChannels = createPaginator(ChimeSDKMessagingClient, SearchChannelsCommand, \"NextToken\", \"NextToken\", \"MaxResults\");\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Message {\n constructor(type, // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n headers, payload) {\n this.type = type;\n this.headers = headers;\n this.payload = payload;\n }\n}\nexports.default = Message;\n//# sourceMappingURL=Message.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MAX_HASHABLE_LENGTH = exports.INIT = exports.KEY = exports.DIGEST_LENGTH = exports.BLOCK_SIZE = void 0;\n/**\n * @internal\n */\nexports.BLOCK_SIZE = 64;\n/**\n * @internal\n */\nexports.DIGEST_LENGTH = 32;\n/**\n * @internal\n */\nexports.KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n/**\n * @internal\n */\nexports.INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19\n];\n/**\n * @internal\n */\nexports.MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n//# sourceMappingURL=constants.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RawSha256 = void 0;\nvar constants_1 = require(\"./constants\");\n/**\n * @internal\n */\nvar RawSha256 = /** @class */ (function () {\n function RawSha256() {\n this.state = Int32Array.from(constants_1.INIT);\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @internal\n */\n this.finished = false;\n }\n RawSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error(\"Attempted to update an already finished hash.\");\n }\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n if (this.bytesHashed * 8 > constants_1.MAX_HASHABLE_LENGTH) {\n throw new Error(\"Cannot hash more than 2^53 - 1 bits\");\n }\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n if (this.bufferLength === constants_1.BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n };\n RawSha256.prototype.digest = function () {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % constants_1.BLOCK_SIZE >= constants_1.BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < constants_1.BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(constants_1.BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(constants_1.BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Uint8Array(constants_1.DIGEST_LENGTH);\n for (var i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return out;\n };\n RawSha256.prototype.hashBuffer = function () {\n var _a = this, buffer = _a.buffer, state = _a.state;\n var state0 = state[0], state1 = state[1], state2 = state[2], state3 = state[3], state4 = state[4], state5 = state[5], state6 = state[6], state7 = state[7];\n for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] =\n ((buffer[i * 4] & 0xff) << 24) |\n ((buffer[i * 4 + 1] & 0xff) << 16) |\n ((buffer[i * 4 + 2] & 0xff) << 8) |\n (buffer[i * 4 + 3] & 0xff);\n }\n else {\n var u = this.temp[i - 2];\n var t1_1 = ((u >>> 17) | (u << 15)) ^ ((u >>> 19) | (u << 13)) ^ (u >>> 10);\n u = this.temp[i - 15];\n var t2_1 = ((u >>> 7) | (u << 25)) ^ ((u >>> 18) | (u << 14)) ^ (u >>> 3);\n this.temp[i] =\n ((t1_1 + this.temp[i - 7]) | 0) + ((t2_1 + this.temp[i - 16]) | 0);\n }\n var t1 = ((((((state4 >>> 6) | (state4 << 26)) ^\n ((state4 >>> 11) | (state4 << 21)) ^\n ((state4 >>> 25) | (state4 << 7))) +\n ((state4 & state5) ^ (~state4 & state6))) |\n 0) +\n ((state7 + ((constants_1.KEY[i] + this.temp[i]) | 0)) | 0)) |\n 0;\n var t2 = ((((state0 >>> 2) | (state0 << 30)) ^\n ((state0 >>> 13) | (state0 << 19)) ^\n ((state0 >>> 22) | (state0 << 10))) +\n ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) |\n 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n };\n return RawSha256;\n}());\nexports.RawSha256 = RawSha256;\n//# sourceMappingURL=RawSha256.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertToBuffer = void 0;\nvar util_utf8_browser_1 = require(\"@aws-sdk/util-utf8-browser\");\n// Quick polyfill\nvar fromUtf8 = typeof Buffer !== \"undefined\" && Buffer.from\n ? function (input) { return Buffer.from(input, \"utf8\"); }\n : util_utf8_browser_1.fromUtf8;\nfunction convertToBuffer(data) {\n // Already a Uint8, do nothing\n if (data instanceof Uint8Array)\n return data;\n if (typeof data === \"string\") {\n return fromUtf8(data);\n }\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n return new Uint8Array(data);\n}\nexports.convertToBuffer = convertToBuffer;\n//# sourceMappingURL=convertToBuffer.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmptyData = void 0;\nfunction isEmptyData(data) {\n if (typeof data === \"string\") {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\nexports.isEmptyData = isEmptyData;\n//# sourceMappingURL=isEmptyData.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.numToUint8 = void 0;\nfunction numToUint8(num) {\n return new Uint8Array([\n (num & 0xff000000) >> 24,\n (num & 0x00ff0000) >> 16,\n (num & 0x0000ff00) >> 8,\n num & 0x000000ff,\n ]);\n}\nexports.numToUint8 = numToUint8;\n//# sourceMappingURL=numToUint8.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = void 0;\n// IE 11 does not support Array.from, so we do it manually\nfunction uint32ArrayFrom(a_lookUpTable) {\n if (!Uint32Array.from) {\n var return_array = new Uint32Array(a_lookUpTable.length);\n var a_index = 0;\n while (a_index < a_lookUpTable.length) {\n return_array[a_index] = a_lookUpTable[a_index];\n a_index += 1;\n }\n return return_array;\n }\n return Uint32Array.from(a_lookUpTable);\n}\nexports.uint32ArrayFrom = uint32ArrayFrom;\n//# sourceMappingURL=uint32ArrayFrom.js.map","\"use strict\";\n// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.uint32ArrayFrom = exports.numToUint8 = exports.isEmptyData = exports.convertToBuffer = void 0;\nvar convertToBuffer_1 = require(\"./convertToBuffer\");\nObject.defineProperty(exports, \"convertToBuffer\", { enumerable: true, get: function () { return convertToBuffer_1.convertToBuffer; } });\nvar isEmptyData_1 = require(\"./isEmptyData\");\nObject.defineProperty(exports, \"isEmptyData\", { enumerable: true, get: function () { return isEmptyData_1.isEmptyData; } });\nvar numToUint8_1 = require(\"./numToUint8\");\nObject.defineProperty(exports, \"numToUint8\", { enumerable: true, get: function () { return numToUint8_1.numToUint8; } });\nvar uint32ArrayFrom_1 = require(\"./uint32ArrayFrom\");\nObject.defineProperty(exports, \"uint32ArrayFrom\", { enumerable: true, get: function () { return uint32ArrayFrom_1.uint32ArrayFrom; } });\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Sha256 = void 0;\nvar tslib_1 = require(\"tslib\");\nvar constants_1 = require(\"./constants\");\nvar RawSha256_1 = require(\"./RawSha256\");\nvar util_1 = require(\"@aws-crypto/util\");\nvar Sha256 = /** @class */ (function () {\n function Sha256(secret) {\n this.hash = new RawSha256_1.RawSha256();\n if (secret) {\n this.outer = new RawSha256_1.RawSha256();\n var inner = bufferFromSecret(secret);\n var outer = new Uint8Array(constants_1.BLOCK_SIZE);\n outer.set(inner);\n for (var i = 0; i < constants_1.BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n this.hash.update(inner);\n this.outer.update(outer);\n // overwrite the copied key in memory\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n }\n }\n Sha256.prototype.update = function (toHash) {\n if ((0, util_1.isEmptyData)(toHash) || this.error) {\n return;\n }\n try {\n this.hash.update((0, util_1.convertToBuffer)(toHash));\n }\n catch (e) {\n this.error = e;\n }\n };\n /* This synchronous method keeps compatibility\n * with the v2 aws-sdk.\n */\n Sha256.prototype.digestSync = function () {\n if (this.error) {\n throw this.error;\n }\n if (this.outer) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n return this.outer.digest();\n }\n return this.hash.digest();\n };\n /* The underlying digest method here is synchronous.\n * To keep the same interface with the other hash functions\n * the default is to expose this as an async method.\n * However, it can sometimes be useful to have a sync method.\n */\n Sha256.prototype.digest = function () {\n return tslib_1.__awaiter(this, void 0, void 0, function () {\n return tslib_1.__generator(this, function (_a) {\n return [2 /*return*/, this.digestSync()];\n });\n });\n };\n return Sha256;\n}());\nexports.Sha256 = Sha256;\nfunction bufferFromSecret(secret) {\n var input = (0, util_1.convertToBuffer)(secret);\n if (input.byteLength > constants_1.BLOCK_SIZE) {\n var bufferHash = new RawSha256_1.RawSha256();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n var buffer = new Uint8Array(constants_1.BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n//# sourceMappingURL=jsSha256.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\ntslib_1.__exportStar(require(\"./jsSha256\"), exports);\n//# sourceMappingURL=index.js.map","const SHORT_TO_HEX = {};\nconst HEX_TO_SHORT = {};\nfor (let i = 0; i < 256; i++) {\n let encodedByte = i.toString(16).toLowerCase();\n if (encodedByte.length === 1) {\n encodedByte = `0${encodedByte}`;\n }\n SHORT_TO_HEX[i] = encodedByte;\n HEX_TO_SHORT[encodedByte] = i;\n}\nexport function fromHex(encoded) {\n if (encoded.length % 2 !== 0) {\n throw new Error(\"Hex encoded strings must have an even number length\");\n }\n const out = new Uint8Array(encoded.length / 2);\n for (let i = 0; i < encoded.length; i += 2) {\n const encodedByte = encoded.slice(i, i + 2).toLowerCase();\n if (encodedByte in HEX_TO_SHORT) {\n out[i / 2] = HEX_TO_SHORT[encodedByte];\n }\n else {\n throw new Error(`Cannot decode unrecognized sequence ${encodedByte} as hexadecimal`);\n }\n }\n return out;\n}\nexport function toHex(bytes) {\n let out = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n out += SHORT_TO_HEX[bytes[i]];\n }\n return out;\n}\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sha256_js_1 = require(\"@aws-crypto/sha256-js\");\nconst util_hex_encoding_1 = require(\"@aws-sdk/util-hex-encoding\");\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nclass DefaultSigV4 {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n constructor(chimeClient) {\n this.chimeClient = chimeClient;\n }\n makeTwoDigits(n) {\n /* istanbul ignore if */\n /* istanbul ignore else */\n if (n > 9) {\n return n.toString();\n }\n else {\n return '0' + n.toString();\n }\n }\n hmac(data, secret) {\n const hash = new sha256_js_1.Sha256(secret);\n hash.update(data);\n return hash.digest();\n }\n getDateTimeString() {\n const d = new Date();\n return (d.getUTCFullYear() +\n this.makeTwoDigits(d.getUTCMonth() + 1) +\n this.makeTwoDigits(d.getUTCDate()) +\n 'T' +\n this.makeTwoDigits(d.getUTCHours()) +\n this.makeTwoDigits(d.getUTCMinutes()) +\n this.makeTwoDigits(d.getUTCSeconds()) +\n 'Z');\n }\n getDateString(dateTimeString) {\n return dateTimeString.substring(0, dateTimeString.indexOf('T'));\n }\n getSignatureKey(key, date, regionName, serviceName) {\n return __awaiter(this, void 0, void 0, function* () {\n const kDate = yield this.hmac(date, 'AWS4' + key);\n const kRegion = yield this.hmac(regionName, kDate);\n const kService = yield this.hmac(serviceName, kRegion);\n const kSigning = yield this.hmac('aws4_request', kService);\n return kSigning;\n });\n }\n signURL(method, scheme, serviceName, hostname, path, payload, queryParams) {\n return __awaiter(this, void 0, void 0, function* () {\n const now = this.getDateTimeString();\n const today = this.getDateString(now);\n const algorithm = 'AWS4-HMAC-SHA256';\n let region = '';\n // in AWS SDK v3 region is a function\n if (this.chimeClient.config.region instanceof Function) {\n region = yield this.chimeClient.config.region();\n }\n else {\n region = this.chimeClient.config.region;\n }\n const signedHeaders = 'host';\n const canonicalHeaders = 'host:' + hostname.toLowerCase() + '\\n';\n const credentialScope = today + '/' + region + '/' + serviceName + '/' + 'aws4_request';\n let credentials = undefined;\n // in AWS SDK v3 credentials is a function\n if (this.chimeClient.config.credentials instanceof Function) {\n credentials = yield this.chimeClient.config.credentials();\n }\n else {\n credentials = this.chimeClient.config.credentials;\n }\n let params = new Map();\n params.set('X-Amz-Algorithm', [algorithm]);\n params.set('X-Amz-Credential', [\n encodeURIComponent(credentials.accessKeyId + '/' + credentialScope),\n ]);\n params.set('X-Amz-Date', [now]);\n params.set('X-Amz-Expires', ['10']);\n params.set('X-Amz-SignedHeaders', ['host']);\n if (credentials.sessionToken) {\n params.set('X-Amz-Security-Token', [encodeURIComponent(credentials.sessionToken)]);\n }\n params.set(Versioning_1.default.X_AMZN_VERSION, [encodeURIComponent(Versioning_1.default.sdkVersion)]);\n params.set(Versioning_1.default.X_AMZN_USER_AGENT, [\n encodeURIComponent(Versioning_1.default.sdkUserAgentLowResolution),\n ]);\n queryParams === null || queryParams === void 0 ? void 0 : queryParams.forEach((values, key) => {\n const encodedKey = encodeURIComponent(key);\n values.sort().forEach((value) => {\n if (!params.has(encodedKey)) {\n params.set(encodedKey, []);\n }\n params.get(encodedKey).push(encodeURIComponent(value));\n });\n });\n let canonicalQuerystring = '';\n params = new Map([...params.entries()].sort());\n params.forEach((values, key) => {\n values.forEach(value => {\n if (canonicalQuerystring.length) {\n canonicalQuerystring += '&';\n }\n canonicalQuerystring += key + '=' + value;\n });\n });\n const canonicalRequest = method +\n '\\n' +\n path +\n '\\n' +\n canonicalQuerystring +\n '\\n' +\n canonicalHeaders +\n '\\n' +\n signedHeaders +\n '\\n' +\n util_hex_encoding_1.toHex(yield this.hmac(payload));\n const hashedCanonicalRequest = util_hex_encoding_1.toHex(yield this.hmac(canonicalRequest));\n const stringToSign = 'AWS4-HMAC-SHA256\\n' +\n now +\n '\\n' +\n today +\n '/' +\n region +\n '/' +\n serviceName +\n '/aws4_request\\n' +\n hashedCanonicalRequest;\n const signingKey = yield this.getSignatureKey(credentials.secretAccessKey, today, region, serviceName);\n const signature = util_hex_encoding_1.toHex(yield this.hmac(stringToSign, signingKey));\n const finalParams = canonicalQuerystring + '&X-Amz-Signature=' + signature;\n return scheme + '://' + hostname + path + '?' + finalParams;\n });\n }\n}\nexports.default = DefaultSigV4;\n//# sourceMappingURL=DefaultSigV4.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Using an enum here to make sure we can expand on future features\nvar PrefetchOn;\n(function (PrefetchOn) {\n PrefetchOn[\"Connect\"] = \"connect\";\n})(PrefetchOn || (PrefetchOn = {}));\nexports.default = PrefetchOn;\n//# sourceMappingURL=PrefetchOn.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst client_chime_sdk_messaging_1 = require(\"@aws-sdk/client-chime-sdk-messaging\");\nconst FullJitterBackoff_1 = __importDefault(require(\"../backoff/FullJitterBackoff\"));\nconst CSPMonitor_1 = __importDefault(require(\"../cspmonitor/CSPMonitor\"));\nconst Message_1 = __importDefault(require(\"../message/Message\"));\nconst DefaultReconnectController_1 = __importDefault(require(\"../reconnectcontroller/DefaultReconnectController\"));\nconst AsyncScheduler_1 = __importDefault(require(\"../scheduler/AsyncScheduler\"));\nconst DefaultSigV4_1 = __importDefault(require(\"../sigv4/DefaultSigV4\"));\nconst DefaultWebSocketAdapter_1 = __importDefault(require(\"../websocketadapter/DefaultWebSocketAdapter\"));\nconst WebSocketReadyState_1 = __importDefault(require(\"../websocketadapter/WebSocketReadyState\"));\nconst PrefetchOn_1 = __importDefault(require(\"./PrefetchOn\"));\nclass DefaultMessagingSession {\n constructor(configuration, logger, webSocket, reconnectController, sigV4) {\n this.configuration = configuration;\n this.logger = logger;\n this.webSocket = webSocket;\n this.reconnectController = reconnectController;\n this.sigV4 = sigV4;\n this.observerQueue = new Set();\n if (!this.webSocket) {\n this.webSocket = new DefaultWebSocketAdapter_1.default(this.logger);\n }\n if (!this.reconnectController) {\n this.reconnectController = new DefaultReconnectController_1.default(configuration.reconnectTimeoutMs, new FullJitterBackoff_1.default(configuration.reconnectFixedWaitMs, configuration.reconnectShortBackoffMs, configuration.reconnectLongBackoffMs));\n }\n if (!this.sigV4) {\n this.sigV4 = new DefaultSigV4_1.default(this.configuration.chimeClient);\n }\n CSPMonitor_1.default.addLogger(this.logger);\n CSPMonitor_1.default.register();\n this.preBootstrapMessages = [];\n }\n addObserver(observer) {\n this.logger.info('adding messaging observer');\n this.observerQueue.add(observer);\n }\n removeObserver(observer) {\n this.logger.info('removing messaging observer');\n this.observerQueue.delete(observer);\n }\n start() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.isClosed()) {\n yield this.startConnecting(false);\n }\n else {\n this.logger.info('messaging session already started');\n }\n });\n }\n stop() {\n if (!this.isClosed()) {\n this.isClosing = true;\n this.webSocket.close();\n CSPMonitor_1.default.removeLogger(this.logger);\n }\n else {\n this.logger.info('no existing messaging session needs closing');\n }\n }\n forEachObserver(observerFunc) {\n for (const observer of this.observerQueue) {\n AsyncScheduler_1.default.nextTick(() => {\n if (this.observerQueue.has(observer)) {\n observerFunc(observer);\n }\n });\n }\n }\n setUpEventListeners() {\n this.webSocket.addEventListener('open', () => {\n this.openEventHandler();\n });\n this.webSocket.addEventListener('message', (event) => {\n this.receiveMessageHandler(event.data);\n });\n this.webSocket.addEventListener('close', (event) => {\n this.closeEventHandler(event);\n });\n this.webSocket.addEventListener('error', () => {\n this.logger.error(`WebSocket error`);\n });\n }\n startConnecting(reconnecting) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.startConnectingInternal(reconnecting);\n return yield new Promise((resolve, reject) => {\n this.bootstrapResolved = resolve;\n this.bootstrapRejected = reject;\n });\n });\n }\n startConnectingInternal(reconnecting) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n let endpointUrl = this.configuration.endpointUrl;\n // Moving this reconnect logic can potentially result into an infinite reconnect loop on errors.\n // Check https://github.com/aws/amazon-chime-sdk-js/issues/2372 for details.\n if (!reconnecting) {\n this.reconnectController.reset();\n }\n if (this.reconnectController.hasStartedConnectionAttempt()) {\n this.reconnectController.startedConnectionAttempt(false);\n }\n else {\n this.reconnectController.startedConnectionAttempt(true);\n }\n // reconnect needs to re-resolve endpoint url, which will also refresh credentials on client if they are expired\n if (reconnecting || endpointUrl === undefined) {\n try {\n if (this.configuration.chimeClient.getMessagingSessionEndpoint instanceof Function) {\n const response = yield this.configuration.chimeClient.getMessagingSessionEndpoint();\n // Check for aws sdk v3 with v2 style compatibility first\n if ((_a = response.Endpoint) === null || _a === void 0 ? void 0 : _a.Url) {\n endpointUrl = response.Endpoint.Url;\n }\n else {\n // Make aws sdk v2 call\n const endpoint = yield this.configuration.chimeClient\n .getMessagingSessionEndpoint()\n .promise();\n endpointUrl = endpoint.Endpoint.Url;\n }\n }\n else {\n endpointUrl = (yield this.configuration.chimeClient.send(new client_chime_sdk_messaging_1.GetMessagingSessionEndpointCommand({}))).Endpoint.Url;\n }\n this.logger.debug(`Messaging endpoint resolved to: ${endpointUrl}`);\n }\n catch (e) {\n // send artificial close code event so the\n // re-connect logic of underlying websocket client is\n // triggered in the close handler\n this.logger.error(`Messaging Session failed to resolve endpoint: ${e}`);\n const closeEvent = new CloseEvent('close', {\n wasClean: false,\n code: 4999,\n reason: 'Failed to get messaging session endpoint URL',\n bubbles: false,\n });\n this.closeEventHandler(closeEvent);\n return;\n }\n }\n const signedUrl = yield this.prepareWebSocketUrl(endpointUrl);\n this.logger.info(`opening connection to ${signedUrl}`);\n if (!reconnecting) {\n this.reconnectController.reset();\n }\n if (this.reconnectController.hasStartedConnectionAttempt()) {\n this.reconnectController.startedConnectionAttempt(false);\n }\n else {\n this.reconnectController.startedConnectionAttempt(true);\n }\n this.webSocket.create(signedUrl, [], true);\n this.forEachObserver(observer => {\n if (observer.messagingSessionDidStartConnecting) {\n observer.messagingSessionDidStartConnecting(reconnecting);\n }\n });\n this.setUpEventListeners();\n });\n }\n prepareWebSocketUrl(endpointUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n const queryParams = new Map();\n queryParams.set('userArn', [this.configuration.userArn]);\n queryParams.set('sessionId', [this.configuration.messagingSessionId]);\n if (this.configuration.prefetchOn === PrefetchOn_1.default.Connect) {\n queryParams.set('prefetch-on', [PrefetchOn_1.default.Connect]);\n }\n if (this.configuration.prefetchSortBy) {\n queryParams.set('prefetch-sort-by', [this.configuration.prefetchSortBy]);\n }\n return yield this.sigV4.signURL('GET', 'wss', 'chime', endpointUrl, '/connect', '', queryParams);\n });\n }\n isClosed() {\n return (this.webSocket.readyState() === WebSocketReadyState_1.default.None ||\n this.webSocket.readyState() === WebSocketReadyState_1.default.Closed);\n }\n openEventHandler() {\n this.reconnectController.reset();\n this.isSessionEstablished = false;\n }\n receiveMessageHandler(data) {\n try {\n const jsonData = JSON.parse(data);\n const messageType = jsonData.Headers['x-amz-chime-event-type'];\n const message = new Message_1.default(messageType, jsonData.Headers, jsonData.Payload || null);\n if (!this.isSessionEstablished && messageType === 'SESSION_ESTABLISHED') {\n // Backend connects WebSocket and then either\n // (1) Closes with WebSocket error code to reflect failure to authorize or other connection error OR\n // (2) Sends SESSION_ESTABLISHED. SESSION_ESTABLISHED indicates that all messages and events on a channel\n // the app instance user is a member of is guaranteed to be delivered on this WebSocket as long as the WebSocket\n // connection stays opened.\n this.forEachObserver(observer => {\n if (observer.messagingSessionDidStart) {\n observer.messagingSessionDidStart();\n }\n });\n this.bootstrapResolved();\n this.isSessionEstablished = true;\n // Send message and flush the queue.\n const preBootstrapMessageLength = this.preBootstrapMessages.length;\n for (let iter = 0; iter < preBootstrapMessageLength; iter++) {\n const preBootstrapMessage = this.preBootstrapMessages.shift();\n this.forEachObserver(observer => {\n this.sendMessageToObserver(observer, preBootstrapMessage);\n });\n }\n }\n else if (!this.isSessionEstablished) {\n // SESSION_ESTABLISHED is not guaranteed to be the first message, and in rare conditions a message or event from\n // a channel the member is a member of might arrive prior to SESSION_ESTABLISHED. Because SESSION_ESTABLISHED indicates\n // it is safe to bootstrap the user application without any race conditions in losing events we opt to store messages prior\n // to SESSION_ESTABLISHED being received and send when once SESSION_ESTABLISHED.\n this.preBootstrapMessages.push(message);\n return;\n }\n this.forEachObserver(observer => {\n this.sendMessageToObserver(observer, message);\n });\n }\n catch (error) {\n this.logger.error(`Messaging parsing failed: ${error}`);\n }\n }\n sendMessageToObserver(observer, message) {\n if (observer.messagingSessionDidReceiveMessage) {\n observer.messagingSessionDidReceiveMessage(message);\n }\n }\n retryConnection() {\n return this.reconnectController.retryWithBackoff(() => __awaiter(this, void 0, void 0, function* () {\n yield this.startConnecting(true);\n }), null);\n }\n closeEventHandler(event) {\n this.logger.info(`WebSocket close: ${event.code} ${event.reason}`);\n if (event.code !== 4999) {\n this.webSocket.destroy();\n }\n if (!this.isClosing && this.canReconnect(event.code) && this.retryConnection()) {\n return;\n }\n this.isClosing = false;\n if (this.isSessionEstablished) {\n this.forEachObserver(observer => {\n if (observer.messagingSessionDidStop) {\n observer.messagingSessionDidStop(event);\n }\n });\n }\n else {\n this.bootstrapRejected(event);\n }\n }\n canReconnect(closeCode) {\n // 4003 is Kicked closing event from the back end\n return (closeCode === 1001 ||\n closeCode === 1006 ||\n (closeCode >= 1011 && closeCode <= 1014) ||\n (closeCode > 4000 && closeCode !== 4002 && closeCode !== 4003 && closeCode !== 4401));\n }\n}\nexports.default = DefaultMessagingSession;\n//# sourceMappingURL=DefaultMessagingSession.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst FullJitterBackoff_1 = __importDefault(require(\"./FullJitterBackoff\"));\nclass FullJitterLimitedBackoff extends FullJitterBackoff_1.default {\n constructor(fixedWaitMs, shortBackoffMs, longBackoffMs, limit) {\n super(fixedWaitMs, shortBackoffMs, longBackoffMs);\n this.limit = limit;\n this.attempts = 0;\n }\n nextBackoffAmountMs() {\n this.attempts++;\n if (this.attempts > this.limit) {\n throw new Error('retry limit exceeded');\n }\n return super.nextBackoffAmountMs();\n }\n}\nexports.default = FullJitterLimitedBackoff;\n//# sourceMappingURL=FullJitterLimitedBackoff.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst FullJitterBackoff_1 = __importDefault(require(\"./FullJitterBackoff\"));\nconst FullJitterLimitedBackoff_1 = __importDefault(require(\"./FullJitterLimitedBackoff\"));\nclass FullJitterBackoffFactory {\n constructor(fixedWaitMs, shortBackoffMs, longBackoffMs) {\n this.fixedWaitMs = fixedWaitMs;\n this.shortBackoffMs = shortBackoffMs;\n this.longBackoffMs = longBackoffMs;\n }\n create() {\n return new FullJitterBackoff_1.default(this.fixedWaitMs, this.shortBackoffMs, this.longBackoffMs);\n }\n createWithLimit(limit) {\n return new FullJitterLimitedBackoff_1.default(this.fixedWaitMs, this.shortBackoffMs, this.longBackoffMs, limit);\n }\n}\nexports.default = FullJitterBackoffFactory;\n//# sourceMappingURL=FullJitterBackoffFactory.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Log {\n constructor(sequenceNumber, message, timestampMs, logLevel) {\n this.sequenceNumber = sequenceNumber;\n this.message = message;\n this.timestampMs = timestampMs;\n this.logLevel = logLevel;\n }\n}\nexports.default = Log;\n//# sourceMappingURL=Log.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Utils_1 = require(\"../utils/Utils\");\n/**\n * [[MessagingSessionConfiguration]] contains the information necessary to start\n * a messaging session.\n */\n/* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/explicit-module-boundary-types: 0 */\nclass MessagingSessionConfiguration {\n /**\n * Constructs a MessagingSessionConfiguration optionally with userArn, messaging session id, a messaging session\n * endpoint URL, and the chimeClient.\n *\n * endpointUrl is deprecated and should not be used. Internally it is resolved on connect via chimeClient if undefined, and\n * always re-resolved on reconnect.\n *\n * The messaging session id is to uniquely identify this messaging session for the userArn.\n * If messaging session id is passed in as null, it will be automatically generated.\n */\n constructor(userArn, messagingSessionId, endpointUrl, chimeClient) {\n this.userArn = userArn;\n this.messagingSessionId = messagingSessionId;\n this.endpointUrl = endpointUrl;\n this.chimeClient = chimeClient;\n /**\n * Maximum amount of time in milliseconds to allow for reconnecting.\n */\n this.reconnectTimeoutMs = 10 * 1000;\n /**\n * Fixed wait amount in milliseconds between reconnecting attempts.\n */\n this.reconnectFixedWaitMs = 0;\n /**\n * The short back off time in milliseconds between reconnecting attempts.\n */\n this.reconnectShortBackoffMs = 1 * 1000;\n /**\n * The long back off time in milliseconds between reconnecting attempts.\n */\n this.reconnectLongBackoffMs = 5 * 1000;\n /**\n * The enum to indicate if we want to turn on prefetch feature. Prefetch feature will send out CHANNEL_DETAILS event\n * upon websocket connection, which includes information about channel, channel messages, channel memberships etc.\n */\n this.prefetchOn = undefined;\n /**\n * The enum to indicate the sorting mechanism to use when deciding which channels to Prefetch. Prefetch feature will send out\n * CHANNEL_DETAILS event upon websocket connection, which includes information about channel, channel messages, channel memberships etc.\n * The first 50 channels matching the PrefetchSortBy will be sent. If not set, channels will be returned first by those\n * with unread messages and then those with the latest last sent message timestamp.\n */\n this.prefetchSortBy = undefined;\n if (!this.messagingSessionId) {\n this.messagingSessionId = this.generateSessionId();\n }\n }\n generateSessionId() {\n const num = new Uint32Array(1);\n Utils_1.getRandomValues(num);\n return num[0].toString();\n }\n}\nexports.default = MessagingSessionConfiguration;\n//# sourceMappingURL=MessagingSessionConfiguration.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogLevel_1 = __importDefault(require(\"./LogLevel\"));\n/**\n * MultiLogger writes logs to multiple other loggers\n */\nclass MultiLogger {\n constructor(...loggers) {\n this._loggers = loggers;\n }\n info(msg) {\n for (const logger of this._loggers) {\n logger.info(msg);\n }\n }\n warn(msg) {\n for (const logger of this._loggers) {\n logger.warn(msg);\n }\n }\n error(msg) {\n for (const logger of this._loggers) {\n logger.error(msg);\n }\n }\n debug(debugFunction) {\n let message;\n let memoized;\n if (typeof debugFunction === 'string') {\n memoized = debugFunction;\n }\n else if (debugFunction) {\n memoized = () => {\n if (!message) {\n message = debugFunction();\n }\n return message;\n };\n }\n else {\n memoized = '' + debugFunction;\n }\n for (const logger of this._loggers) {\n logger.debug(memoized);\n }\n }\n setLogLevel(level) {\n for (const logger of this._loggers) {\n logger.setLogLevel(level);\n }\n }\n getLogLevel() {\n for (const logger of this._loggers) {\n return logger.getLogLevel();\n }\n return LogLevel_1.default.OFF;\n }\n}\nexports.default = MultiLogger;\n//# sourceMappingURL=MultiLogger.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogLevel_1 = __importDefault(require(\"./LogLevel\"));\n/**\n * [[NoOpLogger]] does not log any message.\n */\nclass NoOpLogger {\n constructor(level = LogLevel_1.default.OFF) {\n this.level = level;\n }\n info(_msg) { }\n warn(_msg) { }\n error(_msg) { }\n debug(debugFunction) {\n if (LogLevel_1.default.DEBUG < this.level) {\n return;\n }\n if (typeof debugFunction !== 'string') {\n debugFunction();\n }\n }\n setLogLevel(level) {\n this.level = level;\n }\n getLogLevel() {\n return this.level;\n }\n}\nexports.default = NoOpLogger;\n//# sourceMappingURL=NoOpLogger.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst LogLevel_1 = __importDefault(require(\"./LogLevel\"));\nconst NoOpLogger_1 = __importDefault(require(\"./NoOpLogger\"));\n/**\n * [[NoOpDebugLogger]] does not log any message but does call\n * debug functions by default.\n */\nclass NoOpDebugLogger extends NoOpLogger_1.default {\n constructor() {\n super(LogLevel_1.default.DEBUG);\n }\n}\nexports.default = NoOpDebugLogger;\n//# sourceMappingURL=NoOpDebugLogger.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[NoOpDeviceBroker]] rejects requests to acquire a [[MediaStream]].\n */\nclass NoOpMediaStreamBroker {\n acquireAudioInputStream() {\n return Promise.reject();\n }\n acquireVideoInputStream() {\n return Promise.reject();\n }\n acquireDisplayInputStream(_streamConstraints) {\n return Promise.reject();\n }\n muteLocalAudioInputStream() { }\n unmuteLocalAudioInputStream() { }\n addMediaStreamBrokerObserver(_observer) { }\n removeMediaStreamBrokerObserver(_observer) { }\n}\nexports.default = NoOpMediaStreamBroker;\n//# sourceMappingURL=NoOpMediaStreamBroker.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst FullJitterBackoff_1 = __importDefault(require(\"../backoff/FullJitterBackoff\"));\nconst DefaultEventController_1 = __importDefault(require(\"../eventcontroller/DefaultEventController\"));\nconst NoOpDebugLogger_1 = __importDefault(require(\"../logger/NoOpDebugLogger\"));\nconst NoOpMediaStreamBroker_1 = __importDefault(require(\"../mediastreambroker/NoOpMediaStreamBroker\"));\nconst MeetingSessionConfiguration_1 = __importDefault(require(\"../meetingsession/MeetingSessionConfiguration\"));\nconst MeetingSessionCredentials_1 = __importDefault(require(\"../meetingsession/MeetingSessionCredentials\"));\nconst MeetingSessionStatus_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatus\"));\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"../meetingsession/MeetingSessionStatusCode\"));\nconst MeetingSessionURLs_1 = __importDefault(require(\"../meetingsession/MeetingSessionURLs\"));\nconst DefaultReconnectController_1 = __importDefault(require(\"../reconnectcontroller/DefaultReconnectController\"));\nconst DefaultWebSocketAdapter_1 = __importDefault(require(\"../websocketadapter/DefaultWebSocketAdapter\"));\nconst DefaultAudioVideoController_1 = __importDefault(require(\"./DefaultAudioVideoController\"));\nclass NoOpAudioVideoController extends DefaultAudioVideoController_1.default {\n constructor(configuration) {\n const emptyConfiguration = new MeetingSessionConfiguration_1.default();\n emptyConfiguration.meetingId = '';\n emptyConfiguration.externalMeetingId = '';\n emptyConfiguration.credentials = new MeetingSessionCredentials_1.default();\n emptyConfiguration.credentials.attendeeId = '';\n emptyConfiguration.credentials.joinToken = '';\n emptyConfiguration.urls = new MeetingSessionURLs_1.default();\n emptyConfiguration.urls.turnControlURL = '';\n emptyConfiguration.urls.audioHostURL = '';\n emptyConfiguration.urls.signalingURL = 'wss://localhost/';\n const noOpLogger = new NoOpDebugLogger_1.default();\n super(configuration ? configuration : emptyConfiguration, noOpLogger, new DefaultWebSocketAdapter_1.default(new NoOpDebugLogger_1.default()), new NoOpMediaStreamBroker_1.default(), new DefaultReconnectController_1.default(0, new FullJitterBackoff_1.default(0, 0, 0)), new DefaultEventController_1.default(configuration ? configuration : emptyConfiguration, noOpLogger));\n }\n setAudioProfile(_audioProfile) { }\n start() { }\n stop() { }\n promoteToPrimaryMeeting(_) {\n return Promise.resolve(new MeetingSessionStatus_1.default(MeetingSessionStatusCode_1.default.OK));\n }\n demoteFromPrimaryMeeting() { }\n}\nexports.default = NoOpAudioVideoController;\n//# sourceMappingURL=NoOpAudioVideoController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NoOpDeviceControllerWithEventController = void 0;\nconst NoOpMediaStreamBroker_1 = __importDefault(require(\"../mediastreambroker/NoOpMediaStreamBroker\"));\nconst VideoQualitySettings_1 = __importDefault(require(\"./VideoQualitySettings\"));\nclass NoOpDeviceController extends NoOpMediaStreamBroker_1.default {\n constructor(_options) {\n super();\n this.destroyed = false;\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyed = true;\n });\n }\n listAudioInputDevices() {\n return Promise.resolve([]);\n }\n listVideoInputDevices() {\n return Promise.resolve([]);\n }\n listAudioOutputDevices() {\n return Promise.resolve([]);\n }\n startAudioInput(_device) {\n return Promise.reject();\n }\n stopAudioInput() {\n return Promise.resolve();\n }\n startVideoInput(_device) {\n return Promise.reject();\n }\n stopVideoInput() {\n return Promise.resolve();\n }\n chooseAudioOutput(_deviceId) {\n return Promise.reject();\n }\n addDeviceChangeObserver(_observer) { }\n removeDeviceChangeObserver(_observer) { }\n createAnalyserNodeForAudioInput() {\n return null;\n }\n startVideoPreviewForVideoInput(_element) { }\n stopVideoPreviewForVideoInput(_element) { }\n setDeviceLabelTrigger(_trigger) { }\n mixIntoAudioInput(_stream) {\n return null;\n }\n chooseVideoInputQuality(_width, _height, _frameRate) { }\n getVideoInputQualitySettings() {\n return VideoQualitySettings_1.default.VideoDisabled;\n }\n}\nexports.default = NoOpDeviceController;\nclass NoOpDeviceControllerWithEventController extends NoOpDeviceController {\n constructor(eventController) {\n super();\n this.eventController = eventController;\n }\n}\nexports.NoOpDeviceControllerWithEventController = NoOpDeviceControllerWithEventController;\n//# sourceMappingURL=NoOpDeviceController.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass NoOpEventReporter {\n constructor() { }\n reportEvent(_ts, _name, _attributes) {\n return;\n }\n start() { }\n stop() { }\n}\nexports.default = NoOpEventReporter;\n//# sourceMappingURL=NoOpEventReporter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass NoOpTask {\n cancel() { }\n name() {\n return 'NoOpTask';\n }\n run() {\n return Promise.resolve();\n }\n setParent(_parentTask) { }\n}\nexports.default = NoOpTask;\n//# sourceMappingURL=NoOpTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass NoOpVideoElementFactory {\n create() {\n const element = {\n clientWidth: 400,\n clientHeight: 300,\n width: 400,\n height: 300,\n videoWidth: 400,\n videoHeight: 300,\n style: {\n transform: '',\n },\n hasAttribute: () => {\n return false;\n },\n removeAttribute: () => { },\n setAttribute: () => { },\n srcObject: false,\n paused: true,\n pause: () => {\n element.paused = true;\n },\n play: () => {\n element.paused = false;\n return Promise.resolve();\n },\n };\n // @ts-ignore\n return element;\n }\n}\nexports.default = NoOpVideoElementFactory;\n//# sourceMappingURL=NoOpVideoElementFactory.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultVideoCaptureAndEncodeParameter_1 = __importDefault(require(\"../videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter\"));\nclass NoVideoUplinkBandwidthPolicy {\n constructor() { }\n updateConnectionMetric(_metrics) { }\n chooseMediaTrackConstraints() {\n return {};\n }\n chooseEncodingParameters() {\n return new Map();\n }\n updateIndex(_videoIndex) { }\n wantsResubscribe() {\n return false;\n }\n chooseCaptureAndEncodeParameters() {\n return new DefaultVideoCaptureAndEncodeParameter_1.default(0, 0, 0, 0, false);\n }\n maxBandwidthKbps() {\n return 0;\n }\n setIdealMaxBandwidthKbps(_idealMaxBandwidthKbps) { }\n setHasBandwidthPriority(_hasBandwidthPriority) { }\n setHighResolutionFeatureEnabled(_enabled) { }\n wantsVideoDependencyDescriptorRtpHeaderExtension() {\n return false;\n }\n}\nexports.default = NoVideoUplinkBandwidthPolicy;\n//# sourceMappingURL=NoVideoUplinkBandwidthPolicy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst IntervalScheduler_1 = __importDefault(require(\"../scheduler/IntervalScheduler\"));\nconst Log_1 = __importDefault(require(\"./Log\"));\nconst LogLevel_1 = __importDefault(require(\"./LogLevel\"));\n/**\n * `POSTLogger` publishes log messages in batches to a URL\n * supplied during its construction.\n *\n * Be sure to call {@link POSTLogger.destroy} when you're done\n * with the logger in order to avoid leaks.\n */\nclass POSTLogger {\n constructor(options) {\n this.logCapture = [];\n this.lock = false;\n this.sequenceNumber = 0;\n const { url, batchSize = POSTLogger.BATCH_SIZE, intervalMs = POSTLogger.INTERVAL_MS, logLevel = LogLevel_1.default.WARN, metadata, headers, } = options;\n this.url = url;\n this.batchSize = batchSize;\n this.intervalMs = intervalMs;\n this.logLevel = logLevel;\n this.metadata = metadata;\n this.headers = headers;\n this.start();\n this.eventListener = () => {\n this.stop();\n };\n this.addEventListener();\n }\n addEventListener() {\n if (!this.eventListener || !('window' in global) || !window.addEventListener) {\n return;\n }\n window.addEventListener('unload', this.eventListener);\n }\n removeEventListener() {\n if (!this.eventListener || !('window' in global) || !window.removeEventListener) {\n return;\n }\n window.removeEventListener('unload', this.eventListener);\n }\n debug(debugFunction) {\n if (LogLevel_1.default.DEBUG < this.logLevel) {\n return;\n }\n if (typeof debugFunction === 'string') {\n this.log(LogLevel_1.default.DEBUG, debugFunction);\n }\n else if (debugFunction) {\n this.log(LogLevel_1.default.DEBUG, debugFunction());\n }\n else {\n this.log(LogLevel_1.default.DEBUG, '' + debugFunction);\n }\n }\n info(msg) {\n this.log(LogLevel_1.default.INFO, msg);\n }\n warn(msg) {\n this.log(LogLevel_1.default.WARN, msg);\n }\n error(msg) {\n this.log(LogLevel_1.default.ERROR, msg);\n }\n setLogLevel(logLevel) {\n this.logLevel = logLevel;\n }\n getLogLevel() {\n return this.logLevel;\n }\n getLogCaptureSize() {\n return this.logCapture.length;\n }\n start() {\n this.addEventListener();\n this.intervalScheduler = new IntervalScheduler_1.default(this.intervalMs);\n this.intervalScheduler.start(() => __awaiter(this, void 0, void 0, function* () {\n if (this.lock === true || this.getLogCaptureSize() === 0) {\n return;\n }\n this.lock = true;\n const batch = this.logCapture.slice(0, this.batchSize);\n const body = this.makeRequestBody(batch);\n try {\n const response = yield fetch(this.url, Object.assign({ method: 'POST', body }, (this.headers\n ? {\n headers: this.headers,\n }\n : {})));\n if (response.status === 200) {\n this.logCapture = this.logCapture.slice(batch.length);\n }\n }\n catch (error) {\n console.warn('[POSTLogger] ' + error.message);\n }\n finally {\n this.lock = false;\n }\n }));\n }\n stop() {\n var _a;\n // Clean up to avoid resource leaks.\n (_a = this.intervalScheduler) === null || _a === void 0 ? void 0 : _a.stop();\n this.intervalScheduler = undefined;\n this.removeEventListener();\n const body = this.makeRequestBody(this.logCapture);\n navigator.sendBeacon(this.url, body);\n }\n /**\n * Permanently clean up the logger. A new logger must be created to\n * resume logging.\n */\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n this.stop();\n this.metadata = undefined;\n this.headers = undefined;\n this.logCapture = [];\n this.sequenceNumber = 0;\n this.lock = false;\n this.batchSize = 0;\n this.intervalMs = 0;\n this.url = undefined;\n });\n }\n makeRequestBody(batch) {\n return JSON.stringify(Object.assign(Object.assign({}, this.metadata), { logs: batch }));\n }\n log(type, msg) {\n if (type < this.logLevel) {\n return;\n }\n const now = Date.now();\n // Handle undefined.\n this.logCapture.push(new Log_1.default(this.sequenceNumber, msg, now, LogLevel_1.default[type]));\n this.sequenceNumber += 1;\n }\n}\nexports.default = POSTLogger;\nPOSTLogger.BATCH_SIZE = 85;\nPOSTLogger.INTERVAL_MS = 2000;\n//# sourceMappingURL=POSTLogger.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Using an enum here to make sure we can expand on future features\nvar PrefetchSortBy;\n(function (PrefetchSortBy) {\n PrefetchSortBy[\"Unread\"] = \"unread\";\n PrefetchSortBy[\"LastMessageTimestamp\"] = \"last-message-timestamp\";\n})(PrefetchSortBy || (PrefetchSortBy = {}));\nexports.default = PrefetchSortBy;\n//# sourceMappingURL=PrefetchSortBy.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * [[RealtimeAttendeePositionInFrame]] information about the attendee's place in the frame.\n */\nclass RealtimeAttendeePositionInFrame {\n constructor() {\n /**\n * Index of attendee update in the frame starting at zero\n */\n this.attendeeIndex = null;\n /**\n * Number of total attendee updates in the frame\n */\n this.attendeesInFrame = null;\n }\n}\nexports.default = RealtimeAttendeePositionInFrame;\n//# sourceMappingURL=RealtimeAttendeePositionInFrame.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst BaseTask_1 = __importDefault(require(\"./BaseTask\"));\n/**\n * [[RunnableTask]] Task wrapper for any Promised-operation\n */\nclass RunnableTask extends BaseTask_1.default {\n constructor(logger, fn, taskName = 'RunnableTask') {\n super(logger);\n this.fn = fn;\n this.taskName = taskName;\n }\n run() {\n return this.fn().then(() => { });\n }\n}\nexports.default = RunnableTask;\n//# sourceMappingURL=RunnableTask.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * This class simplifies the process of defining a transform device that\n * does not modify its input device constraints, and provides only a single audio node\n * to apply transforms.\n *\n * Subclass `SingleNodeAudioTransformDevice`, implementing `createSingleAudioNode`.\n */\nclass SingleNodeAudioTransformDevice {\n constructor(inner) {\n this.inner = inner;\n }\n mute(_muted) {\n return __awaiter(this, void 0, void 0, function* () { });\n }\n /**\n * `stop` should be called by the application to free any resources associated\n * with the device (e.g., workers).\n *\n * After this is called, the device should be discarded.\n */\n stop() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n (_a = this.node) === null || _a === void 0 ? void 0 : _a.disconnect();\n });\n }\n /**\n * Return the inner {@link Device} that the device controller should select as part\n * of the application of this `AudioTransformDevice`.\n */\n intrinsicDevice() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.inner;\n });\n }\n /**\n * Optionally return a pair of `AudioNode`s that should be connected to the applied inner\n * device. The two nodes can be the same, indicating the smallest possible subgraph.\n *\n * @param context The `AudioContext` to use when instantiating the nodes.\n */\n createAudioNode(context) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n (_a = this.node) === null || _a === void 0 ? void 0 : _a.disconnect();\n this.node = yield this.createSingleAudioNode(context);\n return {\n start: this.node,\n end: this.node,\n };\n });\n }\n}\nexports.default = SingleNodeAudioTransformDevice;\n//# sourceMappingURL=SingleNodeAudioTransformDevice.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass TranscriptAlternative {\n}\nexports.default = TranscriptAlternative;\n//# sourceMappingURL=TranscriptAlternative.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n* When redacting personally identifiable information (PII) from a streaming transcription, Amazon Transcribe replaces each identified instance of PII with [PII] in your transcript.\n* An additional option available for streaming audio is PII identification.\n* When you activate PII Identification, Amazon Transcribe labels the PII in your transcription results under an Entities object.\n* PII identification and redaction for streaming jobs is performed only upon complete transcription of the audio segments.\n* category refers to whether the entity is a PII or PHI data.\n* confidence refers to the confidence that the speech it flagged for redaction/identification is truly PII. Confidence value ranges from 0 to 1 inclusive.\n* type refers to the type of PII/PHI data that is identified. The current supported type values are: BANK_ACCOUNT_NUMBER, BANK_ROUTING, CREDIT_DEBIT_NUMBER, CREDIT_DEBIT_CVV, CREDIT_DEBIT_EXPIRY, PIN, EMAIL, ADDRESS, NAME, PHONE, SSN.\n* type is only available in case of engine transcribe and not in medical transcribe\n* type can be expected to change and grow as Transcribe evolves\n* endTimeMs and startTimeMs are epoch timestamps in milliseconds\n* Sample Redacted PII Data would look similar to this :\n* \"Entities\": [\n {\n \"Content\": \"[NAME]\",\n \"Category\": \"PII\",\n \"Type\": \"NAME\",\n \"StartTime\" : 1636493289421,\n \"EndTime\" : 1636493290016,\n \"Confidence\": 0.9989\n }\n ]\n* Sample PII Identified data would look similar to this :\n* \"Entities\": [\n {\n \"Content\": \"janet smithy\",\n \"Category\": \"PII\",\n \"Type\": \"NAME\",\n \"StartTime\" : 1636493289421,\n \"EndTime\" : 1636493290016,\n \"Confidence\": 0.9989\n }\n ]\n*/\nclass TranscriptEntity {\n}\nexports.default = TranscriptEntity;\n//# sourceMappingURL=TranscriptEntity.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass TranscriptItem {\n}\nexports.default = TranscriptItem;\n//# sourceMappingURL=TranscriptItem.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n* When using automatic language identification for streaming transcription,\n* Amazon Transcribe provides the language codes of the identified languages and their associated confidence scores.\n* languageCode refers to one of language code from the set of languageOptions provided during start transcription call\n* score refers to the confidence score is a value between zero and one; a larger value indicates a higher confidence in the identified language.\n* Sample LanguageWithScore would look similar to this :\n* \"LanguageIdentification\": [\n {\n \"LanguageCode\": \"en-US\",\n \"Score\": 0.805\n },\n {\n \"LanguageCode\": \"ja-JP\",\n \"Score\": 0.195\n }\n ]\n*/\nclass TranscriptLanguageWithScore {\n}\nexports.default = TranscriptLanguageWithScore;\n//# sourceMappingURL=TranscriptLanguageWithScore.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass TranscriptResult {\n}\nexports.default = TranscriptResult;\n//# sourceMappingURL=TranscriptResult.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DeferredPromise = void 0;\n/**\n * [[DeferredPromise]] Is a wrapper around a javascript promise that\n * will allow us to resolve and reject the promise from outside of the\n * promise's executor block.\n */\nclass DeferredPromise {\n constructor() {\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n /**\n * Get the promise associated with the DeferredPromise.\n * @returns Promise\n */\n getPromise() {\n return this.promise;\n }\n /**\n * Resolve this.promise.\n */\n resolvePromise(resolveParameter) {\n this.resolve(resolveParameter);\n }\n /**\n * Resolve this.promise with a resolveParameter. Then,\n * replace the resolved promise with a new promise.\n */\n resolveAndReplacePromise(resolveParameter) {\n this.resolve(resolveParameter);\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n /**\n * Reject this.promise.\n */\n rejectPromise(rejectError) {\n this.reject(rejectError);\n }\n /**\n * Reject this.promise with a reject parameter. Then,\n * replace the rejected promise with a new promise.\n */\n rejectAndReplacePromise(rejectError) {\n this.reject(rejectError);\n this.promise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n}\nexports.DeferredPromise = DeferredPromise;\n//# sourceMappingURL=DeferredPromise.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FXLIB_PATH = exports.WORKER_PATH = exports.CDN_BASE_PATH = exports.RESOURCE_CONSTRAINTS = exports.SEGMENTATION_MODEL = exports.DEFAULT_STREAM_PARAMETERS = exports.WORKER_MSG = void 0;\n// These are constants relating to communication between the VideoFxProcessor\n// and the VideoFxEngine\nexports.WORKER_MSG = {\n BUILD_ENGINE_REQUEST: 'BuildEngineRequest',\n BUILD_ENGINE_RESPONSE: 'BuildEngineResponse',\n PERFORM_SEGMENTATION_REQUEST: 'PerformSegmentationRequest',\n PERFORM_SEGMENTATION_RESPONSE: 'PerformSegmentationResponse',\n PERFORM_SEGMENTATION_SAB_REQUEST: 'PerformSegmentationSABRequest',\n PERFORM_SEGMENTATION_SAB_RESPONSE: 'PerformSegmentationSABResponse',\n DESTROY_ASSETS_REQUEST: 'DestroyAssetsRequest',\n DESTROY_ASSETS_RESPONSE: 'DestroyAssetsResponse',\n CLOSE_WORKER_REQUEST: 'CloseWorkerRequest',\n};\nexports.DEFAULT_STREAM_PARAMETERS = {\n FRAMES_PER_SECOND: 15,\n WIDTH_IN_PIXEL: 960,\n HEIGHT_IN_PIXEL: 540,\n CHANNEL_COUNT: 4,\n};\n// These are constants relating to the status of different processes that get returned\n// by the VideoFxEngine\nexports.SEGMENTATION_MODEL = {\n LOAD_SUCCESS: 2,\n WIDTH_IN_PIXELS: 176,\n HEIGHT_IN_PIXELS: 160,\n};\n// These are constants relating to resource constraints\nexports.RESOURCE_CONSTRAINTS = {\n DEFAULT_PROCESSING_BUDGET_PER_FRAME: 50,\n // Segmenation throttling constants\n SEGMENTATION_DEFAULT_FRAMES_PER_SEGMENTATION: 1,\n SEGMENTATION_SAMPLING_PERIOD_FRAME_COUNT: 500,\n // Blur throttling constants\n BLUR_DEFAULT_CYCLE_PERCENTAGE: 10,\n BLUR_SAMPLING_PERIOD_FRAME_COUNT: 1000,\n // General constants for throttling blur and segmentation\n MIN_PROCESSING_BUDGET: 0,\n MAX_PROCESSING_BUDGET: 100,\n};\nexports.CDN_BASE_PATH = 'https://static.sdkassets.chime.aws';\nconst MFX_ASSET_PATH = '/ml_media_fx/otherassets';\nexports.WORKER_PATH = `${MFX_ASSET_PATH}/worker.js`;\nexports.FXLIB_PATH = `${MFX_ASSET_PATH}/fxlib.js`;\n//# sourceMappingURL=VideoFxConstants.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VideoFxCanvasOpsManager = void 0;\nconst VideoFxConstants_1 = require(\"./VideoFxConstants\");\n/**\n * [[VideoFxCanvasOpsManager]] Mechanism drives the canvas based operations\n * for the VideoFxProcessor. This includes input stream resizing to segmentation model\n * dimensions and managing the canvas loading for background replacement.\n */\nclass VideoFxCanvasOpsManager {\n constructor(streamParameters, outputCanvas) {\n this.streamParameters = streamParameters;\n this.outputCanvas = outputCanvas;\n this.configureCanvasPipeline();\n }\n /**\n * Generate the raw image data in a format that is directly importable into\n * the segmentation model\n * @param inputCanvas\n * @returns ImageData\n */\n getInferenceInputData(inputCanvas) {\n // Resize our full resolution frame into a new canvas scaled to the\n // size of our segmentation model\n this.inferenceCtx.save();\n this.inferenceCtx.scale(this.horizontalResizeScalar, this.verticalResizeScalar);\n this.inferenceCtx.drawImage(inputCanvas, 0, 0);\n this.inferenceCtx.restore();\n // Now we can directly take image data that is the desired size of\n // of our segmentation model linput\n const inferenceInputData = this.inferenceCtx.getImageData(0, 0, VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS, VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS);\n return inferenceInputData;\n }\n /**\n * Reconfigure the canvas operations/pipeline to fit the dimensions of the new\n * video stream, and resize background replacement canvas.\n * @param streamParameters an VideoFxStreamParameters object specifying stream dimensions\n */\n configureForStreamParameters(streamParameters) {\n return __awaiter(this, void 0, void 0, function* () {\n this.streamParameters = streamParameters;\n this.outputCanvas.width = this.streamParameters.width;\n this.outputCanvas.height = this.streamParameters.height;\n // Resize background replacement canvas -- if it exists\n if (this.backgroundReplacementCanvas) {\n const resizedCanvas = document.createElement('canvas');\n resizedCanvas.width = this.streamParameters.width;\n resizedCanvas.height = this.streamParameters.height;\n resizedCanvas\n .getContext('2d')\n .drawImage(this.backgroundReplacementCanvas, 0, 0, this.streamParameters.width, this.streamParameters.height);\n this.backgroundReplacementCanvas = resizedCanvas;\n }\n this.configureCanvasPipeline();\n });\n }\n /**\n * Configure the inference canvas so that write operations to the canvas\n * result in an image resizing.\n */\n configureCanvasPipeline() {\n // Create new inference canvas and context\n this.inferenceCanvas = document.createElement('canvas');\n this.inferenceCtx = this.inferenceCanvas.getContext('2d', {\n willReadFrequently: true,\n });\n // Configure the resize operation, which will be utilized by calling scale\n // and then drawing any sized input to the canvas\n this.inferenceCanvas.width = VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS;\n this.inferenceCanvas.height = VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS;\n this.horizontalResizeScalar = VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS / this.streamParameters.width;\n this.verticalResizeScalar = VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS / this.streamParameters.height;\n }\n /**\n * Return the background replacement canvas\n * @returns HTMLCanvasElement\n */\n getBackgroundReplacementCanvas() {\n return this.backgroundReplacementCanvas;\n }\n /**\n * Attempt to load custom replacement background image from URL, or the default background color.\n * The backgroundReplacementCanvas is then set from the loaded image.\n * @param effectConfig\n */\n loadReplacementBackground(effectConfig) {\n return __awaiter(this, void 0, void 0, function* () {\n const imageURL = effectConfig.backgroundReplacement.backgroundImageURL;\n const defaultColor = effectConfig.backgroundReplacement.defaultColor;\n if (imageURL) {\n try {\n const backgroundImage = yield this.loadImage(imageURL);\n this.backgroundReplacementImage = backgroundImage;\n this.resizeAndSetReplacementImage(this.backgroundReplacementImage);\n }\n catch (error) /* istanbul ignore next */ {\n // The following can only happen due to an intermittent network issue.\n this.logger.error(error);\n throw new Error('Failed to set the replacement image.');\n }\n }\n else {\n this.resizeAndSetReplacementColor(defaultColor);\n }\n });\n }\n /**\n * Draw loaded image on a canvas sized to the stream parameters, which is then set to the\n * backgroundReplacementCanvas member variable.\n * @param backgroundImage\n */\n resizeAndSetReplacementImage(backgroundImage) {\n const resizedCanvas = document.createElement('canvas');\n const resizedCtx = resizedCanvas.getContext('2d');\n resizedCanvas.width = this.streamParameters.width;\n resizedCanvas.height = this.streamParameters.height;\n resizedCtx.drawImage(backgroundImage, 0, 0, this.streamParameters.width, this.streamParameters.height);\n this.backgroundReplacementCanvas = resizedCanvas;\n }\n /**\n * Fill default color on a canvas sized to the stream parameters, which is then set to the\n * backgroundReplacementCanvas member variable.\n * @param defaultColor\n */\n resizeAndSetReplacementColor(defaultColor) {\n const resizedCanvas = document.createElement('canvas');\n const resizedCtx = resizedCanvas.getContext('2d');\n resizedCanvas.width = this.streamParameters.width;\n resizedCanvas.height = this.streamParameters.height;\n resizedCtx.fillStyle = defaultColor;\n resizedCtx.fillRect(0, 0, this.streamParameters.width, this.streamParameters.height);\n this.backgroundReplacementCanvas = resizedCanvas;\n }\n /**\n * Attempt to load background image from URL.\n * @param backgroundImageURL\n * @returns Promise\n */\n loadImage(backgroundImageURL) {\n return __awaiter(this, void 0, void 0, function* () {\n // Attempt to fetch the image\n const image = yield fetch(backgroundImageURL).catch(error => {\n this.logger.error(error.toString());\n // Error returned in unit tests from mock fetch is non-compatible\n /* istanbul ignore next */\n throw new Error('Failed to fetch image.');\n });\n // Convert successful fetch into an HTMLImageElement\n const imageBlob = yield image.blob();\n const img = new Image();\n img.src = URL.createObjectURL(imageBlob);\n return new Promise((resolve, reject) => {\n img.onload = () => {\n resolve(img);\n };\n img.onerror = error => {\n reject(error);\n };\n });\n });\n }\n}\nexports.VideoFxCanvasOpsManager = VideoFxCanvasOpsManager;\n//# sourceMappingURL=VideoFxCanvasOpsManager.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VideoFxSegmentationRateManager = void 0;\nconst VideoFxConstants_1 = require(\"./VideoFxConstants\");\n/**\n * [[VideoFxSegmentationRateManager]] Mechanism that can be used to maximize\n * frequency of the segmentation operations while maintaining a target amount\n * of resource utilization.\n */\nclass VideoFxSegmentationRateManager {\n constructor(logger, targetSegmentationCycleTime) {\n this.logger = logger;\n // Max amount of compute we want to offer to action (converted from\n // percentage to decimal)\n this.targetSegmentationCyclePercentage = targetSegmentationCycleTime / 100;\n // Variables for recording timing within cycle\n this.frameCountOverSamplingPeriod = 0;\n this.totalSegmentationDurationOverSamplingPeriod = 0;\n this.samplingPeriodStartTime = performance.now();\n this.framesPerSegmentation = VideoFxConstants_1.RESOURCE_CONSTRAINTS.SEGMENTATION_DEFAULT_FRAMES_PER_SEGMENTATION;\n }\n /**\n * Invoked on every frame to increment the running count of frames being processed\n */\n submitFrame() {\n this.frameCountOverSamplingPeriod++;\n }\n /**\n * Invoked on every frame to coordinate when the segmentation should be\n * executed so that we are maintaing a segmentation rate of once per every\n * framesPerSegmentation frames.\n * @returns boolean for whether or not we want to perform an action on the current\n * frame\n */\n shouldApplySegmentation() {\n return this.frameCountOverSamplingPeriod % this.framesPerSegmentation === 0;\n }\n /**\n * Starts the timing of the current action\n */\n startSegmentation() {\n this.frameSegmentationStartTime = performance.now();\n }\n /**\n * Invoked after the action to notify the compute manager. Afterwards the\n * manager will make adjustments to action rates to maintain a value below compute\n * ceiling\n */\n completeSegmentation() {\n this.totalSegmentationDurationOverSamplingPeriod +=\n performance.now() - this.frameSegmentationStartTime;\n // Check if the sampling period has ended. If so, check if frames per\n // segmentation needs to be updated\n if (this.frameCountOverSamplingPeriod >=\n VideoFxConstants_1.RESOURCE_CONSTRAINTS.SEGMENTATION_SAMPLING_PERIOD_FRAME_COUNT) {\n this.adjustFramesPerSegmentation(this.totalSegmentationDurationOverSamplingPeriod /\n (performance.now() - this.samplingPeriodStartTime));\n }\n }\n /**\n * Increase or decrease the frames per segmentation so that we remain as performant as possible,\n * but also below the targetSegmentationCycleTime\n * @param currentSegmentationCycleTime Current ratio of frame processing allocated to a specific action\n */\n adjustFramesPerSegmentation(currentSegmentationCycleTime) {\n // Compute is too high -> increase action period (slow down)\n if (currentSegmentationCycleTime > this.targetSegmentationCyclePercentage) {\n this.framesPerSegmentation++;\n this.logger.info(`Segmentation cycle percentage above the configured maximal value. ` +\n `Decreasing segmentation rate to 1 segmentation per ` +\n `${this.framesPerSegmentation} frames`);\n // Compute is too low -> decrease action period (speed up)\n }\n else if (this.framesPerSegmentation > 1 &&\n currentSegmentationCycleTime < this.targetSegmentationCyclePercentage) {\n this.framesPerSegmentation--;\n this.logger.info(`Segmentation cycle percentage below the configured maximal value. ` +\n `Increasing segmentation rate to 1 segmentation per ` +\n `${this.framesPerSegmentation} frames`);\n }\n // Reset for next compute sample/cycle\n this.totalSegmentationDurationOverSamplingPeriod = 0;\n this.frameCountOverSamplingPeriod = 0;\n this.samplingPeriodStartTime = performance.now();\n }\n}\nexports.VideoFxSegmentationRateManager = VideoFxSegmentationRateManager;\n//# sourceMappingURL=VideoFxSegmentationRateManager.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fetch_1 = require(\"../../libs/voicefocus/fetch\");\nconst loader_1 = require(\"../../libs/voicefocus/loader\");\nconst support_1 = require(\"../../libs/voicefocus/support\");\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\nconst NoOpLogger_1 = __importDefault(require(\"../logger/NoOpLogger\"));\nconst Utils_1 = require(\"../utils/Utils\");\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nconst CanvasVideoFrameBuffer_1 = __importDefault(require(\"../videoframeprocessor/CanvasVideoFrameBuffer\"));\nconst DeferredPromise_1 = require(\"./DeferredPromise\");\nconst VideoFxCanvasOpsManager_1 = require(\"./VideoFxCanvasOpsManager\");\nconst VideoFxConstants_1 = require(\"./VideoFxConstants\");\nconst VideoFxSegmentationRateManager_1 = require(\"./VideoFxSegmentationRateManager\");\n/**\n * [[VideoFxProcessor]] Mechanism that drives the data transformation\n * of individual video frames to apply ML-based background blur and\n * background replacement effects on the video stream.\n */\nclass VideoFxProcessor {\n /**\n * Initializes a new instance of [[VideoFxProcessor]] with a default NoOp [[VideoFxConfig]].\n * @param logger\n * @param processingBudgetPerFrame throttling constraint for processing\n * @param eventController EventController object to manage events\n */\n constructor(logger, processingBudgetPerFrame = VideoFxConstants_1.RESOURCE_CONSTRAINTS.DEFAULT_PROCESSING_BUDGET_PER_FRAME, eventController) {\n this.logger = logger;\n // Configure the buffer for where output frames will be placed\n this.outputCanvas = document.createElement('canvas');\n this.canvasVideoFrameBuffer = new CanvasVideoFrameBuffer_1.default(this.outputCanvas);\n // Validate the inputted resource constraint\n try {\n this.validateProcessingBudgetPerFrame(processingBudgetPerFrame);\n }\n catch (error) {\n this.logger.error(error);\n throw new Error(`Cannot instantiate VideoFxProcessor due to invalid ` +\n `processingBudgetPerFrame of ${processingBudgetPerFrame}`);\n }\n if (eventController) {\n this.eventController = eventController;\n }\n // Create a basic effectConfig (noOp)\n this.effectConfig = {\n backgroundBlur: {\n isEnabled: false,\n strength: 'low',\n },\n backgroundReplacement: {\n isEnabled: false,\n backgroundImageURL: null,\n defaultColor: 'black',\n },\n };\n // This promise object will be used to coordinate timing of sending/receiving frames from engine\n this.segmentationRequestPromise = new DeferredPromise_1.DeferredPromise();\n // Configure resource management for the segmentation frequency\n this.segmentationRateManager = new VideoFxSegmentationRateManager_1.VideoFxSegmentationRateManager(this.logger, processingBudgetPerFrame);\n // Configure default streamParameters\n this.streamParameters = {\n framerate: VideoFxConstants_1.DEFAULT_STREAM_PARAMETERS.FRAMES_PER_SECOND,\n width: VideoFxConstants_1.DEFAULT_STREAM_PARAMETERS.WIDTH_IN_PIXEL,\n height: VideoFxConstants_1.DEFAULT_STREAM_PARAMETERS.HEIGHT_IN_PIXEL,\n channels: VideoFxConstants_1.DEFAULT_STREAM_PARAMETERS.CHANNEL_COUNT,\n };\n // Determine if shared array buffer can be used to transfer frame data from\n // main thread to web worker thread\n if (VideoFxProcessor.isSharedArrayBufferSupported) {\n this.sharedImageBuffer = new SharedArrayBuffer(VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS *\n VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS *\n this.streamParameters.channels);\n this.sharedImageData = new Uint8ClampedArray(this.sharedImageBuffer);\n }\n this.logger.info(`VideoFx supports Shared Array Buffer: ` + `${VideoFxProcessor.isSharedArrayBufferSupported}`);\n // Determine if filter operations are supported\n this.canvasOpsManager = new VideoFxCanvasOpsManager_1.VideoFxCanvasOpsManager(this.streamParameters, this.outputCanvas);\n // Configure the final transformed frame location\n this.outputCanvas.width = this.streamParameters.width;\n this.outputCanvas.height = this.streamParameters.height;\n // Set an empty mask at initialization\n this.segmentationMask = new ImageData(this.streamParameters.width, this.streamParameters.height);\n this.logger.info(`VideoFxProcessor instantiated with a processingBudgetPerFrame of ${processingBudgetPerFrame}`);\n }\n /**\n * Apply the [[VideoFxProcessor]]'s specialized effect onto the frame contained by\n * the buffer parameter.\n * @param buffers\n * @returns buffers\n */\n process(buffers) {\n return __awaiter(this, void 0, void 0, function* () {\n // Note: Required method through implementation of VideoFrameProcessor.\n return buffers;\n });\n }\n /**\n * Process an input stream and apply the visual effects specified in this effectConfig.\n * @param buffers the input stream\n * @returns an output stream of VideoFrameBuffer\n */\n fxProcess(buffers) {\n return __awaiter(this, void 0, void 0, function* () {\n // Process our input image into raw input data\n const inputCanvas = buffers[0].asCanvasElement();\n // We must confirm that our incoming stream did not change it's parameters\n if (this.didStreamParametersChange(inputCanvas)) {\n yield this.adjustProcessorForNewStreamParameters(inputCanvas);\n }\n // Decide to use the existing segmentation or perform a new segmentation\n try {\n yield this.manageSegmentationMask(inputCanvas);\n }\n catch (error) {\n this.logger.error(error);\n throw new Error(`Video stream could not be processed`);\n }\n // Render a final image using the input canvas and the segmentation mask\n yield this.renderer.render(inputCanvas, this.segmentationMask);\n // Send canvas video frame buffer to rest of processor pipeline\n buffers[0] = this.canvasVideoFrameBuffer;\n return buffers;\n });\n }\n /**\n * Perform a process call that just returns the input stream\n * @param buffers the input stream\n * @returns an output stream of VideoFrameBuffer\n */\n noOpProcess(buffers) {\n return __awaiter(this, void 0, void 0, function* () {\n return buffers;\n });\n }\n /**\n * Check if the stream dimensions/parameters have changed.\n * @param stream frame from current video stream about to be processed\n * @returns boolean representing if the stream parameters changed\n */\n didStreamParametersChange(stream) {\n return (stream.width !== this.streamParameters.width || stream.height !== this.streamParameters.height);\n }\n /**\n * Adjust the videoFxProcessor to handle new stream parameters.\n * @param stream frame from current video stream about to be processed\n */\n adjustProcessorForNewStreamParameters(stream) {\n return __awaiter(this, void 0, void 0, function* () {\n // Update the stored streamParameters\n this.streamParameters.width = stream.width;\n this.streamParameters.height = stream.height;\n // Notify the canvas ops manager to reconfigure pipeline dimensions\n yield this.canvasOpsManager.configureForStreamParameters(this.streamParameters);\n // Configure the renderer to work with new stream dimensions\n yield this.renderer.configure(this.streamParameters.width, this.streamParameters.height, this.effectConfig);\n });\n }\n /**\n * Clean up any excess memory that has been allocated by [[VideoFxProcessor]].\n */\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n // Note: Required method through implementation of VideoFrameProcessor.\n this.canvasVideoFrameBuffer.destroy();\n if (this.fxLibScript && this.fxLibScript.parentNode) {\n this.fxLibScript.parentNode.removeChild(this.fxLibScript);\n }\n if (this.engineWorker) {\n // Post message to destroy all assets\n this.destroyedAssetsPromise = new DeferredPromise_1.DeferredPromise();\n this.engineWorker.postMessage({\n msg: VideoFxConstants_1.WORKER_MSG.DESTROY_ASSETS_REQUEST,\n });\n // Wait until all the assets are destroyed\n yield this.destroyedAssetsPromise.getPromise();\n // Close the engine worker\n this.engineWorker.postMessage({\n msg: VideoFxConstants_1.WORKER_MSG.CLOSE_WORKER_REQUEST,\n });\n }\n this.logger.info(`VideoFxProcessor destroyed.`);\n });\n }\n /**\n * Manage the segmentation mask that is used to generate a final frame. This function\n * will calculate whether or not to re-generate a segmenation and also monitor\n * how computationally expensive the rate of segmentation are.\n * @param inputCanvas canvas to be used for segmentation\n */\n manageSegmentationMask(inputCanvas) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.segmentationRateManager.submitFrame();\n if (this.segmentationRateManager.shouldApplySegmentation()) {\n // Perform a segmentation inference on the downsampled current video frame\n this.segmentationRateManager.startSegmentation();\n const inferenceInputImageData = this.canvasOpsManager.getInferenceInputData(inputCanvas);\n this.segmentationMask = yield this.generateSegmentationMask(inferenceInputImageData);\n this.segmentationRateManager.completeSegmentation();\n }\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Can not properly manage the returned segmentation mask`);\n }\n });\n }\n /**\n * Generate a segmentation mask from the input frame.\n * @param inferenceImageData\n * @returns image data representing segmenation mask\n */\n generateSegmentationMask(inferenceImageData) {\n return __awaiter(this, void 0, void 0, function* () {\n if (VideoFxProcessor.isSharedArrayBufferSupported) {\n this.sharedImageData.set(inferenceImageData.data);\n this.engineWorker.postMessage({\n msg: VideoFxConstants_1.WORKER_MSG.PERFORM_SEGMENTATION_SAB_REQUEST,\n payload: this.sharedImageBuffer,\n });\n }\n else {\n this.engineWorker.postMessage({\n msg: VideoFxConstants_1.WORKER_MSG.PERFORM_SEGMENTATION_REQUEST,\n payload: inferenceImageData,\n }, [inferenceImageData.data.buffer]);\n }\n // Wait for input image to be returned from VideoFxEngine\n try {\n const segmentationMask = yield this.segmentationRequestPromise.getPromise();\n return segmentationMask;\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Segmentation mask could not be generated`);\n }\n });\n }\n /**\n * Make a deep copy of the VideoFxConfig passed in. Needs to be updated if additional\n * fields are added to VideoFxConfig.\n * @param effectConfig\n * @returns newEffectConfig\n */\n cloneConfigFrom(effectConfig) {\n return {\n backgroundBlur: {\n isEnabled: effectConfig.backgroundBlur.isEnabled,\n strength: effectConfig.backgroundBlur.strength,\n },\n backgroundReplacement: {\n isEnabled: effectConfig.backgroundReplacement.isEnabled,\n backgroundImageURL: effectConfig.backgroundReplacement.backgroundImageURL,\n defaultColor: effectConfig.backgroundReplacement.defaultColor,\n },\n };\n }\n /**\n * Update the [[VideoFxProcessor]] to apply a new set of effects by updating the instance property\n * [[VideoFxConfig]]. If the effectConfig parameter fails validation, an error is thrown and there is\n * no update.\n * @Param effectConfig updated [[VideoFxConfig]] with new video effects\n */\n setEffectConfig(effectConfig) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.sameVideoFxConfig(effectConfig, this.effectConfig)) {\n return;\n }\n const newEffectConfig = this.cloneConfigFrom(effectConfig);\n // Validate the effect config\n try {\n yield this.validateEffectConfig(newEffectConfig);\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Provided effect config is invalid, not updating VideoFxProcessor`);\n }\n // Configure background replacement image/canvas\n if (newEffectConfig.backgroundReplacement.isEnabled) {\n yield this.canvasOpsManager.loadReplacementBackground(newEffectConfig);\n yield this.renderer.setBackgroundReplacementCanvas(this.canvasOpsManager.getBackgroundReplacementCanvas());\n }\n // Configure the renderer to implement the desired effect configuration\n yield this.renderer.configure(this.streamParameters.width, this.streamParameters.height, newEffectConfig);\n // Can now officially set the effect config since the rest of the processor is\n // configured for the new effects\n this.effectConfig = newEffectConfig;\n // If no effects are enabled, run no op process, otherwise run the effect based processing\n if (!this.effectConfig.backgroundBlur.isEnabled &&\n !this.effectConfig.backgroundReplacement.isEnabled) {\n this.process = this.noOpProcess;\n }\n else {\n this.process = this.fxProcess;\n }\n this.logger.info(`VideoFxProcessor effect configuration updated to: ${JSON.stringify(this.effectConfig)}`);\n if (this.eventController) {\n this.publishVideoFxConfigEvent();\n }\n });\n }\n /**\n * Confirm that the config consists of valid values.\n * @param config that will be validated\n */\n validateEffectConfig(config) {\n return __awaiter(this, void 0, void 0, function* () {\n // We confirm that both blur and replacement are not enabled due to builder error\n if (config.backgroundBlur.isEnabled && config.backgroundReplacement.isEnabled) {\n throw new Error(`Invalid VideoFx configuration: Background Blur and Background Replacement ` +\n `can not both be enabled`);\n }\n else if (config.backgroundReplacement.isEnabled) {\n yield this.validateReplacementConfig(config);\n }\n // backgroundBlur does not need to be validated, as valid blurStrength value\n // is checked at compile time.\n });\n }\n /**\n * Confirm that the config consists of valid values for background replacement.\n * @param config that will be validated for background replacement\n */\n validateReplacementConfig(config) {\n return __awaiter(this, void 0, void 0, function* () {\n if (config.backgroundReplacement.backgroundImageURL &&\n config.backgroundReplacement.defaultColor) {\n throw new Error(`Invalid VideoFx configuration: Background Replacement can not have both an ` +\n `image URL and default color`);\n }\n if (!config.backgroundReplacement.backgroundImageURL &&\n !config.backgroundReplacement.defaultColor) {\n throw new Error(`Invalid VideoFx configuration: Background Replacement image URL and default ` +\n `can not both be null/undefined`);\n }\n // Confirm that the image properly loads\n try {\n if (config.backgroundReplacement.backgroundImageURL) {\n yield this.canvasOpsManager.loadImage(config.backgroundReplacement.backgroundImageURL);\n }\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Invalid VideoFx configuration: backgroundImageURL failed to load`);\n }\n const defaultColor = config.backgroundReplacement.defaultColor;\n // Confirm that defaultColor is a valid color for fillStyle. We support black by default.\n if (defaultColor &&\n defaultColor !== 'black' &&\n defaultColor !== '#000000' &&\n defaultColor !== '#000') {\n // First validate hexadecimal color code\n if (defaultColor.includes('#')) {\n const hexRegex = new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/);\n if (!hexRegex.test(defaultColor)) {\n throw new Error(`Invalid hexadecimal color code for default replacement ` +\n `background: ${defaultColor}`);\n }\n }\n const testColorCanvas = document.createElement('canvas');\n const testColorCtx = testColorCanvas.getContext('2d');\n // fillStyle is #000000 black by default\n const prevFillStyle = testColorCtx.fillStyle;\n testColorCtx.fillStyle = defaultColor;\n // fillStyle will not change after assignment if invalid value is used\n /* istanbul ignore next */\n if (testColorCtx.fillStyle === prevFillStyle) {\n throw new Error(`Invalid color for default replacement background: ${defaultColor}`);\n }\n }\n });\n }\n /**\n * Confirm that the processingBudgePerFrame constraint holds valid values.\n * @param constraint to be validated\n */\n validateProcessingBudgetPerFrame(processingBudgetPerFrame) {\n if (processingBudgetPerFrame < VideoFxConstants_1.RESOURCE_CONSTRAINTS.MIN_PROCESSING_BUDGET ||\n processingBudgetPerFrame > VideoFxConstants_1.RESOURCE_CONSTRAINTS.MAX_PROCESSING_BUDGET) {\n throw new Error(`Invalid resource constraint: cycle percentage must be within ` +\n `range of ${VideoFxConstants_1.RESOURCE_CONSTRAINTS.MIN_PROCESSING_BUDGET} and ` +\n `${VideoFxConstants_1.RESOURCE_CONSTRAINTS.MAX_PROCESSING_BUDGET}`);\n }\n }\n /**\n * Loads all of the assets that are associated with the stored effectConfig.\n */\n loadAssets() {\n return __awaiter(this, void 0, void 0, function* () {\n this.logger.info(`Loading required assets for the VideoFxProcessor`);\n try {\n const videoFxAssetParams = this.getVideoFxAssetParams();\n yield this.loadEngineWorker(videoFxAssetParams);\n yield this.buildEngine(videoFxAssetParams);\n yield this.loadFxLib(videoFxAssetParams);\n // @ts-ignore\n this.renderer = constructRenderer(VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS, VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS, this.effectConfig, this.outputCanvas);\n }\n catch (error) {\n // NOTE: when we update to es2022, throw errors that are chained together\n this.logger.error(error.toString());\n throw new Error(`Failed to load necessary assets for the VideoFxProcessor`);\n }\n this.logger.info(`Finished loading of essential VideoFxProcessor assets.`);\n });\n }\n /**\n * Determines the current set of specifications that define the current SDK version.\n * @returns an [[VideoFxAssetParams]] object defining the parameters of the\n * current SDK\n */\n getVideoFxAssetParams() {\n const defaultAssetSpec = Utils_1.getDefaultAssetSpec();\n const videoFxAssetParams = {\n assetGroup: defaultAssetSpec.assetGroup,\n revisionID: defaultAssetSpec.revisionID,\n sdk: encodeURIComponent(Versioning_1.default.sdkVersion),\n ua: encodeURIComponent(Versioning_1.default.sdkUserAgentLowResolution),\n };\n return videoFxAssetParams;\n }\n /**\n * Generate a final path to an asset belonging to current version of SDK.\n * @param basePath Base of the path that will be used to generate a final path\n * @param videoFxAssetParams Parameters of the current SDK version\n * @returns A final path specific to an asset belonging to current SDK\n * version\n */\n getPathFromVideoFxAssetParams(basePath, videoFxAssetParams) {\n const path = new URL(basePath);\n for (const [key, value] of Object.entries(videoFxAssetParams)) {\n if (value !== undefined) {\n // Encode the key and value into uri format\n const uriEncodedKey = encodeURIComponent(key);\n const uriEncodedValue = encodeURIComponent(value);\n // Set encoded key/value as query params\n path.searchParams.set(uriEncodedKey, uriEncodedValue);\n }\n }\n return path.toString();\n }\n /**\n * Fetch and then load the engine worker into a web-worker.\n */\n loadEngineWorker(videoFxAssetParams) {\n return __awaiter(this, void 0, void 0, function* () {\n // The engine worker will always be a required asset for the VideoFxProcessor\n try {\n // Determine engine worker path from versioning of the SDK worker\n const engineWorkerPath = this.getPathFromVideoFxAssetParams(VideoFxConstants_1.CDN_BASE_PATH + VideoFxConstants_1.WORKER_PATH, videoFxAssetParams);\n // Load the worker that will communicate with the VideoFxEngine\n this.engineWorker = yield loader_1.loadWorker(engineWorkerPath, 'VideoFxEngineWorker', {}, null);\n this.logger.info(`Successfully loaded the VideoFxProcessor's engine worker`);\n // Configure a handler to deal with messages received form the engine worker\n this.engineWorker.addEventListener('message', event => this.engineWorkerReceiver(event));\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Failed to load the VideoFxProcessor's engine worker`);\n }\n });\n }\n /**\n * Build the videoFxEngine.\n * @param videoFxAssetParams [[VideoFxAssetParams]] defining current version of SDK\n */\n buildEngine(videoFxAssetParams) {\n return __awaiter(this, void 0, void 0, function* () {\n // Instantiate the deferred promise so we can wait for the worker to\n // return a completion message\n this.buildEnginePromise = new DeferredPromise_1.DeferredPromise();\n // Send a message via the engine worker to instantiate\n // the video fx engine\n this.engineWorker.postMessage({\n msg: VideoFxConstants_1.WORKER_MSG.BUILD_ENGINE_REQUEST,\n payload: {\n cdnBasePath: VideoFxConstants_1.CDN_BASE_PATH,\n sdkVersioningParams: videoFxAssetParams,\n },\n });\n // Wait until the engine finishes building\n try {\n yield this.buildEnginePromise.getPromise();\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Failed to instantiate the VideoFxEngine`);\n }\n });\n }\n /**\n * Loads the Video Fx library to drive video post-processing, given the versioning\n * of the SDK worker from the VideoFxAssetParams interface passed as a parameter.\n * @param videoFxAssetParams\n */\n loadFxLib(videoFxAssetParams) {\n return __awaiter(this, void 0, void 0, function* () {\n // Determine engine worker path from versioning of the SDK worker\n const fxLibPath = this.getPathFromVideoFxAssetParams(VideoFxConstants_1.CDN_BASE_PATH + VideoFxConstants_1.FXLIB_PATH, videoFxAssetParams);\n const WORKER_FETCH_OPTIONS = {\n method: 'GET',\n mode: 'cors',\n credentials: 'omit',\n redirect: 'follow',\n referrerPolicy: 'no-referrer',\n };\n try {\n const res = yield fetch_1.fetchWithBehavior(fxLibPath, WORKER_FETCH_OPTIONS, {});\n if (!res.ok) {\n throw new Error('Fetch failed.');\n }\n const blobURL = window.URL.createObjectURL(yield res.blob());\n yield new Promise((resolve, reject) => {\n this.fxLibScript = document.createElement('script');\n this.fxLibScript.setAttribute('src', blobURL);\n this.fxLibScript.setAttribute('type', 'module');\n this.fxLibScript.setAttribute('async', 'false');\n this.fxLibScript.addEventListener('load', resolve);\n this.fxLibScript.addEventListener('error', reject);\n document.body.appendChild(this.fxLibScript);\n });\n }\n catch (error) {\n this.logger.error(error.toString());\n throw new Error(`Failed to load the fxlib`);\n }\n });\n }\n /**\n * Getter for the current [[VideoFxConfig]] maintained as an instance property of\n * [[VideoFxProcessor]].\n * @returns currentEffectConfig\n */\n getEffectConfig() {\n return this.cloneConfigFrom(this.effectConfig);\n }\n /**\n * Receives messages from the engine worker and then delegates\n * the proper response to a different function.\n * @param event notification to be received from the engine worker\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n engineWorkerReceiver(event) {\n const msg = event.data;\n switch (msg.msg) {\n case VideoFxConstants_1.WORKER_MSG.BUILD_ENGINE_RESPONSE:\n this.settleEngineBuildPromise(msg.payload);\n break;\n case VideoFxConstants_1.WORKER_MSG.PERFORM_SEGMENTATION_RESPONSE:\n this.settleSegmentationPromise(msg.payload.output);\n break;\n case VideoFxConstants_1.WORKER_MSG.PERFORM_SEGMENTATION_SAB_RESPONSE:\n this.settleSegmentationPromiseSAB();\n break;\n case VideoFxConstants_1.WORKER_MSG.DESTROY_ASSETS_RESPONSE:\n this.destroyedAssetsPromise.resolvePromise();\n break;\n default:\n this.logger.info(`VideoFx worker received unknown event msg: ${JSON.stringify(msg)}`);\n break;\n }\n }\n /**\n * Handle the message returned from the VideoFX Engine worker to\n * settle (resolve/reject) the promise associated with initializing the engine.\n * @param buildStatus status of the final result of building the engine\n */\n settleEngineBuildPromise(buildStatus) {\n // Resolve or reject the engineInstantiatedPromise depending on success\n // of instatiation\n if (buildStatus !== VideoFxConstants_1.SEGMENTATION_MODEL.LOAD_SUCCESS) {\n this.buildEnginePromise.rejectPromise(new Error(`Failed to build VideoFxProcessor's engine`));\n }\n else {\n this.logger.info(`Successfully built the VideoFxEngine`);\n this.buildEnginePromise.resolvePromise();\n }\n }\n /**\n * Handle the received segmentation mask and then resolve/reject the promise to notify\n * the main processing function to prepare for the next frame (using ImageData transfer).\n * @param segmentationMask\n */\n settleSegmentationPromise(segmentationMask) {\n // Resolve or reject the frameRequestPromise depending on the success of transforming\n // the input image\n if (segmentationMask) {\n // Resolve segmentation promise with mask data\n this.segmentationRequestPromise.resolveAndReplacePromise(segmentationMask);\n }\n else {\n this.segmentationRequestPromise.rejectAndReplacePromise(new Error(`Failed to perform a segmentation on the input image`));\n }\n }\n /**\n * Handle the received segmentation mask and then resolve/reject the promise to notify\n * the main processing function to prepare for the next frame (using shared array buffer).\n */\n settleSegmentationPromiseSAB() {\n try {\n // Resolve segmentation promise with mask data\n const transformedImageData = new ImageData(new Uint8ClampedArray(this.sharedImageData), VideoFxConstants_1.SEGMENTATION_MODEL.WIDTH_IN_PIXELS, VideoFxConstants_1.SEGMENTATION_MODEL.HEIGHT_IN_PIXELS);\n this.segmentationRequestPromise.resolveAndReplacePromise(transformedImageData);\n }\n catch (_a) {\n this.segmentationRequestPromise.rejectAndReplacePromise(new Error(`Failed to perform a segmentation with a shared ` + `array buffer on the input image`));\n }\n }\n /**\n * Function that will convert the VideoFxProcessor into a NoOp version of itself.\n * Will only return input video stream and not use worker, engine, or segmentation\n * model.\n */\n setToNoOpProcess() {\n this.process = this.noOpProcess;\n }\n /**\n * Detect client environment to determine if the [[VideoFxProcessor]] is supported.\n * @param logger to record/report events of checking processor support\n * @param attemptAssetLoad will also fetch and build all relevant components of the\n * processor to ensure end to end feature is supported\n * @returns a boolean promise that will resolve to true if supported and false if not\n */\n static isSupported(logger = new NoOpLogger_1.default(), attemptAssetLoad = true) {\n return __awaiter(this, void 0, void 0, function* () {\n // allCheckedPassed represents the state of support and we assume it is true until checkEnv tells us otherwise\n let allCheckedPassed = true;\n // checkEnv evaluates a boolean condition, badPromiseCondition, that when true would cause isSupported to fail.\n // We also log a corresponding error message for each support check so a builder can see what is still needed\n // in their environment.\n const checkEnv = (badPromiseCondition, message) => {\n if (badPromiseCondition) {\n logger.info(message);\n allCheckedPassed = false;\n }\n };\n // Get context for operating environment\n // could not figure out how to remove globalThis to test failure case\n /* istanbul ignore next */\n checkEnv(typeof globalThis === 'undefined', 'Browser does not have globalThis.');\n // Check workers are supported\n checkEnv(!support_1.supportsWorker(globalThis, logger), 'Browser does not support web workers.');\n // Check wasm is supported\n checkEnv(!support_1.supportsWASM(globalThis, logger), 'Browser does not support wasm.');\n // Check webgl2 is supported\n checkEnv(!document.createElement('canvas').getContext('webgl2'), 'Browser does not support webgl.');\n // Check browser support\n const browserBehavior = new DefaultBrowserBehavior_1.default();\n checkEnv(!browserBehavior.isVideoFxSupportedBrowser(), 'Browser is unsupported for VideoFxProcessor');\n // checkProcessor first checks if we can load all required assets and then tests VideoFxProcessor.\n const checkProcessor = () => __awaiter(this, void 0, void 0, function* () {\n if (attemptAssetLoad) {\n try {\n const testFxProcessor = new VideoFxProcessor(logger);\n yield testFxProcessor.loadAssets();\n yield testFxProcessor.destroy(); // destroy assets we just temp loaded\n }\n catch (_a) {\n logger.info('Browser environment is unable to access the required external assets.');\n return Promise.resolve(false);\n }\n }\n return Promise.resolve(true);\n });\n return Promise.resolve(allCheckedPassed ? yield checkProcessor() : false);\n });\n }\n /**\n * Create a [[VideoFxProcessor]] that has loaded its necessary components, ready to instantly\n * process a video stream with the effects specified in the passed [[VideoFxConfig]].\n *\n * ** NOTICE **\n *\n * Amazon Chime background blur 2.0 and background replacement 2.0\n * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * By installing or using this package, you agree to the AWS Customer Agreement, AWS Service Terms, and AWS Privacy Notice.\n * If you already have an AWS Customer Agreement, you agree that the terms of that agreement govern your download and use of this package.\n * This package is provided as AWS Content and subject to the AWS Customer agreement and any other agreement with AWS governing your use of\n * AWS services.\n */\n static create(logger, effectConfig, processingBudgetPerFrame = VideoFxConstants_1.RESOURCE_CONSTRAINTS.DEFAULT_PROCESSING_BUDGET_PER_FRAME) {\n return __awaiter(this, void 0, void 0, function* () {\n // Create the videoFxProcessor\n const videoFxProcessor = new VideoFxProcessor(logger, processingBudgetPerFrame);\n // Load the required assets and set desired effect config\n try {\n yield videoFxProcessor.loadAssets();\n yield videoFxProcessor.setEffectConfig(effectConfig);\n return videoFxProcessor;\n }\n catch (error) {\n logger.error(error.toString());\n // If we fail loading an essential asset from above, we overwrite our\n // processor to process with no operations or effects\n videoFxProcessor.setToNoOpProcess();\n throw new Error(`VideoFxProcessor built with support for only NoOp processing`);\n }\n });\n }\n /** @internal */\n setEventController(eventController) {\n /*\n if this is a first time we set the eventController, need to publish the current VideoFxConfig.\n Otherwise, just set the eventController.\n */\n if (this.eventController) {\n this.eventController = eventController;\n }\n else {\n this.eventController = eventController;\n this.publishVideoFxConfigEvent();\n }\n }\n publishVideoFxConfigEvent() {\n const mediaFXEventAttibutes = {\n backgroundBlurEnabled: this.effectConfig.backgroundBlur.isEnabled.toString(),\n backgroundBlurStrength: this.effectConfig.backgroundBlur.strength,\n backgroundReplacementEnabled: this.effectConfig.backgroundReplacement.isEnabled.toString(),\n backgroundFilterVersion: 2,\n };\n this.eventController.publishEvent('backgroundFilterConfigSelected', mediaFXEventAttibutes);\n }\n sameVideoFxConfig(firstConfig, secondConfig) {\n return (firstConfig.backgroundBlur.isEnabled === secondConfig.backgroundBlur.isEnabled &&\n firstConfig.backgroundBlur.strength === secondConfig.backgroundBlur.strength &&\n firstConfig.backgroundReplacement.backgroundImageURL ===\n secondConfig.backgroundReplacement.backgroundImageURL &&\n firstConfig.backgroundReplacement.defaultColor ===\n secondConfig.backgroundReplacement.defaultColor &&\n firstConfig.backgroundReplacement.isEnabled === secondConfig.backgroundReplacement.isEnabled);\n }\n}\nexports.default = VideoFxProcessor;\nVideoFxProcessor.isSharedArrayBufferSupported = typeof SharedArrayBuffer !== 'undefined';\n//# sourceMappingURL=VideoFxProcessor.js.map","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decideModel = exports.measureAndDecideExecutionApproach = void 0;\nconst loader_js_1 = require(\"./loader.js\");\nconst support_js_1 = require(\"./support.js\");\nconst DEFAULT_EXECUTION_QUANTA = 3;\nconst SIMD_SCORE_FIXED_POINT = 2.50;\nconst WASM_SCORE_FIXED_POINT = 2.63;\nconst SINGLE_INLINE_SCORE_MULTIPLIER = 0.6;\nconst QUALITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER = 0.65;\nconst INTERACTIVITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER = 0.5;\nconst WORKER_SCORE_MULTIPLIER = 0.7;\nconst PERFORMANCE_THRESHOLDS = {\n wasm: {\n noSupport: 0.07,\n inline: {\n c100: 1,\n c50: 0.36,\n c20: 0.16,\n c10: 0.07,\n },\n worker: {\n c100: 0.5,\n c50: 0.18,\n c20: 0.08,\n c10: 0.06,\n },\n },\n simd: {\n noSupport: 0.10,\n inline: {\n c100: 1,\n c50: 0.43,\n c20: 0.3,\n c10: 0.2,\n },\n worker: {\n c100: 0.5,\n c50: 0.21,\n c20: 0.15,\n c10: 0.10,\n },\n },\n};\nclass Estimator {\n constructor(fetchConfig, logger) {\n this.fetchConfig = fetchConfig;\n this.logger = logger;\n const workerURL = `${fetchConfig.paths.workers}estimator-v1.js`;\n this.fetchBehavior = { headers: fetchConfig.headers, escapedQueryString: fetchConfig.escapedQueryString };\n this.worker = loader_js_1.loadWorker(workerURL, 'VoiceFocusEstimator', this.fetchBehavior, logger);\n }\n roundtrip(toSend, receive, expectedKey) {\n return new Promise((resolve, reject) => {\n this.worker.then(worker => {\n let listener;\n listener = (event) => {\n const { message, key } = event.data;\n if (message === receive && key === expectedKey) {\n worker.removeEventListener('message', listener);\n resolve(event.data);\n }\n };\n worker.addEventListener('message', listener);\n worker.postMessage(toSend);\n }).catch(e => {\n var _a;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error('Failed to load worker.', e);\n reject(e);\n });\n });\n }\n supportsSIMD(url) {\n const key = 'simd';\n const path = url || `${this.fetchConfig.paths.wasm}simd-v1.wasm`;\n const toSend = {\n message: 'supports-simd',\n fetchBehavior: this.fetchBehavior,\n path,\n key,\n };\n return this.roundtrip(toSend, 'simd-support', key)\n .then(data => data.supports);\n }\n measure(simd, budget) {\n const benchWASM = `${this.fetchConfig.paths.wasm}bench-v1.wasm`;\n const benchSIMD = `${this.fetchConfig.paths.wasm}bench-v1_simd.wasm`;\n const path = simd ? benchSIMD : benchWASM;\n const key = `bench:${simd}`;\n const toSend = {\n message: 'measure',\n fetchBehavior: this.fetchBehavior,\n budget,\n path,\n key,\n };\n return this.roundtrip(toSend, 'measurement', key)\n .then(data => {\n if (data.measurement) {\n return data.measurement;\n }\n throw new Error('Failed to measure.');\n });\n }\n stop() {\n this.worker.then(worker => {\n var _a;\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug('Stopping estimator worker.');\n worker.terminate();\n }).catch(e => {\n });\n }\n}\nconst inlineScoreMultiplier = (executionQuanta, usagePreference) => {\n if (executionQuanta === 1) {\n return SINGLE_INLINE_SCORE_MULTIPLIER;\n }\n if (usagePreference === 'quality') {\n return QUALITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER * executionQuanta;\n }\n return INTERACTIVITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER * executionQuanta;\n};\nconst decideExecutionApproach = ({ supportsSIMD, supportsSAB, duration, executionPreference = 'auto', simdPreference, variantPreference = 'auto', namePreference = 'default', usagePreference, executionQuantaPreference = DEFAULT_EXECUTION_QUANTA, }, allThresholds = PERFORMANCE_THRESHOLDS, logger) => {\n const forceSIMD = (simdPreference === 'force');\n const useSIMD = forceSIMD || (simdPreference !== 'disable' && supportsSIMD);\n const checkScores = duration !== -1;\n const baseScore = checkScores ? (useSIMD ? SIMD_SCORE_FIXED_POINT : WASM_SCORE_FIXED_POINT) / duration : 0;\n const thresholds = useSIMD ? allThresholds.simd : allThresholds.wasm;\n const inlineScore = checkScores ? inlineScoreMultiplier(executionQuantaPreference, usagePreference) * baseScore : 0;\n const workerScore = checkScores ? WORKER_SCORE_MULTIPLIER * baseScore : 0;\n const name = namePreference;\n const unsupported = (reason) => {\n return {\n supported: false,\n reason,\n };\n };\n if (checkScores) {\n if (baseScore < thresholds.noSupport) {\n return unsupported(`Performance score ${baseScore} worse than threshold ${thresholds.noSupport}.`);\n }\n }\n else {\n if ((executionPreference === 'auto') ||\n (variantPreference === 'auto')) {\n return unsupported(`Missing explicit execution (${executionPreference}) or variant (${variantPreference}) preference, but no scoring performed.`);\n }\n }\n logger === null || logger === void 0 ? void 0 : logger.debug(`Bench duration ${duration} yields inline score ${inlineScore} and worker score ${workerScore}.`);\n const succeed = (processor, executionApproach, variant) => {\n return {\n supported: true,\n useSIMD,\n processor,\n executionApproach,\n variant,\n executionQuanta: (executionApproach === 'inline' ? executionQuantaPreference : undefined),\n name,\n };\n };\n const resolveVariant = (score, variant, lookup) => {\n if (variant !== 'auto') {\n if (!checkScores || score > lookup[variant]) {\n return variant;\n }\n return 'failed';\n }\n if (score > lookup.c100) {\n return 'c100';\n }\n if (score > lookup.c50) {\n return 'c50';\n }\n if (score > lookup.c20) {\n return 'c20';\n }\n if (score > lookup.c10) {\n return 'c10';\n }\n return 'failed';\n };\n const reducePreference = (preference) => {\n switch (preference || 'auto') {\n case 'auto': {\n let inlineOption = reducePreference('inline');\n let workerOption = reducePreference('worker');\n logger === null || logger === void 0 ? void 0 : logger.debug(`Reducing auto preference: ${JSON.stringify(inlineOption)} vs ${JSON.stringify(workerOption)}`);\n if (inlineOption.supported === false) {\n return workerOption;\n }\n if (workerOption.supported === false) {\n return workerOption;\n }\n if (inlineOption.variant === workerOption.variant || inlineOption.variant === 'c50') {\n return inlineOption;\n }\n return workerOption;\n }\n case 'worker': {\n if (support_js_1.supportsSharedArrayBuffer(globalThis, window, logger)) {\n return reducePreference('worker-sab');\n }\n return reducePreference('worker-postMessage');\n }\n case 'inline': {\n const variant = resolveVariant(inlineScore, variantPreference, thresholds.inline);\n if (variant === 'failed') {\n return unsupported(`Performance score ${inlineScore} not sufficient for inline use with variant preference ${variantPreference}.`);\n }\n ;\n return succeed('voicefocus-inline-processor', 'inline', variant);\n }\n case 'worker-sab': {\n if (!supportsSAB) {\n const reason = 'Requested worker-sab but no SharedArrayBuffer support.';\n logger === null || logger === void 0 ? void 0 : logger.warn(reason);\n return { supported: false, reason };\n }\n const variant = resolveVariant(workerScore, variantPreference, thresholds.worker);\n if (variant === 'failed') {\n return unsupported(`Performance score ${workerScore} not sufficient for worker use with variant preference ${variantPreference}.`);\n }\n ;\n return succeed('voicefocus-worker-sab-processor', 'worker-sab', variant);\n }\n case 'worker-postMessage': {\n const variant = resolveVariant(workerScore, variantPreference, thresholds.worker);\n if (variant === 'failed') {\n return unsupported(`Performance score ${workerScore} not sufficient for worker use.`);\n }\n ;\n if (name === 'ns_es') {\n const reason = 'Requested echo suppression but postMessage executor does not support it.';\n logger === null || logger === void 0 ? void 0 : logger.warn(reason);\n return { supported: false, reason };\n }\n ;\n return succeed('voicefocus-worker-postMessage-processor', 'worker-postMessage', variant);\n }\n }\n };\n return reducePreference(executionPreference);\n};\nconst featureCheck = (forceSIMD, fetchConfig, logger, estimator) => __awaiter(void 0, void 0, void 0, function* () {\n const supports = {\n supportsSIMD: forceSIMD,\n supportsSAB: support_js_1.supportsSharedArrayBuffer(globalThis, window, logger),\n duration: -1,\n };\n if (forceSIMD) {\n logger === null || logger === void 0 ? void 0 : logger.info('Supports SIMD: true (force)');\n return supports;\n }\n const cleanup = !estimator;\n const e = estimator || new Estimator(fetchConfig, logger);\n try {\n const useSIMD = !support_js_1.isOldChrome(window, logger) && (yield e.supportsSIMD());\n logger === null || logger === void 0 ? void 0 : logger.info(`Supports SIMD: ${useSIMD} (force: ${forceSIMD})`);\n supports.supportsSIMD = useSIMD;\n return supports;\n }\n finally {\n if (cleanup) {\n e.stop();\n }\n }\n});\nconst estimateAndFeatureCheck = (forceSIMD, fetchConfig, estimatorBudget, logger) => __awaiter(void 0, void 0, void 0, function* () {\n const estimator = new Estimator(fetchConfig, logger);\n try {\n const supports = yield featureCheck(forceSIMD, fetchConfig, logger, estimator);\n if (supports.supportsSIMD) {\n try {\n supports.duration = yield estimator.measure(true, estimatorBudget);\n logger === null || logger === void 0 ? void 0 : logger.info('SIMD timing:', supports.duration);\n return supports;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.warn('Failed SIMD estimation; falling back to non-SIMD.');\n supports.supportsSIMD = false;\n }\n }\n supports.duration = yield estimator.measure(false, estimatorBudget);\n logger === null || logger === void 0 ? void 0 : logger.info('No-SIMD timing:', supports.duration);\n return supports;\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.error('Could not feature check.', e);\n throw e;\n }\n finally {\n estimator.stop();\n }\n});\nconst measureAndDecideExecutionApproach = (spec, fetchConfig, logger, thresholds = PERFORMANCE_THRESHOLDS) => __awaiter(void 0, void 0, void 0, function* () {\n let executionPreference = spec.executionPreference;\n const { usagePreference, variantPreference, namePreference, simdPreference, estimatorBudget, executionQuantaPreference, } = spec;\n if (usagePreference === 'interactivity' && executionPreference !== 'inline') {\n logger === null || logger === void 0 ? void 0 : logger.debug(`Overriding execution preference ${executionPreference} to reflect interactivity preference.`);\n executionPreference = 'inline';\n }\n const forceSIMD = simdPreference === 'force';\n const knownModel = variantPreference !== 'auto';\n const knownExecution = executionPreference !== 'auto';\n let supports;\n try {\n if (knownModel && knownExecution) {\n supports = yield featureCheck(forceSIMD, fetchConfig, logger);\n }\n else {\n supports = yield estimateAndFeatureCheck(forceSIMD, fetchConfig, estimatorBudget, logger);\n }\n }\n catch (e) {\n logger === null || logger === void 0 ? void 0 : logger.error('Could not load estimator.', e);\n throw new Error('Could not load Voice Focus estimator.');\n }\n return decideExecutionApproach(Object.assign(Object.assign({}, supports), { simdPreference,\n executionPreference,\n variantPreference,\n namePreference,\n usagePreference,\n executionQuantaPreference }), thresholds, logger);\n});\nexports.measureAndDecideExecutionApproach = measureAndDecideExecutionApproach;\nconst decideModel = ({ category, name, variant, simd, url }) => {\n return `${category}-${name}-${variant}-v1${simd ? '_simd' : ''}`;\n};\nexports.decideModel = decideModel;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VoiceFocusAudioWorkletNode = void 0;\nclass VoiceFocusAudioWorkletNode extends ((typeof globalThis !== 'undefined' && globalThis['AudioWorkletNode']) ||\n class Sadness {\n }) {\n}\nexports.VoiceFocusAudioWorkletNode = VoiceFocusAudioWorkletNode;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst support_js_1 = require(\"./support.js\");\nconst types_js_1 = require(\"./types.js\");\nconst CPU_WARNING_MAX_INTERVAL_MS = 5 * 1000;\nclass VoiceFocusInlineNode extends types_js_1.VoiceFocusAudioWorkletNode {\n constructor(context, options) {\n super(context, options.processor, options);\n this.cpuWarningCount = 0;\n this.channelCountMode = 'explicit';\n this.channelCount = 1;\n const { modelURL, worker, fetchBehavior, logger, delegate, } = options;\n this.logger = logger;\n this.port.onmessage = this.onProcessorMessage.bind(this);\n this.delegate = delegate;\n if (logger)\n logger.debug('VoiceFocusInlineNode:', modelURL);\n this.worker = worker;\n this.worker.onmessage = this.onWorkerMessage.bind(this);\n const message = support_js_1.supportsWASMPostMessage(globalThis) ? 'get-module' : 'get-module-buffer';\n this.worker.postMessage({\n message,\n key: 'model',\n fetchBehavior,\n path: modelURL,\n });\n }\n onModuleBufferLoaded(buffer, key) {\n this.port.postMessage({ message: 'module-buffer', buffer, key });\n }\n onModuleLoaded(module, key) {\n this.port.postMessage({ message: 'module', module, key });\n }\n enable() {\n return __awaiter(this, void 0, void 0, function* () {\n this.port.postMessage({ message: 'enable' });\n });\n }\n disable() {\n return __awaiter(this, void 0, void 0, function* () {\n this.port.postMessage({ message: 'disable' });\n });\n }\n stop() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n this.port.postMessage({ message: 'stop' });\n try {\n (_a = this.worker) === null || _a === void 0 ? void 0 : _a.terminate();\n }\n catch (e) {\n console.error(\"failed to terminate worker:\", e);\n }\n this.disconnect();\n });\n }\n onProcessorMessage(event) {\n var _a, _b, _c;\n const data = event.data;\n switch (data.message) {\n case 'cpu':\n this.cpuWarningCount++;\n const now = Date.now();\n const before = this.cpuWarningLastTriggered || now;\n const diff = Math.abs(now - before);\n if (!this.cpuWarningLastTriggered || diff > CPU_WARNING_MAX_INTERVAL_MS) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.warn(`CPU warning (count: ${this.cpuWarningCount}):`, data.message);\n this.cpuWarningCount = 0;\n this.cpuWarningLastTriggered = now;\n }\n (_b = this.delegate) === null || _b === void 0 ? void 0 : _b.onCPUWarning();\n break;\n default:\n (_c = this.logger) === null || _c === void 0 ? void 0 : _c.debug('Ignoring processor message.');\n }\n }\n onWorkerMessage(event) {\n const data = event.data;\n switch (data.message) {\n case 'module-buffer':\n if (!data.buffer || !data.key) {\n return;\n }\n this.onModuleBufferLoaded(data.buffer, data.key);\n break;\n case 'module':\n if (!data.module || !data.key) {\n return;\n }\n this.onModuleLoaded(data.module, data.key);\n break;\n case 'stopped':\n if (this.worker) {\n this.worker.terminate();\n }\n break;\n default:\n return;\n }\n }\n}\nexports.default = VoiceFocusInlineNode;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst support_js_1 = require(\"./support.js\");\nconst types_js_1 = require(\"./types.js\");\nconst INDICES = {\n ready: 0,\n enabled: 1,\n};\nconst STATES = {\n disabled: 0,\n enabled: 1,\n stopped: 2,\n};\nclass VoiceFocusWorkerBufferNode extends types_js_1.VoiceFocusAudioWorkletNode {\n constructor(context, options) {\n super(context, options.processor, options);\n this.channelCountMode = 'explicit';\n this.channelCount = 1;\n const { modelURL, resamplerURL, worker, fetchBehavior, delegate, } = options;\n this.delegate = delegate;\n this.worker = worker;\n this.worker.onmessage = this.onWorkerMessage.bind(this);\n this.port.onmessage = this.onProcessorMessage.bind(this);\n const { enabled, supportFarendStream } = options.processorOptions;\n this.worker.postMessage({\n message: 'init',\n approach: 'sab',\n frames: context.sampleRate === 16000 ? 160 : 480,\n enabled,\n model: modelURL,\n supportFarendStream,\n });\n const message = support_js_1.supportsWASMPostMessage(globalThis) ? 'get-module' : 'get-module-buffer';\n this.worker.postMessage({\n message,\n key: 'resampler',\n fetchBehavior,\n path: resamplerURL,\n });\n }\n enable() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state) {\n Atomics.store(this.state, INDICES.enabled, STATES.enabled);\n Atomics.notify(this.state, INDICES.ready, 1);\n }\n else {\n this.worker.postMessage({ message: 'enable' });\n }\n });\n }\n disable() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state) {\n Atomics.store(this.state, INDICES.enabled, STATES.disabled);\n Atomics.notify(this.state, INDICES.ready, 1);\n }\n else {\n this.worker.postMessage({ message: 'disable' });\n }\n });\n }\n stop() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state) {\n Atomics.store(this.state, INDICES.enabled, STATES.stopped);\n Atomics.notify(this.state, INDICES.ready, 1);\n }\n else {\n try {\n this.worker.postMessage({ message: 'stop' });\n }\n catch (e) {\n }\n }\n this.disconnect();\n });\n }\n onWorkerMessage(event) {\n var _a;\n const data = event.data;\n switch (data.message) {\n case 'ready':\n if (!data.shared) {\n throw new Error('No shared state.');\n }\n this.state = new Int32Array(data.shared.state);\n this.port.postMessage(data);\n break;\n case 'stopped':\n this.worker.terminate();\n break;\n case 'module-buffer':\n case 'module':\n this.port.postMessage(data);\n break;\n case 'cpu':\n (_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onCPUWarning();\n break;\n case 'processing':\n this.port.postMessage(data);\n break;\n default:\n return;\n }\n }\n onProcessorMessage(event) {\n var _a;\n const data = event.data;\n switch (data.message) {\n case 'cpu':\n (_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onCPUWarning();\n break;\n case 'prepare-for-frames':\n this.worker.postMessage(data);\n break;\n default:\n }\n }\n}\nexports.default = VoiceFocusWorkerBufferNode;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst support_js_1 = require(\"./support.js\");\nconst types_js_1 = require(\"./types.js\");\nclass VoiceFocusWorkerPostMessageNode extends types_js_1.VoiceFocusAudioWorkletNode {\n constructor(context, options) {\n super(context, options.processor, options);\n this.channelCountMode = 'explicit';\n this.channelCount = 1;\n const { modelURL, audioBufferURL, worker, fetchBehavior, delegate, } = options;\n this.delegate = delegate;\n this.worker = worker;\n this.worker.onmessage = this.onWorkerMessage.bind(this);\n this.port.onmessage = this.onProcessorMessage.bind(this);\n const { enabled, agc, supportFarendStream } = options.processorOptions;\n this.worker.postMessage({\n message: 'init',\n approach: 'postMessage',\n frames: context.sampleRate === 16000 ? 160 : 480,\n enabled,\n agc,\n fetchBehavior,\n model: modelURL,\n supportFarendStream,\n });\n const message = support_js_1.supportsWASMPostMessage(globalThis) ? 'get-module' : 'get-module-buffer';\n this.worker.postMessage({\n message,\n key: 'buffer',\n fetchBehavior,\n path: audioBufferURL,\n });\n }\n enable() {\n return __awaiter(this, void 0, void 0, function* () {\n this.worker.postMessage({ message: 'enable' });\n });\n }\n disable() {\n return __awaiter(this, void 0, void 0, function* () {\n this.worker.postMessage({ message: 'disable' });\n });\n }\n stop() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.worker.postMessage({ message: 'stop' });\n }\n catch (e) {\n }\n this.disconnect();\n });\n }\n onWorkerMessage(event) {\n var _a;\n const data = event.data;\n switch (data.message) {\n case 'ready':\n this.port.postMessage({ message: 'ready', shared: data.shared }, data.shared ? Object.values(data.shared) : []);\n break;\n case 'data':\n if (!data.buffer) {\n return;\n }\n this.port.postMessage({ message: 'data', buffer: data.buffer }, [data.buffer]);\n break;\n case 'stopped':\n this.worker.terminate();\n break;\n case 'module-buffer':\n case 'module':\n this.port.postMessage(data);\n break;\n case 'cpu':\n (_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onCPUWarning();\n break;\n case 'processing':\n this.port.postMessage(data);\n break;\n default:\n return;\n }\n }\n onProcessorMessage(event) {\n var _a;\n const data = event.data;\n switch (data.message) {\n case 'data':\n if (!data.buffer) {\n return;\n }\n this.worker.postMessage({ message: 'data', buffer: data.buffer }, [data.buffer]);\n break;\n case 'cpu':\n (_a = this.delegate) === null || _a === void 0 ? void 0 : _a.onCPUWarning();\n break;\n case 'prepare-for-frames':\n this.worker.postMessage(data);\n break;\n default:\n return;\n }\n }\n}\nexports.default = VoiceFocusWorkerPostMessageNode;\n","// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAudioInput = exports.createAudioContext = exports.VoiceFocus = void 0;\nconst decider_js_1 = require(\"./decider.js\");\nconst fetch_js_1 = require(\"./fetch.js\");\nconst loader_js_1 = require(\"./loader.js\");\nconst support_js_1 = require(\"./support.js\");\nconst worklet_inline_node_js_1 = require(\"./worklet-inline-node.js\");\nconst worklet_worker_sab_node_js_1 = require(\"./worklet-worker-sab-node.js\");\nconst worklet_worker_postMessage_node_js_1 = require(\"./worklet-worker-postMessage-node.js\");\nconst DEFAULT_AGC_DISABLED_SETTING = {\n useVoiceFocusAGC: false,\n useBuiltInAGC: true,\n};\nconst DEFAULT_AGC_SETTING = DEFAULT_AGC_DISABLED_SETTING;\nconst DEFAULT_ASSET_GROUP = 'stable-v1';\nconst DEFAULT_CDN = 'https://static.sdkassets.chime.aws';\nconst DEFAULT_PATHS = {\n processors: `${DEFAULT_CDN}/processors/`,\n workers: `${DEFAULT_CDN}/workers/`,\n wasm: `${DEFAULT_CDN}/wasm/`,\n models: `${DEFAULT_CDN}/wasm/`,\n};\nconst DEFAULT_CONTEXT_HINT = {\n latencyHint: 0,\n};\nconst BASE_AUDIO_CONSTRAINTS = {\n channelCount: 1,\n echoCancellation: true,\n googEchoCancellation: true,\n noiseSuppression: false,\n googNoiseSuppression: false,\n googHighpassFilter: false,\n googTypingNoiseDetection: false,\n};\nconst DEFAULT_AUDIO_CONSTRAINTS_WITH_BUILTIN_AGC = Object.assign(Object.assign({}, BASE_AUDIO_CONSTRAINTS), { autoGainControl: true, googAutoGainControl: true, googAutoGainControl2: true });\nconst DEFAULT_AUDIO_CONSTRAINTS_WITHOUT_BUILTIN_AGC = Object.assign(Object.assign({}, BASE_AUDIO_CONSTRAINTS), { autoGainControl: false, googAutoGainControl: false, googAutoGainControl2: false });\nconst PROCESSORS = {\n 'voicefocus-worker-sab-processor': {\n file: 'worklet-worker-sab-processor-v1.js',\n node: worklet_worker_sab_node_js_1.default,\n },\n 'voicefocus-worker-postMessage-processor': {\n file: 'worklet-worker-postMessage-processor-v1.js',\n node: worklet_worker_postMessage_node_js_1.default,\n },\n 'voicefocus-inline-processor': {\n file: 'worklet-inline-processor-v1.js',\n node: worklet_inline_node_js_1.default,\n },\n};\nconst validateAssetSpec = (assetGroup, revisionID) => {\n if (assetGroup !== undefined && !fetch_js_1.isValidAssetGroup(assetGroup)) {\n throw new Error(`Invalid asset group ${assetGroup}`);\n }\n if (revisionID !== undefined && !fetch_js_1.isValidRevisionID(revisionID)) {\n throw new Error(`Invalid revision ID ${revisionID}`);\n }\n};\nconst mungeConstraints = (constraints, agc) => {\n let defaultConstraints;\n if (agc.useBuiltInAGC) {\n defaultConstraints = DEFAULT_AUDIO_CONSTRAINTS_WITH_BUILTIN_AGC;\n }\n else {\n defaultConstraints = DEFAULT_AUDIO_CONSTRAINTS_WITHOUT_BUILTIN_AGC;\n }\n if (!constraints) {\n return { audio: defaultConstraints };\n }\n if (!constraints.audio) {\n return constraints;\n }\n if (constraints.video) {\n throw new Error('Not adding Voice Focus to multi-device getUserMedia call.');\n }\n return Object.assign(Object.assign({}, constraints), { audio: constraints.audio === true ? defaultConstraints : Object.assign(Object.assign({}, constraints.audio), defaultConstraints) });\n};\nconst urlForModel = (model, paths) => {\n return `${paths.models}${decider_js_1.decideModel(model)}.wasm`;\n};\nclass VoiceFocus {\n constructor(worker, processorURL, nodeConstructor, nodeOptions, executionQuanta) {\n this.processorURL = processorURL;\n this.nodeConstructor = nodeConstructor;\n this.nodeOptions = nodeOptions;\n this.executionQuanta = executionQuanta;\n this.internal = {\n worker,\n nodeOptions,\n isDestroyed: false,\n };\n }\n static isSupported(spec, options) {\n const { fetchBehavior, logger } = options || {};\n if (typeof globalThis === 'undefined') {\n logger === null || logger === void 0 ? void 0 : logger.debug('Browser does not have globalThis.');\n return Promise.resolve(false);\n }\n if (!support_js_1.supportsAudioWorklet(globalThis, logger)) {\n logger === null || logger === void 0 ? void 0 : logger.debug('Browser does not support Audio Worklet.');\n return Promise.resolve(false);\n }\n if (!support_js_1.supportsWASM(globalThis, logger)) {\n logger === null || logger === void 0 ? void 0 : logger.debug('Browser does not support WASM.');\n return Promise.resolve(false);\n }\n if (!support_js_1.supportsWASMStreaming(globalThis, logger)) {\n logger === null || logger === void 0 ? void 0 : logger.debug('Browser does not support streaming WASM compilation.');\n }\n const { assetGroup = DEFAULT_ASSET_GROUP, revisionID, paths = DEFAULT_PATHS, } = spec || {};\n validateAssetSpec(assetGroup, revisionID);\n const assetConfig = revisionID ? { revisionID } : { assetGroup };\n const updatedFetchBehavior = fetch_js_1.addQueryParams(fetchBehavior, assetConfig);\n const fetchConfig = Object.assign(Object.assign({}, updatedFetchBehavior), { paths });\n return support_js_1.supportsVoiceFocusWorker(globalThis, fetchConfig, logger);\n }\n static mungeExecutionPreference(preference, logger) {\n const isAuto = (preference === undefined || preference === 'auto');\n if (support_js_1.isSafari(globalThis)) {\n if (isAuto || preference === 'inline') {\n return 'inline';\n }\n if (!isAuto) {\n throw new Error(`Unsupported execution preference ${preference}`);\n }\n }\n if (preference === 'worker-sab' && !support_js_1.supportsSharedArrayBuffer(globalThis, globalThis, logger)) {\n throw new Error(`Unsupported execution preference ${preference}`);\n }\n return preference || 'auto';\n }\n static configure(spec, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const { fetchBehavior, preResolve, logger, } = options || {};\n const { category = 'voicefocus', name = 'default', variant: variantPreference = 'auto', assetGroup = DEFAULT_ASSET_GROUP, revisionID, simd = 'detect', executionPreference = 'auto', executionQuantaPreference, usagePreference = 'interactivity', estimatorBudget = 100, paths = DEFAULT_PATHS, thresholds, } = spec || {};\n logger === null || logger === void 0 ? void 0 : logger.debug('Configuring Voice Focus with spec', spec);\n if (category !== undefined && category !== 'voicefocus') {\n throw new Error(`Unrecognized category ${category}`);\n }\n if (name !== undefined && name !== 'default' && name !== 'ns_es') {\n throw new Error(`Unrecognized feature name ${name}`);\n }\n if (variantPreference !== undefined && !['auto', 'c100', 'c50', 'c20', 'c10'].includes(variantPreference)) {\n throw new Error(`Unrecognized feature variant ${variantPreference}`);\n }\n if (executionQuantaPreference !== undefined && ![1, 2, 3].includes(executionQuantaPreference)) {\n throw new Error(`Unrecognized execution quanta preference ${executionQuantaPreference}`);\n }\n validateAssetSpec(assetGroup, revisionID);\n if (simd !== undefined && !['detect', 'force', 'disable'].includes(simd)) {\n throw new Error(`Unrecognized SIMD option ${simd}`);\n }\n if (executionPreference !== undefined && !['auto', 'inline', 'worker', 'worker-sab', 'worker-postMessage'].includes(executionPreference)) {\n throw new Error(`Unrecognized execution preference ${executionPreference}`);\n }\n if (usagePreference !== undefined && !['quality', 'interactivity'].includes(usagePreference)) {\n throw new Error(`Unrecognized usage preference ${usagePreference}`);\n }\n const executionSpec = {\n executionPreference: this.mungeExecutionPreference(executionPreference, logger),\n usagePreference,\n executionQuantaPreference,\n variantPreference,\n namePreference: name,\n simdPreference: simd,\n estimatorBudget,\n };\n const assetConfig = revisionID ? { revisionID } : { assetGroup };\n const updatedFetchBehavior = fetch_js_1.addQueryParams(fetchBehavior, assetConfig);\n const fetchConfig = Object.assign({ paths }, updatedFetchBehavior);\n const executionDefinition = yield decider_js_1.measureAndDecideExecutionApproach(executionSpec, fetchConfig, logger, thresholds);\n if (executionDefinition.supported === false) {\n return { supported: false, reason: executionDefinition.reason };\n }\n logger === null || logger === void 0 ? void 0 : logger.info('Decided execution approach', executionDefinition);\n const { useSIMD, processor, variant, executionQuanta } = executionDefinition;\n const model = {\n category: category || 'voicefocus',\n name: name || 'default',\n variant,\n simd: useSIMD,\n };\n if (preResolve) {\n const startingURL = urlForModel(model, paths);\n model.url = yield fetch_js_1.resolveURL(startingURL, updatedFetchBehavior);\n }\n return {\n fetchConfig,\n model,\n processor,\n executionQuanta,\n supported: true,\n };\n });\n }\n static init(configuration, { delegate, preload = true, logger, }) {\n return __awaiter(this, void 0, void 0, function* () {\n if (configuration.supported === false) {\n throw new Error('Voice Focus not supported. Reason: ' + configuration.reason);\n }\n const { model, processor, fetchConfig, executionQuanta, } = configuration;\n const { simd, name } = model;\n const { paths } = fetchConfig;\n if (processor !== 'voicefocus-inline-processor' &&\n processor !== 'voicefocus-worker-postMessage-processor' &&\n processor !== 'voicefocus-worker-sab-processor') {\n throw new Error(`Unknown processor ${processor}`);\n }\n const modelURL = model.url || urlForModel(model, paths);\n logger === null || logger === void 0 ? void 0 : logger.debug(`Using model URL ${modelURL}.`);\n const audioBufferURL = `${paths.wasm}audio_buffer-v1${simd ? '_simd' : ''}.wasm`;\n const resamplerURL = `${paths.wasm}resampler-v1${simd ? '_simd' : ''}.wasm`;\n const workerURL = `${paths.workers}worker-v1.js`;\n const { file, node } = PROCESSORS[processor];\n const processorURL = `${paths.processors}${file}`;\n const worker = yield loader_js_1.loadWorker(workerURL, 'VoiceFocusWorker', fetchConfig, logger);\n if (preload) {\n logger === null || logger === void 0 ? void 0 : logger.debug('Preloading', modelURL);\n let message = support_js_1.supportsWASMPostMessage(globalThis) ? 'get-module' : 'get-module-buffer';\n worker.postMessage({\n message,\n preload: true,\n key: 'model',\n fetchBehavior: fetchConfig,\n path: modelURL,\n });\n }\n const numberOfInputs = (name === 'ns_es') ? 2 : 1;\n const nodeOptions = {\n processor,\n worker,\n audioBufferURL,\n resamplerURL,\n fetchBehavior: fetchConfig,\n modelURL,\n delegate,\n logger,\n numberOfInputs,\n };\n const factory = new VoiceFocus(worker, processorURL, node, nodeOptions, executionQuanta);\n return Promise.resolve(factory);\n });\n }\n createNode(context, options) {\n var _a;\n if (this.internal.isDestroyed) {\n throw new Error('Unable to create node because VoiceFocus worker has been destroyed.');\n }\n const { voiceFocusSampleRate = (context.sampleRate === 16000 ? 16000 : 48000), enabled = true, agc = DEFAULT_AGC_SETTING, } = options || {};\n const supportFarendStream = options === null || options === void 0 ? void 0 : options.es;\n const processorOptions = {\n voiceFocusSampleRate,\n enabled,\n sendBufferCount: 10,\n prefill: 6,\n agc,\n executionQuanta: this.executionQuanta,\n supportFarendStream,\n };\n const url = fetch_js_1.withQueryString(this.processorURL, (_a = this.nodeOptions) === null || _a === void 0 ? void 0 : _a.fetchBehavior);\n return context.audioWorklet\n .addModule(url)\n .then(() => new (this.nodeConstructor)(context, Object.assign(Object.assign({}, this.nodeOptions), { processorOptions })));\n }\n applyToStream(stream, context, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.internal.isDestroyed) {\n throw new Error(\"Unable to apply stream because VoiceFocus worker has been destroyed\");\n }\n const source = context.createMediaStreamSource(stream);\n const node = yield this.applyToSourceNode(source, context, options);\n const destination = context.createMediaStreamDestination();\n node.connect(destination);\n return {\n node,\n source,\n destination,\n stream: destination.stream,\n };\n });\n }\n applyToSourceNode(source, context, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const node = yield this.createNode(context, options);\n source.connect(node);\n return node;\n });\n }\n destroy() {\n if (this.internal.worker) {\n this.internal.worker.terminate();\n }\n this.internal.isDestroyed = true;\n }\n}\nexports.VoiceFocus = VoiceFocus;\nconst createAudioContext = (contextHint = DEFAULT_CONTEXT_HINT) => {\n return new (window.AudioContext || window.webkitAudioContext)(contextHint);\n};\nexports.createAudioContext = createAudioContext;\nconst getAudioInput = (context, inputOptions, voiceFocusOptions) => __awaiter(void 0, void 0, void 0, function* () {\n var _a, _b;\n const { constraints, spec, delegate, preload = true, options } = inputOptions;\n const { logger } = voiceFocusOptions;\n const config = yield VoiceFocus.configure(spec, voiceFocusOptions);\n if (!config.supported) {\n (_a = voiceFocusOptions.logger) === null || _a === void 0 ? void 0 : _a.warn('Voice Focus not supported; returning standard stream.');\n return window.navigator.mediaDevices.getUserMedia(constraints);\n }\n const factory = yield VoiceFocus.init(config, { delegate, preload, logger });\n const agc = ((_b = inputOptions.options) === null || _b === void 0 ? void 0 : _b.agc) || DEFAULT_AGC_SETTING;\n const input = yield window.navigator.mediaDevices.getUserMedia(mungeConstraints(constraints, agc));\n return factory.applyToStream(input, context, options).then(result => result.stream);\n});\nexports.getAudioInput = getAudioInput;\n","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** @internal */\nfunction stringify(args) {\n return args\n .map((v) => {\n if (typeof v === 'object') {\n return JSON.stringify(v);\n }\n return `${v}`;\n })\n .join(' ');\n}\n/** @internal */\nclass LoggerAdapter {\n constructor(base) {\n this.base = base;\n }\n debug(...args) {\n this.base.debug(stringify(args));\n }\n info(...args) {\n this.base.info(stringify(args));\n }\n warn(...args) {\n this.base.warn(stringify(args));\n }\n error(...args) {\n this.base.error(stringify(args));\n }\n}\nexports.default = LoggerAdapter;\n//# sourceMappingURL=LoggerAdapter.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"../browserbehavior/DefaultBrowserBehavior\"));\n/**\n * A device that augments a {@link Device} to apply Amazon Voice Focus\n * noise suppression to an audio input.\n */\nclass VoiceFocusTransformDevice {\n /** @internal */\n constructor(device, voiceFocus, delegate, nodeOptions, failed = false, node = undefined, browserBehavior = new DefaultBrowserBehavior_1.default(), \n /** farEndStreams` maps from a stream that could cause echo or interfere with double talkto an `AudioSourceNode` that we use to mix multiple such streams.*/\n farEndStreamToAudioSourceNode = new Map(), \n /** mixDestNode is the Audio Destination Node where farEndStreams got mixed into one stream.*/\n mixDestNode = undefined, \n /** mixSourceNode is the Audio Source Node where the stream out of mixDestNode got transferred into Audio Worklet Node for processing.*/\n mixSourceNode = undefined) {\n this.device = device;\n this.voiceFocus = voiceFocus;\n this.delegate = delegate;\n this.nodeOptions = nodeOptions;\n this.failed = failed;\n this.node = node;\n this.browserBehavior = browserBehavior;\n this.farEndStreamToAudioSourceNode = farEndStreamToAudioSourceNode;\n this.mixDestNode = mixDestNode;\n this.mixSourceNode = mixSourceNode;\n }\n /**\n * Return the inner device as provided during construction, or updated via\n * {@link VoiceFocusTransformDevice.chooseNewInnerDevice}. Do not confuse\n * this method with {@link VoiceFocusTransformDevice.intrinsicDevice}.\n */\n getInnerDevice() {\n return this.device;\n }\n /**\n * Disable the audio node while muted to reduce CPU usage.\n *\n * @param muted whether the audio device should be muted.\n */\n mute(muted) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.node) {\n return;\n }\n if (muted) {\n yield this.node.disable();\n }\n else {\n yield this.node.enable();\n }\n });\n }\n /**\n * Dispose of the inner workings of the transform device. After this method is called\n * you will need to create a new device to use Amazon Voice Focus again.\n */\n stop() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.node) {\n return;\n }\n this.node.disconnect();\n yield this.node.stop();\n });\n }\n /**\n * If you wish to choose a different inner device, but continue to use Amazon Voice Focus, you\n * can use this method to efficiently create a new device that will reuse\n * the same internal state. Only one of the two devices can be used at a time: switch\n * between them using {@link DeviceController.startAudioInput}.\n *\n * If the same device is passed as is currently in use, `this` is returned.\n *\n * @param inner The new inner device to use.\n */\n chooseNewInnerDevice(inner) {\n return __awaiter(this, void 0, void 0, function* () {\n // If the new device is 'default', always recreate. Chrome can switch out\n // the real device underneath us.\n if (this.device === inner && !isDefaultDevice(inner)) {\n return this;\n }\n return new VoiceFocusTransformDevice(inner, this.voiceFocus, this.delegate, this.nodeOptions, this.failed, this.node, this.browserBehavior, this.farEndStreamToAudioSourceNode, this.mixDestNode, this.mixSourceNode);\n });\n }\n intrinsicDevice() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.failed) {\n return this.device;\n }\n const isUsingES = this.nodeOptions.es;\n // Turn the Device into constraints with appropriate AGC settings.\n const trackConstraints = {\n echoCancellation: !isUsingES,\n // @ts-ignore\n googEchoCancellation: !isUsingES,\n // @ts-ignore\n googEchoCancellation2: !isUsingES,\n noiseSuppression: false,\n // @ts-ignore\n googNoiseSuppression: false,\n // @ts-ignore\n googHighpassFilter: false,\n // @ts-ignore\n googNoiseSuppression2: false,\n };\n let useBuiltInAGC;\n if (this.nodeOptions && this.nodeOptions.agc !== undefined) {\n useBuiltInAGC = this.nodeOptions.agc.useBuiltInAGC;\n }\n else {\n useBuiltInAGC = true;\n }\n trackConstraints.autoGainControl = useBuiltInAGC;\n // @ts-ignore\n trackConstraints.googAutoGainControl = useBuiltInAGC;\n // @ts-ignore\n trackConstraints.googAutoGainControl2 = useBuiltInAGC;\n // Empty string and null.\n if (!this.device) {\n return trackConstraints;\n }\n // Device ID.\n if (typeof this.device === 'string') {\n /* istanbul ignore if */\n if (this.browserBehavior.requiresNoExactMediaStreamConstraints()) {\n trackConstraints.deviceId = this.device;\n }\n else {\n trackConstraints.deviceId = { exact: this.device };\n }\n return trackConstraints;\n }\n // It's a stream.\n if (this.device.id) {\n // Nothing we can do.\n return this.device;\n }\n // It's constraints.\n return Object.assign(Object.assign({}, this.device), trackConstraints);\n });\n }\n createAudioNode(context) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n if (((_a = this.node) === null || _a === void 0 ? void 0 : _a.context) === context) {\n return {\n start: this.node,\n end: this.node,\n };\n }\n const agc = { useVoiceFocusAGC: false };\n const options = Object.assign({ enabled: true, agc }, this.nodeOptions);\n try {\n (_b = this.node) === null || _b === void 0 ? void 0 : _b.disconnect();\n this.node = yield this.voiceFocus.createNode(context, options);\n if (this.nodeOptions.es) {\n this.mixDestNode = new MediaStreamAudioDestinationNode(context, {\n channelCount: 1,\n channelCountMode: 'explicit',\n });\n for (const stream of this.farEndStreamToAudioSourceNode.keys()) {\n this.assignFarEndStreamToAudioSourceNode(stream);\n }\n this.createMixSourceNode();\n }\n const start = this.node;\n const end = this.node;\n return { start, end };\n }\n catch (e) {\n // It's better to return some audio stream than nothing.\n this.failed = true;\n this.delegate.onFallback(this, e);\n throw e;\n }\n });\n }\n observeMeetingAudio(audioVideo) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.nodeOptions.es) {\n return;\n }\n audioVideo.addAudioMixObserver(this);\n const stream = yield audioVideo.getCurrentMeetingAudioStream();\n if (stream) {\n this.addFarEndStream(stream);\n }\n });\n }\n unObserveMeetingAudio(audioVideo) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.nodeOptions.es) {\n return;\n }\n audioVideo.removeAudioMixObserver(this);\n const stream = yield audioVideo.getCurrentMeetingAudioStream();\n if (stream) {\n this.removeFarendStream(stream);\n }\n });\n }\n /**\n * Add an observer to receive notifications about Amazon Voice Focus lifecycle events.\n * See {@link VoiceFocusTransformDeviceObserver} for details.\n * If the observer has already been added, this method call has no effect.\n */\n addObserver(observer) {\n this.delegate.addObserver(observer);\n }\n /**\n * Remove an existing observer. If the observer has not been previously {@link\n * VoiceFocusTransformDevice.addObserver|added}, this method call has no effect.\n */\n removeObserver(observer) {\n this.delegate.removeObserver(observer);\n }\n addFarEndStream(activeStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.nodeOptions.es ||\n !activeStream ||\n this.farEndStreamToAudioSourceNode.has(activeStream)) {\n return;\n }\n if (this.node) {\n this.assignFarEndStreamToAudioSourceNode(activeStream);\n }\n else {\n this.farEndStreamToAudioSourceNode.set(activeStream, null);\n }\n });\n }\n removeFarendStream(inactiveStream) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n (_a = this.farEndStreamToAudioSourceNode.get(inactiveStream)) === null || _a === void 0 ? void 0 : _a.disconnect();\n this.farEndStreamToAudioSourceNode.delete(inactiveStream);\n });\n }\n meetingAudioStreamBecameActive(activeStream) {\n return __awaiter(this, void 0, void 0, function* () {\n this.addFarEndStream(activeStream);\n });\n }\n meetingAudioStreamBecameInactive(inactiveStream) {\n return __awaiter(this, void 0, void 0, function* () {\n this.removeFarendStream(inactiveStream);\n });\n }\n assignFarEndStreamToAudioSourceNode(streamToAdd) {\n const streamNodeToAdd = this.node.context.createMediaStreamSource(streamToAdd);\n streamNodeToAdd.channelCount = 1;\n streamNodeToAdd.channelCountMode = 'explicit';\n this.farEndStreamToAudioSourceNode.set(streamToAdd, streamNodeToAdd);\n streamNodeToAdd.connect(this.mixDestNode, 0);\n }\n createMixSourceNode() {\n this.mixSourceNode = this.node.context.createMediaStreamSource(this.mixDestNode.stream);\n this.mixSourceNode.channelCount = 1;\n this.mixSourceNode.channelCountMode = 'explicit';\n this.mixSourceNode.connect(this.node, 0, 1);\n }\n}\nfunction isDefaultDevice(device) {\n if (device === 'default') {\n return true;\n }\n if (!device || typeof device !== 'object') {\n return false;\n }\n if ('deviceId' in device && device.deviceId === 'default') {\n return true;\n }\n if ('id' in device && device.id === 'default') {\n return true;\n }\n return false;\n}\nexports.default = VoiceFocusTransformDevice;\n//# sourceMappingURL=VoiceFocusTransformDevice.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/** @internal */\nclass VoiceFocusTransformDeviceDelegate {\n constructor() {\n this.observers = new Set();\n }\n addObserver(observer) {\n this.observers.add(observer);\n }\n removeObserver(observer) {\n this.observers.delete(observer);\n }\n /** @internal */\n onFallback(device, e) {\n var _a;\n for (const observer of this.observers) {\n (_a = observer.voiceFocusFellBackToInnerStream) === null || _a === void 0 ? void 0 : _a.call(observer, device, e);\n }\n }\n onCPUWarning() {\n var _a;\n for (const observer of this.observers) {\n (_a = observer.voiceFocusInsufficientResources) === null || _a === void 0 ? void 0 : _a.call(observer);\n }\n }\n}\nexports.default = VoiceFocusTransformDeviceDelegate;\n//# sourceMappingURL=VoiceFocusTransformDeviceDelegate.js.map","\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.VoiceFocusDeviceTransformer = void 0;\nconst voicefocus_1 = require(\"../../libs/voicefocus/voicefocus\");\nconst Utils_1 = require(\"../utils/Utils\");\nconst Versioning_1 = __importDefault(require(\"../versioning/Versioning\"));\nconst LoggerAdapter_1 = __importDefault(require(\"./LoggerAdapter\"));\nconst VoiceFocusTransformDevice_1 = __importDefault(require(\"./VoiceFocusTransformDevice\"));\nconst VoiceFocusTransformDeviceDelegate_1 = __importDefault(require(\"./VoiceFocusTransformDeviceDelegate\"));\n/**\n * `VoiceFocusDeviceTransformer` is used to create {@link VoiceFocusTransformDevice|transform devices}\n * that apply Amazon Voice Focus noise suppression to audio input.\n *\n * This transformer captures relevant configuration. You should check for support, initialize,\n * and then create a device as follows:\n *\n * ```typescript\n * const deviceID = null;\n *\n * // This check for support is cheap and quick, and should be used to gate use\n * // of this feature.\n * if (!(await VoiceFocusDeviceTransformer.isSupported()) {\n * console.log('Amazon Voice Focus not supported in this browser.');\n * return deviceID;\n * }\n *\n * let transformer: VoiceFocusDeviceTransformer;\n * try {\n * // This operation can fail in ways that do not indicate no support,\n * // but do indicate an inability to apply Amazon Voice Focus. Trying again\n * // might succeed.\n * transformer = await VoiceFocusDeviceTransformer.create({});\n * } catch (e) {\n * // Something went wrong.\n * console.log('Unable to instantiate Amazon Voice Focus.');\n * return deviceID;\n * }\n *\n * if (!transformer.isSupported()) {\n * // The transformer will fall through, but your UI might care.\n * console.log('Amazon Voice Focus not supported in this browser.');\n * }\n *\n * return await transformer.createTransformDevice(deviceID);\n * ```\n */\nclass VoiceFocusDeviceTransformer {\n constructor(spec, { preload = true, logger, fetchBehavior = VoiceFocusDeviceTransformer.defaultFetchBehavior(), }, config) {\n this.spec = spec;\n this.supported = true;\n this.logger = logger;\n this.vfLogger = logger ? new LoggerAdapter_1.default(logger) : undefined;\n this.preload = preload;\n this.fetchBehavior = fetchBehavior;\n // If the user didn't specify one, add the default, which is\n // identified by the major and minor SDK version.\n this.spec = VoiceFocusDeviceTransformer.augmentSpec(this.spec);\n if (config) {\n this.configuration = Promise.resolve(config);\n }\n }\n /**\n * Quickly check whether Amazon Voice Focus is supported on this platform.\n *\n * This will return `false` if key technologies are absent. A value of `true` does not\n * necessarily mean that adding Amazon Voice Focus will succeed: it is still possible that the\n * configuration of the page or the CPU speed of the device are limiting factors.\n *\n * {@link VoiceFocusDeviceTransformer.create} will return an instance whose\n * `isSupported` method more accurately reflects whether Amazon Voice Focus\n * is supported in the current environment.\n *\n * This method will only reject if you provide invalid inputs.\n *\n * @param spec An optional asset group and URL paths to use when fetching. You can pass\n * a complete {@link VoiceFocusSpec} here for convenience, matching the signature of {@link VoiceFocusDeviceTransformer.create}.\n * @param options Additional named arguments, including `logger`. Set\n * `allowIFrame` to false to cause the support check to fail in\n * an iframe.\n * Chromium's security model means that audio processing works\n * poorly in iframes.\n */\n static isSupported(spec, options) {\n var _a, _b;\n const fetchBehavior = VoiceFocusDeviceTransformer.defaultFetchBehavior();\n const logger = (options === null || options === void 0 ? void 0 : options.logger) ? new LoggerAdapter_1.default(options.logger) : undefined;\n const opts = {\n fetchBehavior,\n logger,\n };\n // This is impossible to test in Node, so Istanbul ignore.\n /* istanbul ignore next */\n if (Utils_1.isIFramed()) {\n if ((options === null || options === void 0 ? void 0 : options.allowIFrame) === false) {\n (_a = options === null || options === void 0 ? void 0 : options.logger) === null || _a === void 0 ? void 0 : _a.error('Amazon Voice Focus support check inside iframe: not supported.');\n return Promise.resolve(false);\n }\n else {\n (_b = options === null || options === void 0 ? void 0 : options.logger) === null || _b === void 0 ? void 0 : _b.warn('Amazon Voice Focus support check inside iframe: not recommended.');\n }\n }\n return voicefocus_1.VoiceFocus.isSupported(VoiceFocusDeviceTransformer.augmentSpec(spec), opts);\n }\n /**\n * Create a transformer that can apply Amazon Voice Focus noise suppression to a device.\n *\n * This method will reject if the provided spec is invalid, or if the process of\n * checking for support or estimating fails (e.g., because the network is unreachable).\n *\n * If Amazon Voice Focus is not supported on this device, this call will not reject and\n * `isSupported` will return `false` on the returned instance. That instance will\n * pass through devices unmodified.\n *\n * @param spec A definition of how you want Amazon Voice Focus to behave. See the declaration of\n * {@link VoiceFocusSpec} for details.\n * @param options Additional named arguments, including `logger` and `preload`.\n */\n static create(spec = {}, options = {}, config, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createMeetingResponse, \n // eslint-disable-next-line\n createAttendeeResponse) {\n var _a, _b, _c;\n return __awaiter(this, void 0, void 0, function* () {\n if (createMeetingResponse) {\n if (createMeetingResponse.Meeting.Meeting) {\n createMeetingResponse = createMeetingResponse.Meeting;\n }\n }\n const meetingFeaturesAllowsES = ((_c = (_b = (_a = createMeetingResponse === null || createMeetingResponse === void 0 ? void 0 : createMeetingResponse.Meeting) === null || _a === void 0 ? void 0 : _a.MeetingFeatures) === null || _b === void 0 ? void 0 : _b.Audio) === null || _c === void 0 ? void 0 : _c.EchoReduction) === 'AVAILABLE';\n const forbiddenConfig = config &&\n config.supported === true &&\n config.model.name === 'ns_es' &&\n !meetingFeaturesAllowsES;\n const forbiddenSpec = spec.name === 'ns_es' && !meetingFeaturesAllowsES;\n if (forbiddenConfig || forbiddenSpec) {\n throw new Error('Echo Reduction requested but not enabled.');\n }\n const transformer = new VoiceFocusDeviceTransformer(spec, options, config);\n // This also preps the first `VoiceFocus` instance.\n yield transformer.init();\n return transformer;\n });\n }\n /**\n * Given a spec and options, perform the configuration work that is\n * ordinarily performed during creation of a transformer.\n *\n * The computed configuration is not portable between devices or sessions,\n * but is useful for 'moving' transformers between windows.\n *\n * Pass the returned configuration as the third argument to a call to\n * {@link VoiceFocusDeviceTransformer.create} with the matching spec.\n */\n static configure(spec = {}, options = {}) {\n return __awaiter(this, void 0, void 0, function* () {\n const transformer = new VoiceFocusDeviceTransformer(spec, options, undefined);\n return transformer.configure(true);\n });\n }\n /**\n * Return the computed configuration for this transformer.\n */\n getConfiguration() {\n return this.configuration;\n }\n /**\n * Return whether this transformer is able to function in this environment.\n * If not, calls to\n * {@link VoiceFocusDeviceTransformer.createTransformDevice|createTransformDevice}\n * will pass through an unmodified device.\n */\n isSupported() {\n return this.supported;\n }\n /**\n * Apply Amazon Voice Focus to the selected {@link Device}.\n *\n * If this is a stream, it should be one that does not include other noise suppression features,\n * and you should consider whether to disable automatic gain control (AGC) on the stream, because\n * it can interact with noise suppression.\n *\n * @returns a device promise. This will always resolve to either a\n * {@link VoiceFocusTransformDevice} or undefined; it will never reject.\n */\n createTransformDevice(device, nodeOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.supported) {\n // Fall back.\n return undefined;\n }\n try {\n const preload = true;\n const [vf, delegate] = yield this.allocateVoiceFocus(preload);\n const options = Object.assign(Object.assign({}, nodeOptions), { es: this.spec.name === 'ns_es' });\n return new VoiceFocusTransformDevice_1.default(device, vf, delegate, options);\n }\n catch (e) {\n // Fall back.\n /* istanbul ignore next */\n return undefined;\n }\n });\n }\n /**\n * Destroy the Voice Focus instance and worker thread associated with the transformer.\n */\n static destroyVoiceFocus(transformer) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n /* istanbul ignore next */\n (_a = transformer === null || transformer === void 0 ? void 0 : transformer.vf) === null || _a === void 0 ? void 0 : _a.destroy();\n });\n }\n static augmentSpec(spec) {\n if (!spec || (!spec.assetGroup && !spec.revisionID)) {\n return Object.assign(Object.assign({}, spec), { assetGroup: VoiceFocusDeviceTransformer.currentSDKAssetGroup() });\n }\n return spec;\n }\n configure(preResolve = false) {\n return __awaiter(this, void 0, void 0, function* () {\n const options = {\n fetchBehavior: this.fetchBehavior,\n preResolve,\n logger: this.vfLogger,\n };\n return voicefocus_1.VoiceFocus.configure(this.spec, options);\n });\n }\n init() {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.configuration) {\n this.configuration = this.configure();\n }\n const config = yield this.configuration;\n if (!config.supported) {\n // No need to init: it won't work.\n this.supported = false;\n return;\n }\n // We initialize the first one right now, which makes it easier to detect\n // possible failures.\n // This can throw for malformed input. Pass that up the chain.\n this.pendingVoiceFocus = this.createVoiceFocus(config, this.preload);\n try {\n yield this.pendingVoiceFocus;\n }\n catch (e) {\n (_a = this.logger) === null || _a === void 0 ? void 0 : _a.error(`Unable to initialize Amazon Voice Focus: ${e}`);\n this.supported = false;\n }\n });\n }\n createVoiceFocus(config, preload) {\n return __awaiter(this, void 0, void 0, function* () {\n const delegate = new VoiceFocusTransformDeviceDelegate_1.default();\n this.vf = yield voicefocus_1.VoiceFocus.init(config, { delegate, preload, logger: this.vfLogger });\n return [this.vf, delegate];\n });\n }\n allocateVoiceFocus(preload) {\n return __awaiter(this, void 0, void 0, function* () {\n // A little safety.\n /* istanbul ignore next */\n if (!this.supported) {\n throw new Error('Not supported.');\n }\n if (this.pendingVoiceFocus) {\n // Use the one we already have, and free the slot for any future execution.\n const vf = this.pendingVoiceFocus;\n this.pendingVoiceFocus = undefined;\n return vf;\n }\n return this.createVoiceFocus(yield this.configuration, preload);\n });\n }\n static majorVersion() {\n return Versioning_1.default.sdkVersion.match(/^[1-9][0-9]*\\.(?:0|[1-9][0-9]*)/)[0];\n }\n static majorMinorVersion() {\n return Versioning_1.default.sdkVersion.match(/^[1-9][0-9]*\\.(?:0|(?:[1-9][0-9]*))\\.(?:0|[1-9][0-9]*)/)[0];\n }\n static currentSDKAssetGroup() {\n // Just on the off chance someone does something silly, handle\n // malformed version strings here.\n const v = this.majorVersion();\n // Just a little safety.\n /* istanbul ignore next */\n if (!v) {\n return `stable-v1`;\n }\n return `sdk-${v}`;\n }\n // Note that we use query strings here, not headers, in order to make these requests 'simple' and\n // avoid the need for CORS preflights.\n // Be very, very careful if you choose to add headers here. You should never need to.\n static defaultFetchBehavior() {\n // Just a little safety.\n /* istanbul ignore next */\n const version = VoiceFocusDeviceTransformer.majorMinorVersion() || 'unknown';\n const ua = Versioning_1.default.sdkUserAgentLowResolution;\n return {\n escapedQueryString: `sdk=${encodeURIComponent(version)}&ua=${encodeURIComponent(ua)}`,\n };\n }\n}\nexports.VoiceFocusDeviceTransformer = VoiceFocusDeviceTransformer;\nexports.default = VoiceFocusDeviceTransformer;\n//# sourceMappingURL=VoiceFocusDeviceTransformer.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultEventController = exports.DefaultDevicePixelRatioMonitor = exports.DefaultDeviceController = exports.DefaultContentShareController = exports.DefaultBrowserBehavior = exports.DefaultAudioVideoFacade = exports.DefaultAudioVideoController = exports.DefaultAudioMixController = exports.DefaultActiveSpeakerPolicy = exports.DefaultActiveSpeakerDetector = exports.DataMessage = exports.CreateSDPTask = exports.CreatePeerConnectionTask = exports.ContentShareMediaStreamBroker = exports.ContentShareConstants = exports.ConsoleLogger = exports.ConnectionHealthPolicyConfiguration = exports.ConnectionHealthData = exports.ClientVideoStreamReceivingReport = exports.ClientMetricReportMediaType = exports.ClientMetricReportDirection = exports.ClientMetricReport = exports.CleanStoppedSessionTask = exports.CleanRestartedSessionTask = exports.CheckVideoInputFeedback = exports.CheckVideoConnectivityFeedback = exports.CheckNetworkUDPConnectivityFeedback = exports.CheckNetworkTCPConnectivityFeedback = exports.CheckContentShareConnectivityFeedback = exports.CheckCameraResolutionFeedback = exports.CheckAudioOutputFeedback = exports.CheckAudioInputFeedback = exports.CheckAudioConnectivityFeedback = exports.CanvasVideoFrameBuffer = exports.CSPMonitor = exports.BitrateParameters = exports.BaseTask = exports.BaseConnectionHealthPolicy = exports.BackgroundReplacementVideoFrameProcessor = exports.BackgroundFilterVideoFrameProcessor = exports.BackgroundBlurVideoFrameProcessor = exports.BackgroundBlurStrength = exports.AudioVideoControllerState = exports.AudioProfile = exports.AudioLogEvent = exports.Attendee = exports.AttachMediaInputTask = exports.AsyncScheduler = exports.ApplicationMetadata = exports.AllHighestVideoBandwidthPolicy = void 0;\nexports.MeetingReadinessCheckerConfiguration = exports.MeetingFeatures = exports.MeetingEventsClientConfiguration = exports.MediaDeviceProxyHandler = exports.Maybe = exports.LogLevel = exports.Log = exports.ListenForVolumeIndicatorsTask = exports.LeaveAndReceiveLeaveAckTask = exports.JoinAndReceiveIndexTask = exports.IntervalScheduler = exports.InMemoryJSONEventBuffer = exports.GlobalMetricReport = exports.GetUserMediaError = exports.FullJitterLimitedBackoff = exports.FullJitterBackoffFactory = exports.FullJitterBackoff = exports.FinishGatheringICECandidatesTask = exports.EventIngestionConfiguration = exports.EventBufferConfiguration = exports.DeviceSelection = exports.DevicePixelRatioWindowSource = exports.DefaultWebSocketAdapter = exports.DefaultVolumeIndicatorAdapter = exports.DefaultVideoTransformDevice = exports.DefaultVideoTileFactory = exports.DefaultVideoTileController = exports.DefaultVideoTile = exports.DefaultVideoStreamIndex = exports.DefaultVideoStreamIdSet = exports.DefaultVideoFrameProcessorTimer = exports.DefaultVideoFrameProcessorPipeline = exports.DefaultVideoCaptureAndEncodeParameter = exports.DefaultUserAgentParser = exports.DefaultTranscriptionController = exports.DefaultTransceiverController = exports.DefaultSimulcastUplinkPolicyForContentShare = exports.DefaultSimulcastUplinkPolicy = exports.DefaultSignalingClient = exports.DefaultSigV4 = exports.DefaultSessionStateController = exports.DefaultReconnectController = exports.DefaultRealtimeController = exports.DefaultPingPong = exports.DefaultModality = exports.DefaultMessagingSession = exports.DefaultMeetingSession = exports.DefaultMeetingReadinessChecker = exports.DefaultMeetingEventReporter = exports.DefaultMediaDeviceFactory = void 0;\nexports.RedundantAudioEncoderWorkerCode = exports.RedundantAudioEncoder = exports.ReconnectionHealthPolicy = exports.ReceiveVideoStreamIndexTask = exports.ReceiveVideoInputTask = exports.ReceiveRemoteVideoPauseResumeTask = exports.ReceiveAudioInputTask = exports.RealtimeVolumeIndicator = exports.RealtimeState = exports.RealtimeAttendeePositionInFrame = exports.PromoteToPrimaryMeetingTask = exports.PromiseQueue = exports.PrefetchSortBy = exports.PrefetchOn = exports.PermissionDeniedError = exports.ParallelGroupTask = exports.POSTLogger = exports.OverconstrainedError = exports.OpenSignalingConnectionTask = exports.OnceTask = exports.NotReadableError = exports.NotFoundError = exports.None = exports.NoVideoUplinkBandwidthPolicy = exports.NoVideoDownlinkBandwidthPolicy = exports.NoOpVideoFrameProcessor = exports.NoOpVideoElementFactory = exports.NoOpTask = exports.NoOpMediaStreamBroker = exports.NoOpLogger = exports.NoOpEventReporter = exports.NoOpDeviceController = exports.NoOpDebugLogger = exports.NoOpAudioVideoController = exports.NScaleVideoUplinkBandwidthPolicy = exports.MutableVideoPreferences = exports.MultiLogger = exports.MonitorTask = exports.ModelSpecBuilder = exports.MessagingSessionConfiguration = exports.Message = exports.MeetingSessionVideoAvailability = exports.MeetingSessionURLs = exports.MeetingSessionTURNCredentials = exports.MeetingSessionStatusCode = exports.MeetingSessionStatus = exports.MeetingSessionLifecycleEventCondition = exports.MeetingSessionLifecycleEvent = exports.MeetingSessionCredentials = exports.MeetingSessionConfiguration = void 0;\nexports.VideoLogEvent = exports.VideoFxProcessor = exports.VideoCodecCapability = exports.VideoAdaptiveProbePolicy = exports.Versioning = exports.UnusableAudioWarningConnectionHealthPolicy = exports.TypeError = exports.TranscriptionStatusType = exports.TranscriptionStatus = exports.TranscriptResult = exports.TranscriptLanguageWithScore = exports.TranscriptItemType = exports.TranscriptItem = exports.TranscriptEntity = exports.TranscriptAlternative = exports.Transcript = exports.TimeoutTask = exports.TimeoutScheduler = exports.TaskStatus = exports.TargetDisplaySize = exports.SubscribeAndReceiveSubscribeAckTask = exports.StreamMetricReport = exports.Some = exports.SingleNodeAudioTransformDevice = exports.SimulcastVideoStreamIndex = exports.SimulcastTransceiverController = exports.SimulcastLayers = exports.SimulcastContentShareTransceiverController = exports.SignalingClientVideoSubscriptionConfiguration = exports.SignalingClientSubscribe = exports.SignalingClientJoin = exports.SignalingClientEventType = exports.SignalingClientEvent = exports.SignalingClientConnectionRequest = exports.SignalingAndMetricsConnectionMonitor = exports.SetRemoteDescriptionTask = exports.SetLocalDescriptionTask = exports.SessionStateControllerTransitionResult = exports.SessionStateControllerState = exports.SessionStateControllerDeferPriority = exports.SessionStateControllerAction = exports.ServerSideNetworkAdaption = exports.SerialGroupTask = exports.SendingAudioFailureConnectionHealthPolicy = exports.SendAndReceiveDataMessagesTask = exports.SDPMediaSection = exports.SDPCandidateType = exports.SDP = exports.RunnableTask = exports.RedundantAudioRecoveryMetricReport = void 0;\nexports.isVideoTransformDevice = exports.isDestroyable = exports.isAudioTransformDevice = exports.ZLIBTextCompressor = exports.WebSocketReadyState = exports.WaitForAttendeePresenceTask = exports.VoiceFocusTransformDevice = exports.VoiceFocusDeviceTransformer = exports.VideoTileState = exports.VideoStreamDescription = exports.VideoSource = exports.VideoQualitySettings = exports.VideoQualityAdaptationPreference = exports.VideoPriorityBasedPolicyConfig = exports.VideoPriorityBasedPolicy = exports.VideoPreferences = exports.VideoPreference = exports.VideoOnlyTransceiverController = void 0;\nconst AllHighestVideoBandwidthPolicy_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/AllHighestVideoBandwidthPolicy\"));\nexports.AllHighestVideoBandwidthPolicy = AllHighestVideoBandwidthPolicy_1.default;\nconst ApplicationMetadata_1 = __importDefault(require(\"./applicationmetadata/ApplicationMetadata\"));\nexports.ApplicationMetadata = ApplicationMetadata_1.default;\nconst AsyncScheduler_1 = __importDefault(require(\"./scheduler/AsyncScheduler\"));\nexports.AsyncScheduler = AsyncScheduler_1.default;\nconst AttachMediaInputTask_1 = __importDefault(require(\"./task/AttachMediaInputTask\"));\nexports.AttachMediaInputTask = AttachMediaInputTask_1.default;\nconst Attendee_1 = __importDefault(require(\"./attendee/Attendee\"));\nexports.Attendee = Attendee_1.default;\nconst AudioLogEvent_1 = __importDefault(require(\"./statscollector/AudioLogEvent\"));\nexports.AudioLogEvent = AudioLogEvent_1.default;\nconst AudioProfile_1 = __importDefault(require(\"./audioprofile/AudioProfile\"));\nexports.AudioProfile = AudioProfile_1.default;\nconst AudioVideoControllerState_1 = __importDefault(require(\"./audiovideocontroller/AudioVideoControllerState\"));\nexports.AudioVideoControllerState = AudioVideoControllerState_1.default;\nconst BackgroundBlurStrength_1 = __importDefault(require(\"./backgroundblurprocessor/BackgroundBlurStrength\"));\nexports.BackgroundBlurStrength = BackgroundBlurStrength_1.default;\nconst BackgroundBlurVideoFrameProcessor_1 = __importDefault(require(\"./backgroundblurprocessor/BackgroundBlurVideoFrameProcessor\"));\nexports.BackgroundBlurVideoFrameProcessor = BackgroundBlurVideoFrameProcessor_1.default;\nconst BackgroundFilterVideoFrameProcessor_1 = __importDefault(require(\"./backgroundfilter/BackgroundFilterVideoFrameProcessor\"));\nexports.BackgroundFilterVideoFrameProcessor = BackgroundFilterVideoFrameProcessor_1.default;\nconst BackgroundReplacementVideoFrameProcessor_1 = __importDefault(require(\"./backgroundreplacementprocessor/BackgroundReplacementVideoFrameProcessor\"));\nexports.BackgroundReplacementVideoFrameProcessor = BackgroundReplacementVideoFrameProcessor_1.default;\nconst BaseConnectionHealthPolicy_1 = __importDefault(require(\"./connectionhealthpolicy/BaseConnectionHealthPolicy\"));\nexports.BaseConnectionHealthPolicy = BaseConnectionHealthPolicy_1.default;\nconst BaseTask_1 = __importDefault(require(\"./task/BaseTask\"));\nexports.BaseTask = BaseTask_1.default;\nconst BitrateParameters_1 = __importDefault(require(\"./videouplinkbandwidthpolicy/BitrateParameters\"));\nexports.BitrateParameters = BitrateParameters_1.default;\nconst CSPMonitor_1 = __importDefault(require(\"./cspmonitor/CSPMonitor\"));\nexports.CSPMonitor = CSPMonitor_1.default;\nconst CanvasVideoFrameBuffer_1 = __importDefault(require(\"./videoframeprocessor/CanvasVideoFrameBuffer\"));\nexports.CanvasVideoFrameBuffer = CanvasVideoFrameBuffer_1.default;\nconst CheckAudioConnectivityFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckAudioConnectivityFeedback\"));\nexports.CheckAudioConnectivityFeedback = CheckAudioConnectivityFeedback_1.default;\nconst CheckAudioInputFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckAudioInputFeedback\"));\nexports.CheckAudioInputFeedback = CheckAudioInputFeedback_1.default;\nconst CheckAudioOutputFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckAudioOutputFeedback\"));\nexports.CheckAudioOutputFeedback = CheckAudioOutputFeedback_1.default;\nconst CheckCameraResolutionFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckCameraResolutionFeedback\"));\nexports.CheckCameraResolutionFeedback = CheckCameraResolutionFeedback_1.default;\nconst CheckContentShareConnectivityFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckContentShareConnectivityFeedback\"));\nexports.CheckContentShareConnectivityFeedback = CheckContentShareConnectivityFeedback_1.default;\nconst CheckNetworkTCPConnectivityFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckNetworkTCPConnectivityFeedback\"));\nexports.CheckNetworkTCPConnectivityFeedback = CheckNetworkTCPConnectivityFeedback_1.default;\nconst CheckNetworkUDPConnectivityFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckNetworkUDPConnectivityFeedback\"));\nexports.CheckNetworkUDPConnectivityFeedback = CheckNetworkUDPConnectivityFeedback_1.default;\nconst CheckVideoConnectivityFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckVideoConnectivityFeedback\"));\nexports.CheckVideoConnectivityFeedback = CheckVideoConnectivityFeedback_1.default;\nconst CheckVideoInputFeedback_1 = __importDefault(require(\"./meetingreadinesschecker/CheckVideoInputFeedback\"));\nexports.CheckVideoInputFeedback = CheckVideoInputFeedback_1.default;\nconst CleanRestartedSessionTask_1 = __importDefault(require(\"./task/CleanRestartedSessionTask\"));\nexports.CleanRestartedSessionTask = CleanRestartedSessionTask_1.default;\nconst CleanStoppedSessionTask_1 = __importDefault(require(\"./task/CleanStoppedSessionTask\"));\nexports.CleanStoppedSessionTask = CleanStoppedSessionTask_1.default;\nconst ClientMetricReport_1 = __importDefault(require(\"./clientmetricreport/ClientMetricReport\"));\nexports.ClientMetricReport = ClientMetricReport_1.default;\nconst ClientMetricReportDirection_1 = __importDefault(require(\"./clientmetricreport/ClientMetricReportDirection\"));\nexports.ClientMetricReportDirection = ClientMetricReportDirection_1.default;\nconst ClientMetricReportMediaType_1 = __importDefault(require(\"./clientmetricreport/ClientMetricReportMediaType\"));\nexports.ClientMetricReportMediaType = ClientMetricReportMediaType_1.default;\nconst ClientVideoStreamReceivingReport_1 = __importDefault(require(\"./clientmetricreport/ClientVideoStreamReceivingReport\"));\nexports.ClientVideoStreamReceivingReport = ClientVideoStreamReceivingReport_1.default;\nconst ConnectionHealthData_1 = __importDefault(require(\"./connectionhealthpolicy/ConnectionHealthData\"));\nexports.ConnectionHealthData = ConnectionHealthData_1.default;\nconst ConnectionHealthPolicyConfiguration_1 = __importDefault(require(\"./connectionhealthpolicy/ConnectionHealthPolicyConfiguration\"));\nexports.ConnectionHealthPolicyConfiguration = ConnectionHealthPolicyConfiguration_1.default;\nconst ConsoleLogger_1 = __importDefault(require(\"./logger/ConsoleLogger\"));\nexports.ConsoleLogger = ConsoleLogger_1.default;\nconst ContentShareConstants_1 = __importDefault(require(\"./contentsharecontroller/ContentShareConstants\"));\nexports.ContentShareConstants = ContentShareConstants_1.default;\nconst ContentShareMediaStreamBroker_1 = __importDefault(require(\"./contentsharecontroller/ContentShareMediaStreamBroker\"));\nexports.ContentShareMediaStreamBroker = ContentShareMediaStreamBroker_1.default;\nconst CreatePeerConnectionTask_1 = __importDefault(require(\"./task/CreatePeerConnectionTask\"));\nexports.CreatePeerConnectionTask = CreatePeerConnectionTask_1.default;\nconst CreateSDPTask_1 = __importDefault(require(\"./task/CreateSDPTask\"));\nexports.CreateSDPTask = CreateSDPTask_1.default;\nconst DataMessage_1 = __importDefault(require(\"./datamessage/DataMessage\"));\nexports.DataMessage = DataMessage_1.default;\nconst DefaultActiveSpeakerDetector_1 = __importDefault(require(\"./activespeakerdetector/DefaultActiveSpeakerDetector\"));\nexports.DefaultActiveSpeakerDetector = DefaultActiveSpeakerDetector_1.default;\nconst DefaultActiveSpeakerPolicy_1 = __importDefault(require(\"./activespeakerpolicy/DefaultActiveSpeakerPolicy\"));\nexports.DefaultActiveSpeakerPolicy = DefaultActiveSpeakerPolicy_1.default;\nconst DefaultAudioMixController_1 = __importDefault(require(\"./audiomixcontroller/DefaultAudioMixController\"));\nexports.DefaultAudioMixController = DefaultAudioMixController_1.default;\nconst DefaultAudioVideoController_1 = __importDefault(require(\"./audiovideocontroller/DefaultAudioVideoController\"));\nexports.DefaultAudioVideoController = DefaultAudioVideoController_1.default;\nconst DefaultAudioVideoFacade_1 = __importDefault(require(\"./audiovideofacade/DefaultAudioVideoFacade\"));\nexports.DefaultAudioVideoFacade = DefaultAudioVideoFacade_1.default;\nconst DefaultBrowserBehavior_1 = __importDefault(require(\"./browserbehavior/DefaultBrowserBehavior\"));\nexports.DefaultBrowserBehavior = DefaultBrowserBehavior_1.default;\nconst DefaultContentShareController_1 = __importDefault(require(\"./contentsharecontroller/DefaultContentShareController\"));\nexports.DefaultContentShareController = DefaultContentShareController_1.default;\nconst DefaultDeviceController_1 = __importDefault(require(\"./devicecontroller/DefaultDeviceController\"));\nexports.DefaultDeviceController = DefaultDeviceController_1.default;\nconst DefaultDevicePixelRatioMonitor_1 = __importDefault(require(\"./devicepixelratiomonitor/DefaultDevicePixelRatioMonitor\"));\nexports.DefaultDevicePixelRatioMonitor = DefaultDevicePixelRatioMonitor_1.default;\nconst DefaultEventController_1 = __importDefault(require(\"./eventcontroller/DefaultEventController\"));\nexports.DefaultEventController = DefaultEventController_1.default;\nconst DefaultMediaDeviceFactory_1 = __importDefault(require(\"./mediadevicefactory/DefaultMediaDeviceFactory\"));\nexports.DefaultMediaDeviceFactory = DefaultMediaDeviceFactory_1.default;\nconst DefaultMeetingEventReporter_1 = __importDefault(require(\"./eventreporter/DefaultMeetingEventReporter\"));\nexports.DefaultMeetingEventReporter = DefaultMeetingEventReporter_1.default;\nconst DefaultMeetingReadinessChecker_1 = __importDefault(require(\"./meetingreadinesschecker/DefaultMeetingReadinessChecker\"));\nexports.DefaultMeetingReadinessChecker = DefaultMeetingReadinessChecker_1.default;\nconst DefaultMeetingSession_1 = __importDefault(require(\"./meetingsession/DefaultMeetingSession\"));\nexports.DefaultMeetingSession = DefaultMeetingSession_1.default;\nconst DefaultMessagingSession_1 = __importDefault(require(\"./messagingsession/DefaultMessagingSession\"));\nexports.DefaultMessagingSession = DefaultMessagingSession_1.default;\nconst DefaultModality_1 = __importDefault(require(\"./modality/DefaultModality\"));\nexports.DefaultModality = DefaultModality_1.default;\nconst DefaultPingPong_1 = __importDefault(require(\"./pingpong/DefaultPingPong\"));\nexports.DefaultPingPong = DefaultPingPong_1.default;\nconst DefaultRealtimeController_1 = __importDefault(require(\"./realtimecontroller/DefaultRealtimeController\"));\nexports.DefaultRealtimeController = DefaultRealtimeController_1.default;\nconst DefaultReconnectController_1 = __importDefault(require(\"./reconnectcontroller/DefaultReconnectController\"));\nexports.DefaultReconnectController = DefaultReconnectController_1.default;\nconst DefaultSessionStateController_1 = __importDefault(require(\"./sessionstatecontroller/DefaultSessionStateController\"));\nexports.DefaultSessionStateController = DefaultSessionStateController_1.default;\nconst DefaultSigV4_1 = __importDefault(require(\"./sigv4/DefaultSigV4\"));\nexports.DefaultSigV4 = DefaultSigV4_1.default;\nconst DefaultSignalingClient_1 = __importDefault(require(\"./signalingclient/DefaultSignalingClient\"));\nexports.DefaultSignalingClient = DefaultSignalingClient_1.default;\nconst DefaultSimulcastUplinkPolicy_1 = __importDefault(require(\"./videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicy\"));\nexports.DefaultSimulcastUplinkPolicy = DefaultSimulcastUplinkPolicy_1.default;\nconst DefaultSimulcastUplinkPolicyForContentShare_1 = __importDefault(require(\"./videouplinkbandwidthpolicy/DefaultSimulcastUplinkPolicyForContentShare\"));\nexports.DefaultSimulcastUplinkPolicyForContentShare = DefaultSimulcastUplinkPolicyForContentShare_1.default;\nconst DefaultTransceiverController_1 = __importDefault(require(\"./transceivercontroller/DefaultTransceiverController\"));\nexports.DefaultTransceiverController = DefaultTransceiverController_1.default;\nconst DefaultTranscriptionController_1 = __importDefault(require(\"./transcript/DefaultTranscriptionController\"));\nexports.DefaultTranscriptionController = DefaultTranscriptionController_1.default;\nconst DefaultUserAgentParser_1 = __importDefault(require(\"./useragentparser/DefaultUserAgentParser\"));\nexports.DefaultUserAgentParser = DefaultUserAgentParser_1.default;\nconst DefaultVideoCaptureAndEncodeParameter_1 = __importDefault(require(\"./videocaptureandencodeparameter/DefaultVideoCaptureAndEncodeParameter\"));\nexports.DefaultVideoCaptureAndEncodeParameter = DefaultVideoCaptureAndEncodeParameter_1.default;\nconst DefaultVideoFrameProcessorPipeline_1 = __importDefault(require(\"./videoframeprocessor/DefaultVideoFrameProcessorPipeline\"));\nexports.DefaultVideoFrameProcessorPipeline = DefaultVideoFrameProcessorPipeline_1.default;\nconst DefaultVideoFrameProcessorTimer_1 = __importDefault(require(\"./videoframeprocessor/DefaultVideoFrameProcessorTimer\"));\nexports.DefaultVideoFrameProcessorTimer = DefaultVideoFrameProcessorTimer_1.default;\nconst DefaultVideoStreamIdSet_1 = __importDefault(require(\"./videostreamidset/DefaultVideoStreamIdSet\"));\nexports.DefaultVideoStreamIdSet = DefaultVideoStreamIdSet_1.default;\nconst DefaultVideoStreamIndex_1 = __importDefault(require(\"./videostreamindex/DefaultVideoStreamIndex\"));\nexports.DefaultVideoStreamIndex = DefaultVideoStreamIndex_1.default;\nconst DefaultVideoTile_1 = __importDefault(require(\"./videotile/DefaultVideoTile\"));\nexports.DefaultVideoTile = DefaultVideoTile_1.default;\nconst DefaultVideoTileController_1 = __importDefault(require(\"./videotilecontroller/DefaultVideoTileController\"));\nexports.DefaultVideoTileController = DefaultVideoTileController_1.default;\nconst DefaultVideoTileFactory_1 = __importDefault(require(\"./videotilefactory/DefaultVideoTileFactory\"));\nexports.DefaultVideoTileFactory = DefaultVideoTileFactory_1.default;\nconst DefaultVideoTransformDevice_1 = __importDefault(require(\"./videoframeprocessor/DefaultVideoTransformDevice\"));\nexports.DefaultVideoTransformDevice = DefaultVideoTransformDevice_1.default;\nconst DefaultVolumeIndicatorAdapter_1 = __importDefault(require(\"./volumeindicatoradapter/DefaultVolumeIndicatorAdapter\"));\nexports.DefaultVolumeIndicatorAdapter = DefaultVolumeIndicatorAdapter_1.default;\nconst DefaultWebSocketAdapter_1 = __importDefault(require(\"./websocketadapter/DefaultWebSocketAdapter\"));\nexports.DefaultWebSocketAdapter = DefaultWebSocketAdapter_1.default;\nconst DevicePixelRatioWindowSource_1 = __importDefault(require(\"./devicepixelratiosource/DevicePixelRatioWindowSource\"));\nexports.DevicePixelRatioWindowSource = DevicePixelRatioWindowSource_1.default;\nconst DeviceSelection_1 = __importDefault(require(\"./devicecontroller/DeviceSelection\"));\nexports.DeviceSelection = DeviceSelection_1.default;\nconst EventBufferConfiguration_1 = __importDefault(require(\"./eventbufferconfiguration/EventBufferConfiguration\"));\nexports.EventBufferConfiguration = EventBufferConfiguration_1.default;\nconst EventIngestionConfiguration_1 = __importDefault(require(\"./eventingestionconfiguration/EventIngestionConfiguration\"));\nexports.EventIngestionConfiguration = EventIngestionConfiguration_1.default;\nconst FinishGatheringICECandidatesTask_1 = __importDefault(require(\"./task/FinishGatheringICECandidatesTask\"));\nexports.FinishGatheringICECandidatesTask = FinishGatheringICECandidatesTask_1.default;\nconst FullJitterBackoff_1 = __importDefault(require(\"./backoff/FullJitterBackoff\"));\nexports.FullJitterBackoff = FullJitterBackoff_1.default;\nconst FullJitterBackoffFactory_1 = __importDefault(require(\"./backoff/FullJitterBackoffFactory\"));\nexports.FullJitterBackoffFactory = FullJitterBackoffFactory_1.default;\nconst FullJitterLimitedBackoff_1 = __importDefault(require(\"./backoff/FullJitterLimitedBackoff\"));\nexports.FullJitterLimitedBackoff = FullJitterLimitedBackoff_1.default;\nconst GetUserMediaError_1 = __importDefault(require(\"./devicecontroller/GetUserMediaError\"));\nexports.GetUserMediaError = GetUserMediaError_1.default;\nconst GlobalMetricReport_1 = __importDefault(require(\"./clientmetricreport/GlobalMetricReport\"));\nexports.GlobalMetricReport = GlobalMetricReport_1.default;\nconst InMemoryJSONEventBuffer_1 = __importDefault(require(\"./eventbuffer/InMemoryJSONEventBuffer\"));\nexports.InMemoryJSONEventBuffer = InMemoryJSONEventBuffer_1.default;\nconst IntervalScheduler_1 = __importDefault(require(\"./scheduler/IntervalScheduler\"));\nexports.IntervalScheduler = IntervalScheduler_1.default;\nconst JoinAndReceiveIndexTask_1 = __importDefault(require(\"./task/JoinAndReceiveIndexTask\"));\nexports.JoinAndReceiveIndexTask = JoinAndReceiveIndexTask_1.default;\nconst LeaveAndReceiveLeaveAckTask_1 = __importDefault(require(\"./task/LeaveAndReceiveLeaveAckTask\"));\nexports.LeaveAndReceiveLeaveAckTask = LeaveAndReceiveLeaveAckTask_1.default;\nconst ListenForVolumeIndicatorsTask_1 = __importDefault(require(\"./task/ListenForVolumeIndicatorsTask\"));\nexports.ListenForVolumeIndicatorsTask = ListenForVolumeIndicatorsTask_1.default;\nconst Log_1 = __importDefault(require(\"./logger/Log\"));\nexports.Log = Log_1.default;\nconst LogLevel_1 = __importDefault(require(\"./logger/LogLevel\"));\nexports.LogLevel = LogLevel_1.default;\nconst MediaDeviceProxyHandler_1 = __importDefault(require(\"./mediadevicefactory/MediaDeviceProxyHandler\"));\nexports.MediaDeviceProxyHandler = MediaDeviceProxyHandler_1.default;\nconst MeetingEventsClientConfiguration_1 = __importDefault(require(\"./eventsclientconfiguration/MeetingEventsClientConfiguration\"));\nexports.MeetingEventsClientConfiguration = MeetingEventsClientConfiguration_1.default;\nconst MeetingFeatures_1 = __importDefault(require(\"./meetingsession/MeetingFeatures\"));\nexports.MeetingFeatures = MeetingFeatures_1.default;\nconst MeetingReadinessCheckerConfiguration_1 = __importDefault(require(\"./meetingreadinesschecker/MeetingReadinessCheckerConfiguration\"));\nexports.MeetingReadinessCheckerConfiguration = MeetingReadinessCheckerConfiguration_1.default;\nconst MeetingSessionConfiguration_1 = __importDefault(require(\"./meetingsession/MeetingSessionConfiguration\"));\nexports.MeetingSessionConfiguration = MeetingSessionConfiguration_1.default;\nconst MeetingSessionCredentials_1 = __importDefault(require(\"./meetingsession/MeetingSessionCredentials\"));\nexports.MeetingSessionCredentials = MeetingSessionCredentials_1.default;\nconst MeetingSessionLifecycleEvent_1 = __importDefault(require(\"./meetingsession/MeetingSessionLifecycleEvent\"));\nexports.MeetingSessionLifecycleEvent = MeetingSessionLifecycleEvent_1.default;\nconst MeetingSessionLifecycleEventCondition_1 = __importDefault(require(\"./meetingsession/MeetingSessionLifecycleEventCondition\"));\nexports.MeetingSessionLifecycleEventCondition = MeetingSessionLifecycleEventCondition_1.default;\nconst MeetingSessionStatus_1 = __importDefault(require(\"./meetingsession/MeetingSessionStatus\"));\nexports.MeetingSessionStatus = MeetingSessionStatus_1.default;\nconst MeetingSessionStatusCode_1 = __importDefault(require(\"./meetingsession/MeetingSessionStatusCode\"));\nexports.MeetingSessionStatusCode = MeetingSessionStatusCode_1.default;\nconst MeetingSessionTURNCredentials_1 = __importDefault(require(\"./meetingsession/MeetingSessionTURNCredentials\"));\nexports.MeetingSessionTURNCredentials = MeetingSessionTURNCredentials_1.default;\nconst MeetingSessionURLs_1 = __importDefault(require(\"./meetingsession/MeetingSessionURLs\"));\nexports.MeetingSessionURLs = MeetingSessionURLs_1.default;\nconst MeetingSessionVideoAvailability_1 = __importDefault(require(\"./meetingsession/MeetingSessionVideoAvailability\"));\nexports.MeetingSessionVideoAvailability = MeetingSessionVideoAvailability_1.default;\nconst Message_1 = __importDefault(require(\"./message/Message\"));\nexports.Message = Message_1.default;\nconst MessagingSessionConfiguration_1 = __importDefault(require(\"./messagingsession/MessagingSessionConfiguration\"));\nexports.MessagingSessionConfiguration = MessagingSessionConfiguration_1.default;\nconst ModelSpecBuilder_1 = __importDefault(require(\"./backgroundblurprocessor/ModelSpecBuilder\"));\nexports.ModelSpecBuilder = ModelSpecBuilder_1.default;\nconst MonitorTask_1 = __importDefault(require(\"./task/MonitorTask\"));\nexports.MonitorTask = MonitorTask_1.default;\nconst MultiLogger_1 = __importDefault(require(\"./logger/MultiLogger\"));\nexports.MultiLogger = MultiLogger_1.default;\nconst NScaleVideoUplinkBandwidthPolicy_1 = __importDefault(require(\"./videouplinkbandwidthpolicy/NScaleVideoUplinkBandwidthPolicy\"));\nexports.NScaleVideoUplinkBandwidthPolicy = NScaleVideoUplinkBandwidthPolicy_1.default;\nconst NoOpAudioVideoController_1 = __importDefault(require(\"./audiovideocontroller/NoOpAudioVideoController\"));\nexports.NoOpAudioVideoController = NoOpAudioVideoController_1.default;\nconst NoOpDebugLogger_1 = __importDefault(require(\"./logger/NoOpDebugLogger\"));\nexports.NoOpDebugLogger = NoOpDebugLogger_1.default;\nconst NoOpDeviceController_1 = __importDefault(require(\"./devicecontroller/NoOpDeviceController\"));\nexports.NoOpDeviceController = NoOpDeviceController_1.default;\nconst NoOpEventReporter_1 = __importDefault(require(\"./eventreporter/NoOpEventReporter\"));\nexports.NoOpEventReporter = NoOpEventReporter_1.default;\nconst NoOpLogger_1 = __importDefault(require(\"./logger/NoOpLogger\"));\nexports.NoOpLogger = NoOpLogger_1.default;\nconst NoOpMediaStreamBroker_1 = __importDefault(require(\"./mediastreambroker/NoOpMediaStreamBroker\"));\nexports.NoOpMediaStreamBroker = NoOpMediaStreamBroker_1.default;\nconst NoOpTask_1 = __importDefault(require(\"./task/NoOpTask\"));\nexports.NoOpTask = NoOpTask_1.default;\nconst NoOpVideoElementFactory_1 = __importDefault(require(\"./videoelementfactory/NoOpVideoElementFactory\"));\nexports.NoOpVideoElementFactory = NoOpVideoElementFactory_1.default;\nconst NoOpVideoFrameProcessor_1 = __importDefault(require(\"./videoframeprocessor/NoOpVideoFrameProcessor\"));\nexports.NoOpVideoFrameProcessor = NoOpVideoFrameProcessor_1.default;\nconst NoVideoDownlinkBandwidthPolicy_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/NoVideoDownlinkBandwidthPolicy\"));\nexports.NoVideoDownlinkBandwidthPolicy = NoVideoDownlinkBandwidthPolicy_1.default;\nconst NoVideoUplinkBandwidthPolicy_1 = __importDefault(require(\"./videouplinkbandwidthpolicy/NoVideoUplinkBandwidthPolicy\"));\nexports.NoVideoUplinkBandwidthPolicy = NoVideoUplinkBandwidthPolicy_1.default;\nconst NotFoundError_1 = __importDefault(require(\"./devicecontroller/NotFoundError\"));\nexports.NotFoundError = NotFoundError_1.default;\nconst NotReadableError_1 = __importDefault(require(\"./devicecontroller/NotReadableError\"));\nexports.NotReadableError = NotReadableError_1.default;\nconst OnceTask_1 = __importDefault(require(\"./task/OnceTask\"));\nexports.OnceTask = OnceTask_1.default;\nconst OpenSignalingConnectionTask_1 = __importDefault(require(\"./task/OpenSignalingConnectionTask\"));\nexports.OpenSignalingConnectionTask = OpenSignalingConnectionTask_1.default;\nconst OverconstrainedError_1 = __importDefault(require(\"./devicecontroller/OverconstrainedError\"));\nexports.OverconstrainedError = OverconstrainedError_1.default;\nconst POSTLogger_1 = __importDefault(require(\"./logger/POSTLogger\"));\nexports.POSTLogger = POSTLogger_1.default;\nconst ParallelGroupTask_1 = __importDefault(require(\"./task/ParallelGroupTask\"));\nexports.ParallelGroupTask = ParallelGroupTask_1.default;\nconst PermissionDeniedError_1 = __importDefault(require(\"./devicecontroller/PermissionDeniedError\"));\nexports.PermissionDeniedError = PermissionDeniedError_1.default;\nconst PrefetchOn_1 = __importDefault(require(\"./messagingsession/PrefetchOn\"));\nexports.PrefetchOn = PrefetchOn_1.default;\nconst PrefetchSortBy_1 = __importDefault(require(\"./messagingsession/PrefetchSortBy\"));\nexports.PrefetchSortBy = PrefetchSortBy_1.default;\nconst PromiseQueue_1 = __importDefault(require(\"./utils/PromiseQueue\"));\nexports.PromiseQueue = PromiseQueue_1.default;\nconst PromoteToPrimaryMeetingTask_1 = __importDefault(require(\"./task/PromoteToPrimaryMeetingTask\"));\nexports.PromoteToPrimaryMeetingTask = PromoteToPrimaryMeetingTask_1.default;\nconst RealtimeAttendeePositionInFrame_1 = __importDefault(require(\"./realtimecontroller/RealtimeAttendeePositionInFrame\"));\nexports.RealtimeAttendeePositionInFrame = RealtimeAttendeePositionInFrame_1.default;\nconst RealtimeState_1 = __importDefault(require(\"./realtimecontroller/RealtimeState\"));\nexports.RealtimeState = RealtimeState_1.default;\nconst RealtimeVolumeIndicator_1 = __importDefault(require(\"./realtimecontroller/RealtimeVolumeIndicator\"));\nexports.RealtimeVolumeIndicator = RealtimeVolumeIndicator_1.default;\nconst ReceiveAudioInputTask_1 = __importDefault(require(\"./task/ReceiveAudioInputTask\"));\nexports.ReceiveAudioInputTask = ReceiveAudioInputTask_1.default;\nconst ReceiveRemoteVideoPauseResumeTask_1 = __importDefault(require(\"./task/ReceiveRemoteVideoPauseResumeTask\"));\nexports.ReceiveRemoteVideoPauseResumeTask = ReceiveRemoteVideoPauseResumeTask_1.default;\nconst ReceiveVideoInputTask_1 = __importDefault(require(\"./task/ReceiveVideoInputTask\"));\nexports.ReceiveVideoInputTask = ReceiveVideoInputTask_1.default;\nconst ReceiveVideoStreamIndexTask_1 = __importDefault(require(\"./task/ReceiveVideoStreamIndexTask\"));\nexports.ReceiveVideoStreamIndexTask = ReceiveVideoStreamIndexTask_1.default;\nconst ReconnectionHealthPolicy_1 = __importDefault(require(\"./connectionhealthpolicy/ReconnectionHealthPolicy\"));\nexports.ReconnectionHealthPolicy = ReconnectionHealthPolicy_1.default;\nconst RedundantAudioEncoder_1 = __importDefault(require(\"./redundantaudioencoder/RedundantAudioEncoder\"));\nexports.RedundantAudioEncoder = RedundantAudioEncoder_1.default;\nconst RedundantAudioEncoderWorkerCode_1 = __importDefault(require(\"./redundantaudioencoderworkercode/RedundantAudioEncoderWorkerCode\"));\nexports.RedundantAudioEncoderWorkerCode = RedundantAudioEncoderWorkerCode_1.default;\nconst RedundantAudioRecoveryMetricReport_1 = __importDefault(require(\"./clientmetricreport/RedundantAudioRecoveryMetricReport\"));\nexports.RedundantAudioRecoveryMetricReport = RedundantAudioRecoveryMetricReport_1.default;\nconst RunnableTask_1 = __importDefault(require(\"./task/RunnableTask\"));\nexports.RunnableTask = RunnableTask_1.default;\nconst SDP_1 = __importDefault(require(\"./sdp/SDP\"));\nexports.SDP = SDP_1.default;\nconst SDPCandidateType_1 = __importDefault(require(\"./sdp/SDPCandidateType\"));\nexports.SDPCandidateType = SDPCandidateType_1.default;\nconst SDPMediaSection_1 = __importDefault(require(\"./sdp/SDPMediaSection\"));\nexports.SDPMediaSection = SDPMediaSection_1.default;\nconst SendAndReceiveDataMessagesTask_1 = __importDefault(require(\"./task/SendAndReceiveDataMessagesTask\"));\nexports.SendAndReceiveDataMessagesTask = SendAndReceiveDataMessagesTask_1.default;\nconst SendingAudioFailureConnectionHealthPolicy_1 = __importDefault(require(\"./connectionhealthpolicy/SendingAudioFailureConnectionHealthPolicy\"));\nexports.SendingAudioFailureConnectionHealthPolicy = SendingAudioFailureConnectionHealthPolicy_1.default;\nconst SerialGroupTask_1 = __importDefault(require(\"./task/SerialGroupTask\"));\nexports.SerialGroupTask = SerialGroupTask_1.default;\nconst ServerSideNetworkAdaption_1 = __importDefault(require(\"./signalingclient/ServerSideNetworkAdaption\"));\nexports.ServerSideNetworkAdaption = ServerSideNetworkAdaption_1.default;\nconst SessionStateControllerAction_1 = __importDefault(require(\"./sessionstatecontroller/SessionStateControllerAction\"));\nexports.SessionStateControllerAction = SessionStateControllerAction_1.default;\nconst SessionStateControllerDeferPriority_1 = __importDefault(require(\"./sessionstatecontroller/SessionStateControllerDeferPriority\"));\nexports.SessionStateControllerDeferPriority = SessionStateControllerDeferPriority_1.default;\nconst SessionStateControllerState_1 = __importDefault(require(\"./sessionstatecontroller/SessionStateControllerState\"));\nexports.SessionStateControllerState = SessionStateControllerState_1.default;\nconst SessionStateControllerTransitionResult_1 = __importDefault(require(\"./sessionstatecontroller/SessionStateControllerTransitionResult\"));\nexports.SessionStateControllerTransitionResult = SessionStateControllerTransitionResult_1.default;\nconst SetLocalDescriptionTask_1 = __importDefault(require(\"./task/SetLocalDescriptionTask\"));\nexports.SetLocalDescriptionTask = SetLocalDescriptionTask_1.default;\nconst SetRemoteDescriptionTask_1 = __importDefault(require(\"./task/SetRemoteDescriptionTask\"));\nexports.SetRemoteDescriptionTask = SetRemoteDescriptionTask_1.default;\nconst SignalingAndMetricsConnectionMonitor_1 = __importDefault(require(\"./connectionmonitor/SignalingAndMetricsConnectionMonitor\"));\nexports.SignalingAndMetricsConnectionMonitor = SignalingAndMetricsConnectionMonitor_1.default;\nconst SignalingClientConnectionRequest_1 = __importDefault(require(\"./signalingclient/SignalingClientConnectionRequest\"));\nexports.SignalingClientConnectionRequest = SignalingClientConnectionRequest_1.default;\nconst SignalingClientEvent_1 = __importDefault(require(\"./signalingclient/SignalingClientEvent\"));\nexports.SignalingClientEvent = SignalingClientEvent_1.default;\nconst SignalingClientEventType_1 = __importDefault(require(\"./signalingclient/SignalingClientEventType\"));\nexports.SignalingClientEventType = SignalingClientEventType_1.default;\nconst SignalingClientJoin_1 = __importDefault(require(\"./signalingclient/SignalingClientJoin\"));\nexports.SignalingClientJoin = SignalingClientJoin_1.default;\nconst SignalingClientSubscribe_1 = __importDefault(require(\"./signalingclient/SignalingClientSubscribe\"));\nexports.SignalingClientSubscribe = SignalingClientSubscribe_1.default;\nconst SignalingClientVideoSubscriptionConfiguration_1 = __importDefault(require(\"./signalingclient/SignalingClientVideoSubscriptionConfiguration\"));\nexports.SignalingClientVideoSubscriptionConfiguration = SignalingClientVideoSubscriptionConfiguration_1.default;\nconst SimulcastContentShareTransceiverController_1 = __importDefault(require(\"./transceivercontroller/SimulcastContentShareTransceiverController\"));\nexports.SimulcastContentShareTransceiverController = SimulcastContentShareTransceiverController_1.default;\nconst SimulcastLayers_1 = __importDefault(require(\"./simulcastlayers/SimulcastLayers\"));\nexports.SimulcastLayers = SimulcastLayers_1.default;\nconst SimulcastTransceiverController_1 = __importDefault(require(\"./transceivercontroller/SimulcastTransceiverController\"));\nexports.SimulcastTransceiverController = SimulcastTransceiverController_1.default;\nconst SimulcastVideoStreamIndex_1 = __importDefault(require(\"./videostreamindex/SimulcastVideoStreamIndex\"));\nexports.SimulcastVideoStreamIndex = SimulcastVideoStreamIndex_1.default;\nconst SingleNodeAudioTransformDevice_1 = __importDefault(require(\"./devicecontroller/SingleNodeAudioTransformDevice\"));\nexports.SingleNodeAudioTransformDevice = SingleNodeAudioTransformDevice_1.default;\nconst StreamMetricReport_1 = __importDefault(require(\"./clientmetricreport/StreamMetricReport\"));\nexports.StreamMetricReport = StreamMetricReport_1.default;\nconst SubscribeAndReceiveSubscribeAckTask_1 = __importDefault(require(\"./task/SubscribeAndReceiveSubscribeAckTask\"));\nexports.SubscribeAndReceiveSubscribeAckTask = SubscribeAndReceiveSubscribeAckTask_1.default;\nconst TargetDisplaySize_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/TargetDisplaySize\"));\nexports.TargetDisplaySize = TargetDisplaySize_1.default;\nconst TaskStatus_1 = __importDefault(require(\"./task/TaskStatus\"));\nexports.TaskStatus = TaskStatus_1.default;\nconst TimeoutScheduler_1 = __importDefault(require(\"./scheduler/TimeoutScheduler\"));\nexports.TimeoutScheduler = TimeoutScheduler_1.default;\nconst TimeoutTask_1 = __importDefault(require(\"./task/TimeoutTask\"));\nexports.TimeoutTask = TimeoutTask_1.default;\nconst Transcript_1 = __importDefault(require(\"./transcript/Transcript\"));\nexports.Transcript = Transcript_1.default;\nconst TranscriptAlternative_1 = __importDefault(require(\"./transcript/TranscriptAlternative\"));\nexports.TranscriptAlternative = TranscriptAlternative_1.default;\nconst TranscriptEntity_1 = __importDefault(require(\"./transcript/TranscriptEntity\"));\nexports.TranscriptEntity = TranscriptEntity_1.default;\nconst TranscriptItem_1 = __importDefault(require(\"./transcript/TranscriptItem\"));\nexports.TranscriptItem = TranscriptItem_1.default;\nconst TranscriptItemType_1 = __importDefault(require(\"./transcript/TranscriptItemType\"));\nexports.TranscriptItemType = TranscriptItemType_1.default;\nconst TranscriptLanguageWithScore_1 = __importDefault(require(\"./transcript/TranscriptLanguageWithScore\"));\nexports.TranscriptLanguageWithScore = TranscriptLanguageWithScore_1.default;\nconst TranscriptResult_1 = __importDefault(require(\"./transcript/TranscriptResult\"));\nexports.TranscriptResult = TranscriptResult_1.default;\nconst TranscriptionStatus_1 = __importDefault(require(\"./transcript/TranscriptionStatus\"));\nexports.TranscriptionStatus = TranscriptionStatus_1.default;\nconst TranscriptionStatusType_1 = __importDefault(require(\"./transcript/TranscriptionStatusType\"));\nexports.TranscriptionStatusType = TranscriptionStatusType_1.default;\nconst TypeError_1 = __importDefault(require(\"./devicecontroller/TypeError\"));\nexports.TypeError = TypeError_1.default;\nconst UnusableAudioWarningConnectionHealthPolicy_1 = __importDefault(require(\"./connectionhealthpolicy/UnusableAudioWarningConnectionHealthPolicy\"));\nexports.UnusableAudioWarningConnectionHealthPolicy = UnusableAudioWarningConnectionHealthPolicy_1.default;\nconst Versioning_1 = __importDefault(require(\"./versioning/Versioning\"));\nexports.Versioning = Versioning_1.default;\nconst VideoAdaptiveProbePolicy_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoAdaptiveProbePolicy\"));\nexports.VideoAdaptiveProbePolicy = VideoAdaptiveProbePolicy_1.default;\nconst VideoCodecCapability_1 = __importDefault(require(\"./sdp/VideoCodecCapability\"));\nexports.VideoCodecCapability = VideoCodecCapability_1.default;\nconst VideoFxProcessor_1 = __importDefault(require(\"./videofx/VideoFxProcessor\"));\nexports.VideoFxProcessor = VideoFxProcessor_1.default;\nconst VideoLogEvent_1 = __importDefault(require(\"./statscollector/VideoLogEvent\"));\nexports.VideoLogEvent = VideoLogEvent_1.default;\nconst VideoOnlyTransceiverController_1 = __importDefault(require(\"./transceivercontroller/VideoOnlyTransceiverController\"));\nexports.VideoOnlyTransceiverController = VideoOnlyTransceiverController_1.default;\nconst VideoPreference_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoPreference\"));\nexports.VideoPreference = VideoPreference_1.default;\nconst VideoPreferences_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoPreferences\"));\nexports.VideoPreferences = VideoPreferences_1.default;\nconst VideoPriorityBasedPolicy_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoPriorityBasedPolicy\"));\nexports.VideoPriorityBasedPolicy = VideoPriorityBasedPolicy_1.default;\nconst VideoPriorityBasedPolicyConfig_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoPriorityBasedPolicyConfig\"));\nexports.VideoPriorityBasedPolicyConfig = VideoPriorityBasedPolicyConfig_1.default;\nconst VideoQualityAdaptationPreference_1 = __importDefault(require(\"./videodownlinkbandwidthpolicy/VideoQualityAdaptationPreference\"));\nexports.VideoQualityAdaptationPreference = VideoQualityAdaptationPreference_1.default;\nconst VideoQualitySettings_1 = __importDefault(require(\"./devicecontroller/VideoQualitySettings\"));\nexports.VideoQualitySettings = VideoQualitySettings_1.default;\nconst VideoSource_1 = __importDefault(require(\"./videosource/VideoSource\"));\nexports.VideoSource = VideoSource_1.default;\nconst VideoStreamDescription_1 = __importDefault(require(\"./videostreamindex/VideoStreamDescription\"));\nexports.VideoStreamDescription = VideoStreamDescription_1.default;\nconst VideoTileState_1 = __importDefault(require(\"./videotile/VideoTileState\"));\nexports.VideoTileState = VideoTileState_1.default;\nconst VoiceFocusDeviceTransformer_1 = __importDefault(require(\"./voicefocus/VoiceFocusDeviceTransformer\"));\nexports.VoiceFocusDeviceTransformer = VoiceFocusDeviceTransformer_1.default;\nconst VoiceFocusTransformDevice_1 = __importDefault(require(\"./voicefocus/VoiceFocusTransformDevice\"));\nexports.VoiceFocusTransformDevice = VoiceFocusTransformDevice_1.default;\nconst WaitForAttendeePresenceTask_1 = __importDefault(require(\"./task/WaitForAttendeePresenceTask\"));\nexports.WaitForAttendeePresenceTask = WaitForAttendeePresenceTask_1.default;\nconst WebSocketReadyState_1 = __importDefault(require(\"./websocketadapter/WebSocketReadyState\"));\nexports.WebSocketReadyState = WebSocketReadyState_1.default;\nconst ZLIBTextCompressor_1 = __importDefault(require(\"./sdp/ZLIBTextCompressor\"));\nexports.ZLIBTextCompressor = ZLIBTextCompressor_1.default;\nconst VideoPreferences_2 = require(\"./videodownlinkbandwidthpolicy/VideoPreferences\");\nObject.defineProperty(exports, \"MutableVideoPreferences\", { enumerable: true, get: function () { return VideoPreferences_2.MutableVideoPreferences; } });\nconst Types_1 = require(\"./utils/Types\");\nObject.defineProperty(exports, \"Some\", { enumerable: true, get: function () { return Types_1.Some; } });\nObject.defineProperty(exports, \"None\", { enumerable: true, get: function () { return Types_1.None; } });\nObject.defineProperty(exports, \"Maybe\", { enumerable: true, get: function () { return Types_1.Maybe; } });\nconst AudioTransformDevice_1 = require(\"./devicecontroller/AudioTransformDevice\");\nObject.defineProperty(exports, \"isAudioTransformDevice\", { enumerable: true, get: function () { return AudioTransformDevice_1.isAudioTransformDevice; } });\nconst Destroyable_1 = require(\"./destroyable/Destroyable\");\nObject.defineProperty(exports, \"isDestroyable\", { enumerable: true, get: function () { return Destroyable_1.isDestroyable; } });\nconst VideoTransformDevice_1 = require(\"./devicecontroller/VideoTransformDevice\");\nObject.defineProperty(exports, \"isVideoTransformDevice\", { enumerable: true, get: function () { return VideoTransformDevice_1.isVideoTransformDevice; } });\n//# sourceMappingURL=index.js.map"],"names":["Object","defineProperty","DefaultVideoStreamIdSet_1","value","DefaultVideoStreamIdSet","constructor","ids","this","Set","add","streamId","array","Array","from","values","sort","a","b","contain","has","forEach","callbackFn","empty","size","equal","other","x","y","length","i","clone","remove","delete","toJSON","truncate","splice","DefaultVideoStreamIdSet$1","default","__importDefault","mod","__esModule","AllHighestVideoBandwidthPolicy_1","require$$0","AllHighestVideoBandwidthPolicy","selfAttendeeId","reset","optimalReceiveSet","subscribedReceiveSet","videoSources","undefined","updateIndex","videoIndex","calculateOptimalReceiveSet","updateMetrics","_clientMetricReport","wantsResubscribe","chooseSubscriptions","chooseRemoteVideoSources","streamSelectionSet","allStreams","receiveSet","highestQualityStreamFromEachGroupExcludingSelf","allVideoSendingSourcesExcludingSelf","remoteInfos","remoteStreamDescriptions","mapOfAttendeeIdToRemoteDescriptions","Map","info","set","attendeeId","totalBitrateKbps","videoSource","attendee","get","maxBitrateKbps","maxReceiveBitrateKbps","console","warn","AllHighestVideoBandwidthPolicy$1","ApplicationMetadata_1","ApplicationMetadata","appName","appVersion","static","APP_NAME_REGEX","Error","test","ApplicationMetadata$1","TimeoutScheduler_1","TimeoutScheduler","timeoutMs","timer","start","callback","stop","setTimeout","clearTimeout","TimeoutScheduler$1","AsyncScheduler_1","AsyncScheduler","super","AsyncScheduler$1","VideoLogEvent","exports","LogLevel","OnceTask_1","LogLevel_1","require$$1","OnceTask","logger","task","dependencies","canceled","name","cancel","dep","nextTick","cancelPromise","logDependencies","getLogLevel","INFO","names","filter","d","map","join","run","promise","Promise","all","resolve","ongoing","then","reject","catch","setParent","parentTask","OnceTask$1","TaskStatus","TaskStatus_1","TaskStatus$1","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","e","rejected","result","done","apply","BaseTask_1","BaseTask","taskName","status","IDLE","baseRun","bind","baseCancel","once","getStatus","logAndThrow","message","originalRun","startTime","Date","now","RUNNING","CANCELED","FINISHED","call","Math","round","err","originalCancel","BaseTask$1","AttachMediaInputTask_1","VideoLogEvent_1","AttachMediaInputTask","context","transceiverController","setPeer","peer","setupLocalTransceivers","audioInput","activeAudioInput","audioTracks","getAudioTracks","setAudioInput","setAudioCodecPreferences","videoInput","activeVideoInput","videoTracks","getVideoTracks","videoTrack","setVideoInput","enableSimulcast","videoUplinkBandwidthPolicy","encodingParam","chooseEncodingParameters","setEncodingParameters","statsCollector","logVideoEvent","InputAttached","videoDeviceInformation","videoSubscriptions","updateVideoTransceivers","videoStreamIndex","videosToReceive","supportsSetCodecPreferences","window","RTCRtpTransceiver","prototype","enableAudioRedundancy","audioProfile","hasRedundancyEnabled","audioTransceiver","localAudioTransceiver","codecs","RTCRtpSender","getCapabilities","debug","JSON","stringify","redCodecIndex","findIndex","c","mimeType","redCodec","unshift","setCodecPreferences","error","AttachMediaInputTask$1","Attendee_1","Attendee","Attendee$1","AudioLogEvent","__spreadArray","to","pack","arguments","ar","l","slice","concat","BrowserInfo","version","os","type","NodeInfo","process","platform","SearchBotDeviceInfo","bot","BotInfo","ReactNativeInfo","SEARCHBOX_UA_REGEX","SEARCHBOT_OS_REGEX","REQUIRED_VERSION_PARTS","userAgentRules","operatingSystemRules","detect","userAgent","parseUserAgent","document","navigator","product","getNodeVersion","matchUserAgent","ua","reduce","matched","_a","browser","regex","uaMatch","exec","browserName","data","matchedRule","match","versionParts","split","createVersionParts","detectOS","searchBotMatch","ii","count","output","push","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","BROWSER","CHROME","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SHARP","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","arr","enums","toUpperCase","str1","str2","lowerize","indexOf","str","toLowerCase","trim","len","replace","substring","rgxMapper","arrays","j","k","p","q","matches","props","strMapper","windowsVersionMap","ME","XP","Vista","RT","regexes","cpu","device","engine","EDGE","UAParser","extensions","getResult","_ua","_rgxmap","mergedRegexes","extend","getBrowser","_browser","major","majorize","getCPU","_cpu","getDevice","_device","getEngine","_engine","getOS","_os","getUA","setUA","CPU","DEVICE","ENGINE","OS","module","$","jQuery","Zepto","parser","prop","DefaultBrowserBehavior_1","detect_browser_1","ua_parser_js_1","DefaultBrowserBehavior","FALLBACK_BROWSER","uaParserResult","browserSupport","chrome","electron","firefox","ios","safari","opera","samsung","crios","fxios","chromeLike","webkitBrowsers","majorVersion","parseInt","osMajorVersion","engineMajorVersion","hasChromiumWebRTC","hasWebKitWebRTC","hasFirefoxWebRTC","isFirefox","requiresPlaybackLatencyHintForAudioContext","supportsCanvasCapturedStreamPlayback","isIOSSafari","isIOSChrome","isIOSFirefox","isIOSEdge","MIN_IOS_SUPPORT_CANVAS_STREAM_PLAYBACK","MIN_IOS_NON_SAFARI_SUPPORT_CANVAS_STREAM_PLAYBACK","supportsBackgroundFilter","supportsVideoLayersAllocationRtpHeaderExtension","supportsDependencyDescriptorRtpHeaderExtension","supportsScalableVideoCoding","supportsAudioRedundancy","requiresResolutionAlignment","width","height","isAndroid","isPixel3","ceil","requiresCheckForSdpConnectionAttributes","requiresIceCandidateGatheringTimeoutWorkaround","requiresBundlePolicy","requiresNoExactMediaStreamConstraints","isSamsungInternet","requiresGroupIdMediaStreamConstraints","getDisplayMediaAudioCaptureSupport","isChrome","isEdge","doesNotSupportMediaDeviceLabels","isSupported","isSimulcastSupported","supportDownlinkBandwidthEstimation","supportString","s","supportedVideoCodecs","pc","RTCPeerConnection","addTransceiver","direction","streams","createOffer","offerToReceiveVideo","sdp","includes","v","supportsSetSinkId","HTMLAudioElement","disableResolutionScaleDown","disable480pResolutionScaleDown","startsWith","requiresDisablingH264Encoding","requiresVideoPlayWorkaround","isSafari","isVideoFxSupportedBrowser","maxTouchPoints","DefaultBrowserBehavior$1","AudioProfile_1","AudioProfile","audioBitrateBps","isStereo","AudioProfile$1","DEFAULT_VIDEO_SUBSCRIPTION_LIMIT","browserBehavior","meetingSessionConfiguration","signalingClient","previousSdpOffer","sdpOfferInit","audioVideoController","realtimeController","videoTileController","mediaStreamBroker","audioMixController","indexFrame","iceCandidates","iceCandidateHandler","iceGatheringStateEventHandler","sdpAnswer","turnCredentials","reconnectController","removableObservers","videoDownlinkBandwidthPolicy","lastKnownVideoAvailability","videoCaptureAndEncodeParameter","lastVideosToReceive","lastVideoSubscriptionConfiguration","videoSubscriptionLimit","previousSdpAnswerAsString","serverSupportsCompression","videoSendCodecPreferences","currentVideoSendCodec","meetingSupportedVideoSendCodecPreferences","prioritizedSendVideoCodecCapabilities","videosPaused","videoDuplexMode","volumeIndicatorAdapter","connectionMonitor","videoInputAttachedTimestampMs","audioDeviceInformation","enableSVC","eventController","signalingOpenDurationMs","iceGatheringDurationMs","startAudioVideoTimestamp","attendeePresenceDurationMs","meetingStartDurationMs","poorConnectionCount","maxVideoTileCount","startTimeMs","resetConnectionSpecificState","close","BackgroundBlurStrength","BlurStrengthMapper","BlurStrength","LOW","MEDIUM","HIGH","bstrength","options","BLUR_STRENGTH_DIVISOR","fetchWithBehavior","url","init","fetchBehavior","fetch","withQuery","withQueryString","withHeaders","withRequestHeaders","headers","assign","escapedQueryString","hasQuery","lastIndexOf","addQueryParams","queryParams","keys","params","URLSearchParams","key","append","toString","fetch_1","isValidRevisionID","isValidAssetGroup","resolveURL","fetch$1","HEAD_OPTIONS","method","mode","credentials","redirect","referrerPolicy","response","redirected","assetGroup","revisionID","loader","loadWorker","fetch_js_1","WORKER_FETCH_OPTIONS","workerURL","workerURLIsSameOrigin","self","origin","URL","workerURLWithQuery","Worker","res","ok","blob","createObjectURL","isOldChrome","supportsWASMStreaming","supportsSharedArrayBuffer","supportsWASM","supportsAudioWorklet","supportsWorker","supportsWASMPostMessage","loader_js_1","global","globalThis","hasSafari","hasChrome","chromeVersion","supportsVoiceFocusWorker","scope","fetchConfig","paths","workers","worker","terminate","AudioWorklet","AudioWorkletNode","WebAssembly","compile","compileStreaming","SharedArrayBuffer","crossOriginIsolated","versionCheck","ModelSpecBuilder_1","ModelSpecBuilder","path","input","withDefaultModel","withSelfieSegmentationDefaults","range","channels","withPath","withInput","withOutput","validate","build","ModelSpecBuilder$1","version$2","hash","raw","semverString","Versioning_1","version_1","Versioning","sdkName","sdkVersion","sdkVersionSemVer","_b","_c","_d","groups","minor","patch","preRelease","buildSHA","substr","sdkUserAgentLowResolution","urlWithVersion","searchParams","X_AMZN_VERSION","X_AMZN_USER_AGENT","Versioning$1","BackgroundFilterVideoFrameProcessor_1","loader_1","support_1","require$$2","require$$3","require$$4","CREATE_DEFAULT_MODEL_SPEC","builder","DEFAULT_CDN","DEFAULT_PATHS","wasm","simd","BackgroundFilterVideoFrameProcessor","u","spec","model","defaultAssetSpec","sdk","encodeURIComponent","createUrlWithParams","reportingPeriodMillis","filterCPUUtilization","BackgroundFilterVideoFrameProcessor$1","ConsoleLogger_1","ConsoleLogger","level","WARN","msg","log","ERROR","debugFunction","DEBUG","setLogLevel","logMessage","toISOString","ConsoleLogger$1","NoOpVideoFrameProcessor_1","NoOpVideoFrameProcessor","buffers","destroy","NoOpVideoFrameProcessor$1","CanvasVideoFrameBuffer_1","CanvasVideoFrameBuffer","canvas","destroyed","asCanvasImageSource","asCanvasElement","CanvasVideoFrameBuffer$1","BackgroundFilterFrameCounter_1","FILTER_DURATION_FACTOR","BackgroundFilterFrameCounter","delegate","_processingFilter","lastReportedEventTimestamp","lastFilterCompleteTimestamp","filterTotalMillis","filterCount","framerate","filterDurationNotifyMillis","setSegmentationDuration","reportEvent","timestamp","timeDiff","currentFilterCount","currentFilterTotalMillis","avgFilterDurationMillis","framesDropped","cpuUtilization","filterFrameDurationHigh","periodMillis","filterCPUUtilizationHigh","filterMillis","frameReceived","filterSubmitted","filterComplete","processingSegment","BackgroundFilterFrameCounter$1","BackgroundFilterProcessor_1","BackgroundFilterMonitor","DeferredObservable","whenNext","BackgroundFilterProcessor","filterType","targetCanvas","createElement","canvasCtx","getContext","canvasVideoFrameBuffer","mask$","sourceWidth","sourceHeight","frameNumber","videoFramesPerFilterUpdate","initWorkerPromise","createWorkerPromise","loadModelPromise","modelInitialized","validateSpec","validateOptions","initCPUMonitor","resolver","frameCounter","cpuMonitor","reduceCPUUtilization","updateVideoFramesPerFilterUpdate","min","increaseCPUUtilization","max","addObserver","handleInitialize","payload","postMessage","modelUrl","inputHeight","inputWidth","inputChannels","modelRangeMin","modelRangeMax","blurPixels","handleLoadModel","handlePredict","handleWorkerEvent","evt","loadAssets","addEventListener","ev","wasmPath","simdPath","inputCanvas","frameWidth","frameHeight","initOnFirstExecution","mask","hscale","vscale","scaledCanvas","scaledCtx","save","scale","drawImage","restore","imageData","getImageData","maskPromise","buffer","drawImageWithMask","newRate","removeObserver","BackgroundFilterProcessor$1","monitoringPeriodMillis","observer","lastCPUChangeTimestamp","BackgroundFilterVideoFrameProcessorDelegate_1","BackgroundFilterVideoFrameProcessorDelegate","observers","event","BackgroundFilterVideoFrameProcessorDelegate$1","BackgroundBlurVideoFrameProcessorDelegate_1","BackgroundBlurVideoFrameProcessorDelegate","BackgroundBlurVideoFrameProcessorDelegate$1","BackgroundBlurProcessorProvided_1","BackgroundBlurStrength_1","BackgroundBlurProcessorProvided","blurAmount","setBlurStrength","blurStrength","setBlurPixels","ImageData","putImageData","clearRect","globalCompositeOperation","_blurStrength","getBlurAmount","supportsBlurFilter","setEventController","publishBackgroundFilterEvent","backgroundFilterEventAttributes","backgroundBlurEnabled","backgroundBlurStrength","backgroundReplacementEnabled","backgroundFilterVersion","publishEvent","BackgroundBlurProcessorProvided$1","BackgroundBlurProcessorBuiltIn_1","BackgroundBlurProcessorBuiltIn","blurCanvas","blurCanvasCtx","blurredImage","blurOutput","_super","create","BackgroundBlurProcessorBuiltIn$1","BackgroundBlurVideoFrameProcessor_1","require$$5","require$$6","NoOpBackgroundBlurProcessor","BackgroundBlurVideoFrameProcessor","resolveSpec","resolveOptions","supported","processor","processorOptions","BackgroundBlurVideoFrameProcessor$1","BackgroundReplacementVideoFrameProcessorDelegate_1","BackgroundReplacementVideoFrameProcessorDelegate","BackgroundReplacementVideoFrameProcessorDelegate$1","BackgroundReplacementFilter_1","BackgroundReplacementFilter","replacementBlob","imageBlob","setImageBlob","replacementImage","loadImage","createReplacementObjectUrl","imageUrl","image","Image","crossOrigin","src","loadImageExecutor","revokeReplacementObjectUrl","replacementObjectUrl","revokeObjectURL","BackgroundReplacementFilter$1","BackgroundReplacementVideoFrameProcessor_1","NoOpBackgroundReplacementProcessor","BackgroundReplacementVideoFrameProcessor","resolveOptionsAsync","ctx","fillStyle","fillRect","toBlob","BackgroundReplacementVideoFrameProcessor$1","BaseConnectionHealthPolicy_1","BaseConnectionHealthPolicy","configuration","minHealth","maxHealth","currentHealth","initialHealth","currentData","minimumHealth","maximumHealth","health","update","connectionHealthData","getConnectionHealthData","healthy","healthIfChanged","newHealth","BaseConnectionHealthPolicy$1","BitrateParameters_1","BitrateParameters","BitrateParameters$1","CSPMonitor_1","CSPMonitor","shouldRegisterCSPMonitor","added","listener","removeEventListener","loggers","unregister","CSPMonitor$1","blockedURI","violatedDirective","originalPolicy","documentURI","sourceFile","lineNumber","CheckAudioConnectivityFeedback","CheckAudioInputFeedback","CheckAudioOutputFeedback","CheckCameraResolutionFeedback","CheckContentShareConnectivityFeedback","CheckNetworkTCPConnectivityFeedback","CheckNetworkUDPConnectivityFeedback","CheckVideoConnectivityFeedback","CheckVideoInputFeedback","CleanRestartedSessionTask_1","CleanRestartedSessionTask","CleanRestartedSessionTask$1","SignalingClientEventType","CleanStoppedSessionTask_1","SignalingClientEventType_1","CleanStoppedSessionTask","taskCanceler","ready","closeConnection","receiveWebSocketClosedEvent","setTransceiverController","bindToTileController","tile","getLocalVideoTile","bindVideoStream","removeAllVideoTiles","interceptor","handleSignalingClientEvent","WebSocketClosed","registerObserver","CleanStoppedSessionTask$1","aspromise","fn","offset","index","pending","base64","string","n","charAt","b64","s64","encode","end","t","parts","chunk","String","fromCharCode","invalidEncoding","decode","charCodeAt","EventEmitter","_listeners","eventemitter","on","off","listeners","emit","args","factory","Float32Array","f32","f8b","Uint8Array","le","writeFloat_f32_cpy","val","buf","pos","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloatLE","writeFloatBE","readFloatLE","readFloatBE","writeFloat_ieee754","writeUint","sign","isNaN","exponent","floor","LN2","pow","readFloat_ieee754","readUint","uint","mantissa","NaN","Infinity","writeUintLE","writeUintBE","readUintLE","readUintBE","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDoubleLE","writeDoubleBE","readDoubleLE","readDoubleBE","writeDouble_ieee754","off0","off1","readDouble_ieee754","lo","hi","float","inquire","moduleName","eval","inquire_1","utf8","read","write","c1","c2","pool_1","alloc","SIZE","MAX","slab","longbits","LongBits","util","zero","toNumber","zzEncode","zzDecode","zeroHash","fromNumber","isString","Long","fromString","low","high","unsigned","toLong","Boolean","fromHash","toHash","part0","part1","part2","merge","dst","ifNotSet","newError","CustomError","properties","captureStackTrace","stack","writable","enumerable","configurable","asPromise","pool","require$$7","isNode","versions","node","emptyArray","freeze","emptyObject","isInteger","Number","isFinite","isObject","isset","isSet","obj","hasOwnProperty","isArray","Buffer","utf8Write","_Buffer_from","_Buffer_allocUnsafe","newBuffer","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","bits","fromBits","lcFirst","ProtocolError","oneOfGetter","fieldNames","fieldMap","oneOfSetter","toJSONOptions","longs","bytes","json","_configure","encoding","allocUnsafe","writer","Writer","BufferWriter","Op","noop","State","head","tail","states","writeByte","writeVarint32","VarintOp","writeVarint64","writeFixed32","subarray","_push","Writer$1","uint32","int32","sint32","uint64","int64","sint64","bool","fixed32","sfixed32","fixed64","sfixed64","double","writeBytes","fork","ldelim","finish","BufferWriter_","writer_buffer","writeStringBuffer","writeBytesBuffer","copy","byteLength","reader","Reader","BufferReader","indexOutOfRange","writeLength","RangeError","create_array","isBuffer","readLongVarint","readFixed32_end","readFixed64","Reader$1","_slice","nativeBuffer","skip","skipType","wireType","BufferReader_","reader_buffer","utf8Slice","service","Service","rpcImpl","requestDelimited","responseDelimited","TypeError","rpcCall","requestCtor","responseCtor","request","endedByRPC","roots","protobuf","configure","rpc","$protobuf","$Reader","$Writer","$util","$root","valuesById","SdkSignalFrame","timestampMs","joinack","sub","suback","pause","leave","leaveAck","bitrates","audioControl","audioMetadata","audioStreamIdInfo","pingPong","audioStatus","clientMetric","dataMessage","remoteVideoUpdate","primaryMeetingJoin","primaryMeetingJoinAck","primaryMeetingLeave","notification","SdkErrorFrame","SdkJoinFrame","SdkJoinAckFrame","SdkSubscribeFrame","SdkSubscribeAckFrame","SdkIndexFrame","SdkPauseResumeFrame","SdkLeaveFrame","SdkLeaveAckFrame","SdkBitrateFrame","SdkAudioControlFrame","SdkAudioMetadataFrame","SdkAudioStreamIdInfoFrame","SdkPingPongFrame","SdkAudioStatusFrame","SdkClientMetricFrame","SdkDataMessageFrame","SdkRemoteVideoUpdateFrame","SdkPrimaryMeetingJoinFrame","SdkPrimaryMeetingJoinAckFrame","SdkPrimaryMeetingLeaveFrame","SdkNotificationFrame","encodeDelimited","tag","instance","decodeDelimited","verify","fromObject","object","fromValue","toObject","defaults","long","Type","getTypeUrl","typeUrlPrefix","description","SdkJoinFlags","SdkClientDetails","deviceModel","deviceMake","platformName","platformVersion","clientSource","chimeSdkVersion","clientUtcOffset","SdkServerSideNetworkAdaption","supportedServerSideNetworkAdaptions","protocolVersion","maxNumOfVideos","flags","clientDetails","audioSessionId","wantsCompressedSdp","serverSideNetworkAdaption","wantsAllTemporalLayersInIndex","disablePeriodicKeyframeRequestOnContentSender","end2","defaultServerSideNetworkAdaption","SdkTurnCredentials","SdkStreamServiceType","SdkStreamMediaType","sendStreams","receiveStreamIds","videoSubscriptionConfiguration","duplex","sdpOffer","audioHost","audioCheckin","audioMuted","compressedSdpOffer","SdkStreamDescriptor","SdkVideoSubscriptionConfiguration","allocations","tracks","compressedSdpAnswer","SdkStreamAllocation","SdkTrackMapping","sources","pausedAtSourceIds","supportedReceiveCodecIntersection","atCapacity","numParticipants","SdkVideoCodecCapability","streamIds","groupIds","serverAvailableOutgoingBitrate","SdkBitrate","trackLabel","groupId","avgBitrateBps","mediaType","externalUserId","ssrc","sourceStreamId","muted","attendeeStates","SdkAudioAttendeeState","audioStreamId","volume","signalStrength","SdkAudioStreamIdInfo","dropped","SdkPingPongType","pingId","SdkMetric","SdkStreamMetricFrame","metrics","dimensions","SdkStreamDimension","globalMetrics","streamMetricFrames","SdkDimensionValue","stringValue","boolValue","uintValue","messages","SdkDataMessagePayload","topic","lifetimeMs","senderAttendeeId","ingestTimeNs","senderExternalUserId","uris","username","password","ttl","SdkTranscriptItem","content","endTime","speakerAttendeeId","speakerExternalUserId","vocabularyFilterMatch","confidence","stable","SdkTranscriptEntity","category","SdkTranscriptAlternative","items","entities","transcript","SdkTranscriptLanguageWithScore","languageCode","score","SdkTranscriptResult","alternatives","languageIdentification","channelId","isPartial","resultId","SdkTranscript","results","SdkTranscriptionStatus","eventTime","transcriptionRegion","transcriptionConfiguration","SdkTranscriptEvent","$oneOfFields","Event","oneofs","SdkTranscriptFrame","events","addedOrUpdatedVideoSubscriptions","removedVideoSubscriptionMids","SdkVideoQualityAdaptationPreference","mid","priority","targetBitrateKbps","qualityAdaptationPreference","NotificationLevel","SdkMeetingSessionCredentials","joinToken","SignalingProtocol","ClientMetricReportDirection","ClientMetricReportMediaType","GlobalMetricReport_1","GlobalMetricReport","previousMetrics","currentMetrics","currentStringMetrics","previousObjectMetrics","currentObjectMetrics","GlobalMetricReport$1","ClientMetricReport_1","SignalingProtocol_js_1","ClientMetricReportDirection_1","ClientMetricReportMediaType_1","ClientMetricReport","globalMetricReport","streamMetricReports","rtcStatsReport","customStatsReports","currentTimestampMs","previousTimestampMs","currentSsrcs","overriddenObservableMetrics","identityValue","metricName","metricReport","decoderLossPercent","concealedSamples","totalSamplesReceived","packetLossPercent","sourceMetricName","sentOrReceived","lost","total","jitterBufferMs","jitterBufferDelay","jitterBufferEmittedCount","countPerSecond","intervalSeconds","diff","trunc","bitsPerSecond","secondsToMilliseconds","averageTimeSpentPerSecondInMilliseconds","averageCpuQualityLimitationDurationPerSecondInMilliseconds","previousValue","currentValue","entries","isHardwareImplementation","implName","hasHwName","isFallback","globalMetricMap","retransmittedBytesSent","transform","VIDEO_RETRANSMIT_BITRATE","totalEncodedBytesTarget","VIDEO_TARGET_ENCODER_BITRATE","totalPacketSendDelay","VIDEO_BUCKET_DELAY_MS","packetsDiscardedOnSend","SOCKET_DISCARDED_PPS","availableIncomingBitrate","VIDEO_AVAILABLE_RECEIVE_BANDWIDTH","availableOutgoingBitrate","VIDEO_AVAILABLE_SEND_BANDWIDTH","currentRoundTripTime","STUN_RTT_MS","audioLevel","RTC_MIC_AUDIO_LEVEL","source","audioUpstreamMetricMap","jitter","RTC_MIC_JITTER_MS","packetsSent","RTC_MIC_PPS","bytesSent","RTC_MIC_BITRATE","roundTripTime","RTC_MIC_RTT_MS","packetsLost","RTC_MIC_FRACTION_PACKET_LOST_PERCENT","audioDownstreamMetricMap","decoderLoss","RTC_SPK_FRACTION_DECODER_LOSS_PERCENT","packetsReceived","RTC_SPK_PPS","RTC_SPK_FRACTION_PACKET_LOST_PERCENT","RTC_SPK_JITTER_MS","RTC_SPK_JITTER_BUFFER_MS","bytesReceived","RTC_SPK_BITRATE","RTC_SPK_AUDIO_LEVEL","totalAudioPacketsLost","RTC_SPK_TOTAL_LOST","totalAudioPacketsExpected","RTC_SPK_TOTAL_EXPECTED","totalAudioPacketsRecoveredRed","RTC_SPK_TOTAL_RECOVERED_RED","totalAudioPacketsRecoveredFec","RTC_SPK_TOTAL_RECOVERED_FEC","videoUpstreamMetricMap","VIDEO_SENT_RTT_MS","nackCount","VIDEO_NACKS_RECEIVED","pliCount","VIDEO_PLIS_RECEIVED","firCount","VIDEO_FIRS_RECEIVED","framesPerSecond","VIDEO_INPUT_FPS","framesEncoded","VIDEO_ENCODE_FPS","VIDEO_SENT_PPS","VIDEO_SENT_FRACTION_PACKET_LOST_PERCENT","VIDEO_SENT_BITRATE","qpSum","VIDEO_SENT_QP_SUM","VIDEO_ENCODE_HEIGHT","VIDEO_ENCODE_WIDTH","totalEncodeTime","VIDEO_ENCODE_MS","encoderImplementation","VIDEO_ENCODER_IS_HARDWARE","qualityLimitationDurations","VIDEO_QUALITY_LIMITATION_DURATION_CPU","videoDownstreamMetricMap","VIDEO_RECEIVED_PPS","VIDEO_RECEIVED_FRACTION_PACKET_LOST_PERCENT","framesReceived","VIDEO_RECEIVED_FPS","framesDecoded","VIDEO_DECODE_FPS","VIDEO_NACKS_SENT","VIDEO_FIRS_SENT","VIDEO_PLIS_SENT","VIDEO_RECEIVED_BITRATE","VIDEO_RECEIVED_JITTER_MS","VIDEO_JITTER_BUFFER_MS","VIDEO_RECEIVED_QP_SUM","VIDEO_DECODE_HEIGHT","VIDEO_DECODE_WIDTH","totalDecodeTime","VIDEO_DECODE_MS","decoderImplementation","VIDEO_DECODER_IS_HARDWARE","totalFreezesDuration","VIDEO_FREEZE_DURATION","freezeCount","VIDEO_FREEZE_COUNT","totalPausesDuration","VIDEO_PAUSE_DURATION","pauseCount","VIDEO_PAUSE_COUNT","VIDEO_DROPPED_FPS","streamDimensionMap","VIDEO_ENCODER_NAME","VIDEO_DECODER_NAME","observableVideoMetricSpec","videoUpstreamBitrate","media","VIDEO","dir","UPSTREAM","videoUpstreamPacketsSent","videoUpstreamPacketLossPercent","videoUpstreamFramesEncodedPerSecond","videoUpstreamFrameHeight","videoUpstreamFrameWidth","videoUpstreamJitterMs","videoUpstreamRoundTripTimeMs","videoDownstreamBitrate","DOWNSTREAM","videoDownstreamPacketLossPercent","videoDownstreamPacketsReceived","videoDownstreamFramesDecodedPerSecond","videoDownstreamFrameHeight","videoDownstreamFrameWidth","videoDownstreamJitterMs","videoDownstreamDelayMs","observableMetricSpec","audioPacketsReceived","AUDIO","audioPacketsReceivedFractionLoss","audioDecoderLoss","audioPacketsSent","audioPacketLossPercent","audioUpstreamRoundTripTimeMs","videoPacketSentPerSecond","audioSpeakerDelayMs","audioUpstreamJitterMs","audioDownstreamJitterMs","nackCountReceivedPerSecond","currentRoundTripTimeMs","audioDownstreamLevel","audioUpstreamLevel","getMetricMap","getStreamDimensionMap","getObservableMetricValue","metricSpec","streamMetricReport","getObservableVideoMetricValue","ssrcNum","getObservableMetrics","metric","getObservableVideoMetrics","videoStreamMetrics","metricValue","attendeeIdForGroupId","attendeeIdForStreamId","getRTCStatsReport","cloned","print","clientMetricReport","removeDestroyedSsrcs","overrideObservableMetric","ClientMetricReport$1","ClientVideoStreamReceivingReport_1","ClientVideoStreamReceivingReport","ClientVideoStreamReceivingReport$1","ConnectionHealthData_1","ConnectionHealthData","connectionStartTimestampMs","consecutiveStatsWithNoPackets","consecutiveStatsWithNoAudioPacketsSent","lastPacketLossInboundTimestampMs","lastGoodSignalTimestampMs","lastWeakSignalTimestampMs","lastNoSignalTimestampMs","consecutiveMissedPongs","packetsReceivedInLastMinute","fractionPacketsLostInboundInLastMinute","recentDurationMs","setConnectionStartTime","isConnectionStartRecent","isTimestampRecent","isLastPacketLossRecent","isGoodSignalRecent","isWeakSignalRecent","isNoSignalRecent","setConsecutiveMissedPongs","pongs","setConsecutiveStatsWithNoPackets","stats","setConsecutiveStatsWithNoAudioPacketsSent","setLastPacketLossInboundTimestampMs","timeStamp","setLastNoSignalTimestampMs","setLastWeakSignalTimestampMs","setLastGoodSignalTimestampMs","setAudioSpeakerDelayMs","delayMs","ConnectionHealthData$1","ConnectionHealthPolicyConfiguration_1","ConnectionHealthPolicyConfiguration","connectionUnhealthyThreshold","noSignalThresholdTimeMs","connectionWaitTimeMs","zeroBarsNoSignalTimeMs","oneBarWeakSignalTimeMs","twoBarsTimeMs","threeBarsTimeMs","fourBarsTimeMs","fiveBarsTimeMs","cooldownTimeMs","pastSamplesToConsider","goodSignalTimeMs","fractionalLoss","packetsExpected","maximumTimesToWarn","missedPongsLowerThreshold","missedPongsUpperThreshold","maximumAudioDelayMs","maximumAudioDelayDataPoints","sendingAudioFailureSamplesToConsider","sendingAudioFailureInitialWaitTimeMs","ConnectionHealthPolicyConfiguration$1","ContentShareConstants","ContentShareConstants_1","ContentShareConstants$1","IntervalScheduler_1","IntervalScheduler","intervalMs","setInterval","clearInterval","running","IntervalScheduler$1","adopt","MediaDeviceProxyHandler_1","MediaDeviceProxyHandler","scheduler","devices","deviceChangeListeners","target","property","receiver","Reflect","mediaDevices","patchAddEventListener","patchRemoveEventListener","INTERVAL_MS","pollDeviceLists","newDevices","sortedDeviceList","changed","some","deviceId","handleDeviceChangeEvent","enumerateDevices","device1","device2","handleEvent","MediaDeviceProxyHandler$1","DefaultMediaDeviceFactory_1","DefaultMediaDeviceFactory","isMediaDevicesSupported","Proxy","DefaultMediaDeviceFactory$1","PromiseQueue_1","PromiseQueue","queue","func","PromiseQueue$1","Types","None","Some","Maybe","of","isSome","isNone","f","flatMap","getOrElse","_value","defaulting","_f","DefaultVideoFrameProcessorTimer_1","DefaultVideoFrameProcessorTimer","workerTimer","createWorkerTimer","timerBlob","Blob","delay","onmessage","lastTimeout","DefaultVideoFrameProcessorTimer$1","DefaultVideoFrameProcessorPipeline_1","DEFAULT_FRAMERATE","DefaultVideoFrameProcessorPipeline","stages","fr","outputMediaStream","MediaStream","canvasOutput","outputCtx","canvasInput","inputCtx","inputVideoStream","sourceBuffers","destBuffers","hasStarted","_event","processVideoStart","performance","videoWidth","videoHeight","imageSource","proc","processors","_error","forEachObserver","obs","processingDidFailToStart","processingDidStart","processVideoLatency","nextFrameDelay","processingLatencyTooHigh","stage","srcObject","destroyInputMediaStreamAndBuffers","track","processingDidStop","getInputMediaStream","getActiveOutputMediaStream","isOutputMediaStreamActive","captureStream","cloneInputAudioTracksToOutput","setInputMediaStream","inputMediaStream","settings","getSettings","setAttribute","canvasBuffer","load","play","audioTrack","id","removeTrack","addTrack","active","observerFunc","getTracks","DefaultVideoFrameProcessorPipeline$1","DefaultVideoTransformDevice_1","DefaultVideoTransformDevice","pipe","passEventControllerToProcessors","chooseNewInnerDevice","newDevice","newTransformDevice","getInnerDevice","intrinsicDevice","transformStream","mediaStream","onOutputStreamDisconnect","deviceIsMediaStream","latencyMs","DefaultVideoTransformDevice$1","DefaultModality_1","DefaultModality","_id","base","MODALITY_SEPARATOR","modality","components","hasModality","withModality","m","DefaultModality$1","Modality","MODALITY_CONTENT","VideoTileState_1","VideoTileState","tileId","localTile","localTileStarted","isContent","paused","poorConnection","boundAttendeeId","boundExternalUserId","boundVideoStream","boundVideoElement","nameplate","videoStreamContentWidth","videoStreamContentHeight","videoElementCSSWidthPixels","videoElementCSSHeightPixels","devicePixelRatio","videoElementPhysicalWidthPixels","videoElementPhysicalHeightPixels","VideoTileState$1","DefaultVideoTile_1","DefaultVideoTile","tileController","devicePixelRatioMonitor","tileState","videoStream","videoElement","facingMode","setVideoElementFlag","style","hasAttribute","removeAttribute","dueToPause","keepLastFrameWhenPaused","disconnectVideoStreamFromVideoElement","devicePixelRatioChanged","newDevicePixelRatio","sendTileStateUpdate","state","stateRef","contentWidth","contentHeight","tileUpdated","bindVideoElement","clientWidth","clientHeight","unpause","markPoorConnection","unmarkPoorConnection","capture","video","setStreamId","updateActiveState","updateVideoStreamOnVideoElement","updateVideoElementPhysicalPixels","connectVideoStreamToVideoElement","flag","DefaultVideoTile$1","isAudioTransformDevice","AudioTransformDevice","DeviceSelection_1","DeviceSelection","matchesConstraints","constraints","DeviceSelection$1","GetUserMediaError_1","GetUserMediaError","cause","GetUserMediaError$1","NotFoundError_1","NotFoundError","NotFoundError$1","NotReadableError_1","NotReadableError","NotReadableError$1","OverconstrainedError_1","OverconstrainedError","constraint","OverconstrainedError$1","PermissionDeniedError_1","PermissionDeniedError","PermissionDeniedError$1","_TypeError","TypeError$1","VideoQualitySettings_1","VideoQualitySettings","videoFrameRate","equals","VideoQualitySettings$1","VideoDisabled","VideoResolutionHD","VideoResolutionFHD","VideoResolutionUHD","isVideoTransformDevice","VideoTransformDevice","DefaultDeviceController_1","Types_1","AudioTransformDevice_1","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","TypeError_1","require$$14","require$$15","VideoTransformDevice_1","require$$16","DefaultDeviceController","deviceInfoCache","activeDevices","audio","chosenVideoTransformDevice","audioOutputDeviceId","deviceChangeObservers","mediaStreamBrokerObservers","deviceLabelTrigger","getUserMedia","audioInputDestinationNode","audioInputSourceNode","videoInputQualitySettings","useWebAudio","useMediaConstraintsFallback","audioInputTaskQueue","videoInputTaskQueue","mediaStreamMuteObserver","audioInputMuteStateChanged","alreadyHandlingDeviceChange","enableWebAudio","defaultVideoWidth","defaultVideoHeight","defaultVideoFrameRate","dimension","mediaDeviceWrapper","supportedConstraints","getSupportedConstraints","isWatchingForDeviceChanges","onDeviceChangeCallback","ensureWatchingDeviceChanges","handleDeviceChange","stopWatchingDeviceChanges","shouldObserveDeviceChanges","watchForDeviceChangesIfNecessary","stopAudioInput","stopVideoInput","listAudioInputDevices","forceUpdate","listDevicesOfKind","trace","listVideoInputDevices","listAudioOutputDevices","pushAudioMeetingStateForPermissions","audioStream","pushVideoMeetingStateForPermissions","startAudioInput","startAudioInputTask","chooseAudioTransformInputDevice","removeTransform","chooseInputIntrinsicDevice","attachAudioInputStreamToAudioContext","stream","getMediaStreamDestinationNode","mute","publishAudioInputDidChangeEvent","stopAudioInputTask","releaseAudioTransformStream","stopTracksAndRemoveCallbacks","getAudioContext","OfflineAudioContext","resume","nodes","createAudioNode","inner","setTransform","chooseVideoTransformInputDevice","prevVideoTransformDevice","wasUsingTransformDevice","isMediaStreamReusableByDeviceId","startVideoInput","startVideoInputTask","publishVideoInputDidChangeEvent","chosenVideoInputIsTransformDevice","stopVideoInputTask","releaseVideoTransformStream","chooseAudioOutput","deviceInfo","deviceInfoFromDeviceId","publishAudioOutputDidChangeEvent","addDeviceChangeObserver","removeDeviceChangeObserver","createAnalyserNodeForAudioInput","analyser","createAnalyser","removeOriginalInputs","disconnect","connect","createAnalyserNodeForRawAudioInput","createAnalyserNodeForStream","audioContext","createMediaStreamSource","startVideoPreviewForVideoInput","element","stopVideoPreviewForVideoInput","setDeviceLabelTrigger","trigger","label","mixIntoAudioInput","getMediaStreamOutputNode","chooseVideoInputQuality","frameRate","getVideoInputQualitySettings","acquireAudioInputStream","acquireVideoInputStream","acquireDisplayInputStream","_streamConstraints","kind","activeDevice","endedCallback","trackMuteCallback","trackUnmuteCallback","muteLocalAudioInputStream","toggleLocalAudioInputStream","unmuteLocalAudioInputStream","enabled","audioDevice","deviceIdConstraints","constraintStringParams","exact","synthesizeAudioDevice","toneHz","outputNode","createMediaStreamDestination","gainNode","createGain","gain","oscillatorNode","createOscillator","frequency","createBufferSource","createBuffer","sampleRate","defaultSampleRate","getChannelData","loop","deviceKind","updateDeviceInfoCacheFromBrowser","listCachedDevicesOfKind","MediaDeviceInfo","hasDeviceLabels","triggerStream","deviceLabelTriggerErrorMessage","getErrorMessage","devicesOfKind","oldAudioInputDevices","oldVideoInputDevices","oldAudioOutputDevices","newAudioInputDevices","newVideoInputDevices","newAudioOutputDevices","areDeviceListsEqual","audioInputsChanged","videoInputsChanged","audioOutputsChanged","handleDeviceStreamEnded","audioInputStreamEnded","videoInputStreamEnded","forEachMediaStreamBrokerObserver","intrinsicDeviceAsMediaStream","hasSameMediaStreamId","selection","proposedConstraints","hasSameGroupId","deviceIds","getIntrinsicDeviceId","getGroupIdFromDeviceId","cachedDeviceInfo","find","cachedDevice","handleGetUserMediaError","errorTimeMs","permissionDeniedOriginDetectionThresholdMs","matchesDeviceSelection","getMediaStreamConstraints","createEmptyAudioDevice","handleNewInputDevice","errorMessage","audioInputErrorMessage","videoInputErrorMessage","hasError","fallbackConstraints","fallbackConstraintsJSON","newDeviceId","getMediaTrackSettings","calculateMediaStreamConstraints","minimal","trackConstraints","ideal","supportSampleRateConstraint","supportSampleSizeConstraint","sampleSize","defaultSampleSize","supportChannelCountConstraint","channelCount","defaultChannelCount","echoCancellation","googEchoCancellation","googEchoCancellation2","googAutoGainControl","googAutoGainControl2","googNoiseSuppression","googNoiseSuppression2","googHighpassFilter","getMediaStreamConstraintsFromTrackConstraints","isMediaDeviceInfo","hasAppliedTransform","reconnectAudioInputs","dest","previous","latencyHint","defaultLatencyHint","AudioContext","webkitAudioContext","addMediaStreamBrokerObserver","removeMediaStreamBrokerObserver","videoInputDidChange","audioInputDidChange","audioOutputDidChange","DefaultDeviceController$1","ContentShareMediaStreamBroker_1","ContentShareMediaStreamBroker","_mediaStream","streamConstraints","mandatory","chromeMediaSource","chromeMediaSourceId","getDisplayMedia","acquireScreenCaptureDisplayInputStream","sourceId","screenCaptureDisplayMediaConstraints","defaultFrameRate","maxFrameRate","toggleMediaStream","enable","cleanup","_observer","ContentShareMediaStreamBroker$1","CreatePeerConnectionTask_1","CreatePeerConnectionTask","removeTrackAddedEventListener","removeTrackRemovedEventListeners","trackEvents","removeVideoTrackEventListeners","trackAddedHandler","transceiver","currentDirection","bindAudioStream","trackIsVideoInput","addRemoteVideoTrack","trackId","addPeerConnectionEventLogger","connectionState","iceGatheringState","candidate","iceConnectionState","iceServers","urls","credential","credentialType","iceTransportPolicy","bundlePolicy","sdpSemantics","encodedInsertableStreams","useTransceivers","attendeeIdForTrack","skipAdding","getVideoTileForAttendeeId","haveVideoTileForAttendeeId","addVideoTile","streamIdForTrack","trackEvent","removeRemoteVideoTrack","cap","externalUserIdForTrack","endEvent","trackRemovedHandler","removeVideoTrackEventListener","removeVideoTile","CreatePeerConnectionTask$1","REMOVE_HANDLER_INTERVAL_MS","MeetingSessionStatusCode","SDPCandidateType","SDPMediaSection_1","SDPMediaSection","SDPMediaSection$1","VideoCodecCapability_1","SignalingProtocol_1","VideoCodecCapability","codecName","codecCapability","clockRate","sdpFmtpLine","fmtpLineMatches","line","expectedPayloadType","codecCapabilityFmtpLine","profileLevelIdRegex","modifiedCodecCapabilityFmtpLine","h264ConstrainedBaselineProfile","vp9Profile0","av1Main","capability","VP8","vp8","H264_BASELINE_PROFILE","h264BaselineProfile","H264_CONSTRAINED_BASELINE_PROFILE","H264_MAIN_PROFILE","h264MainProfile","H264_HIGH_PROFILE","h264HighProfile","H264_CONSTRAINED_HIGH_PROFILE","h264ConstrainedHighProfile","VP9_PROFILE_0","AV1_MAIN_PROFILE","VideoCodecCapability$1","SDP_1","SDPCandidateType_1","SDP","lines","CRLF","candidateType","Host","ServerReflexive","PeerReflexive","Relay","sdpLine","candidateTypeFromString","section","sections","cameraLineIndex","hasCamera","sec","figGroupLine","prefix","splitLines","hasVideo","hasCandidates","hasCandidatesForAllMLines","withoutCandidateType","candidateTypeToExclude","linesToSDP","withoutServerReflexiveCandidates","withAudioMaxAverageBitrate","maxAverageBitrate","rfc7587LowestBitrate","rfc7587HighestBitrate","srcLines","fmtpAttributes","findOpusFmtpAttributes","dstLines","updateOpusFmtpAttributes","withStereoAudio","sdpLines","opusRtpMapRegex","lookingForOpusRtpMap","additionalParams","fmtpIndex","currFmtpAttribute","oldParameters","newParameters","parameter","withUnifiedPlanFormat","originalSdp","getUniqueRtpHeaderExtensionId","headerExtensionIds","previousId","withVideoLayersAllocationRtpHeaderExtension","previousSdp","withRtpHeaderExtension","videoLayersAllocationRtpHeaderExtensionUrl","withDependencyDescriptorRtpHeaderExtension","dependencyDescriptorRtpHeaderExtensionUrl","withoutDependencyDescriptorRtpHeaderExtension","getRtpHeaderExtensionId","splitSections","newSections","getRtpHeaderExtensionIdInSection","hasRtpHeaderExtensionId","targetLine","newSdp","ssrcForVideoSendingSection","srcSDP","findActiveCameraSection","fidGroupMatch","matchPrefix","fidGroup","extractSSRCsFromFIDGroupLine","videoSSRC1","videoSendSectionHasDifferentSSRC","prevSdp","ssrc1","ssrc2","removeH264SupportFromSendSection","cameraSection","cameraSectionLines","payloadTypesForH264","primaryPayloadTypeToFeedbackPayloadTypes","attribute","payloadMatch","feedbackMatches","feedbackPayloadType","primaryPayloadType","payloadTypesToRemove","feedbackTypes","feedbackType","mline","text","filteredLines","newSDP","mediaSections","parsedMediaSections","headerExtension","targetId","withVideoSendCodecPreferences","preferences","sectionWithCodecPreferences","payloadTypeToCodec","payloadTypeString","preference","codecMatches","hasVp9ProfileId","prospectiveFmtpLine","orderedPreferedPayloadTypes","_payloadType1","codec1","_payloadType2","codec2","payloadType","_","highestPriorityVideoSendCodec","mlineTokens","videoCodecCapabilityForPayloadType","sectionLines","fmtpLine","nameAndClockRate","getAudioPayloadTypes","payloadTypeMap","findAudioPayloadType","rtpMapRegex","RegExp","withStartingVideoSendBitrate","bitrateKbps","newLine","SDP$1","CreateSDPTask_1","MeetingSessionStatusCode_1","CreateSDPTask","sessionUsesAudio","audioHostURL","sessionUsesVideo","sending","hasVideoInput","hasStartedLocalVideoTile","receiving","usesVideo","offerOptions","offerToReceiveAudio","IncompatibleSDP","CreateSDPTask$1","DataMessage_1","DataMessage","throttled","TextDecoder","parse","DataMessage$1","DefaultActiveSpeakerDetector_1","DefaultActiveSpeakerDetector","hasBandwidthPriorityCallback","waitIntervalMs","updateIntervalMs","speakerScores","speakerMuteState","detectorCallbackToHandler","detectorCallbackToScoresTimer","detectorCallbackToActivityTimer","hasBandwidthPriority","mostRecentUpdateTimestamp","needUpdate","activeSpeakers","updateActiveSpeakers","policy","sortedSpeakers","attendeeIds","activeScore","sortedAttendeeIds","s1","s2","prioritizeVideoSendBandwidthForActiveSpeaker","updateScore","calculateScore","subscribe","scoresCallback","scoresCallbackIntervalMs","handler","present","realtimeSubscribeToVolumeIndicator","_signalStrength","activityTimer","scoresTimer","realtimeSubscribeToAttendeeIdPresence","unsubscribe","realtimeUnsubscribeToAttendeeIdPresence","clear","DefaultActiveSpeakerDetector$1","DefaultActiveSpeakerPolicy_1","DefaultActiveSpeakerPolicy","speakerWeight","cutoffThreshold","silenceThreshold","takeoverRate","volumes","otherAttendeeId","DefaultActiveSpeakerPolicy$1","DefaultAudioMixController_1","DefaultAudioMixController","audioElement","bindAudioElement","autoplay","bindAudioMix","unbindAudioElement","meetingAudioStreamBecameInactive","bindAudioDevice","previousStream","meetingAudioStreamBecameActive","shouldSetSinkId","sinkId","newSinkId","existingAudioElement","existingStream","setSinkId","getCurrentMeetingAudioStream","addAudioMixObserver","removeAudioMixObserver","DefaultAudioMixController$1","SignalingAndMetricsConnectionMonitor_1","SignalingAndMetricsConnectionMonitor","isActive","hasSeenValidCandidatePairMetricsBefore","lastTotalBytesReceived","realtimeSubscribeToLocalSignalStrengthChange","receiveSignalStrengthChange","updateConnectionHealth","didReceivePong","clockSkewMs","logLatency","didMissPongs","metricsDidReceive","audiofractionPacketsLostInbound","potentialAudioPacketsReceived","potentialAudioFractionPacketsLostInbound","webrtcReport","totalBytesReceived","stat","addToMinuteWindow","updateAudioPacketsSentInConnectionHealth","pop","connectionHealthDidChange","SignalingAndMetricsConnectionMonitor$1","MeetingSessionStatus_1","MeetingSessionStatus","_statusCode","statusCode","isFailure","AudioAuthenticationRejected","AudioCallAtCapacity","AudioInternalServerError","AudioServiceUnavailable","AudioDisconnected","VideoCallAtSourceCapacity","SignalingBadRequest","SignalingInternalServerError","SignalingRequestFailed","ICEGatheringTimeoutWorkaround","ConnectionHealthReconnect","RealtimeApiFailed","TaskFailed","NoAttendeePresent","isTerminal","Left","AudioJoinedFromAnotherDevice","MeetingEnded","TURNCredentialsForbidden","AudioAttendeeRemoved","isAudioConnectionFailure","OK","VideoCallSwitchToViewOnly","AudioVideoWasRemovedFromPrimaryMeeting","AudioDisconnectAudio","exhaustiveCheck","frame","fromSignalingStatus","AUDIO_STATUS","fromAudioStatus","PRIMARY_MEETING_LEAVE","MeetingSessionStatus$1","MeetingSessionVideoAvailability_1","MeetingSessionVideoAvailability","remoteVideoAvailable","canStartLocalVideo","MeetingSessionVideoAvailability$1","DefaultPingPong_1","DefaultPingPong","observerQueue","consecutivePongsUnaccountedFor","intervalScheduler","startPingInterval","stopPingInterval","ping","PING","pingTimestampLocalMs","pong","PONG","WebSocketOpen","WebSocketFailed","WebSocketError","WebSocketClosing","ReceivedSignalFrame","PING_PONG","pongTimestampRemoteMs","pingPongLocalIntervalMs","estimatedPingTimestampRemoteMs","estimatedClockSkewMs","DefaultPingPong$1","Transcript_1","Transcript","Transcript$1","TranscriptionStatus_1","TranscriptionStatus","TranscriptionStatus$1","TranscriptionStatusType","TranscriptionStatusType_1","TranscriptionStatusType$1","TranscriptItemType","TranscriptItemType_1","TranscriptItemType$1","TranscriptEvent","TranscriptEventConverter","TranscriptionStatusTypes","STARTED","INTERRUPTED","RESUMED","STOPPED","FAILED","transcriptEvents","sdkTranscriptEvent","transcriptionStatusType","transcriptionStatus","eventTimeMs","transcriptResult","endTimeMs","transcriptLanguageWithScore","alternative","transcriptAlternative","item","transcriptItem","PRONUNCIATION","PUNCTUATION","entity","transcriptEntity","TRANSCRIPTION_DATA_MESSAGE_TOPIC","TranscriptEvent_1","transcriptEventCallbacks","subscribeToTranscriptEvent","realtimeSubscribeToReceiveDataMessage","transcriptEvent","transcriptEventCallback","unsubscribeFromTranscriptEvent","realtimeUnsubscribeFromReceiveDataMessage","RealtimeState_1","RealtimeState","localAttendeeId","localExternalUserId","attendeeIdChangesCallbacks","canUnmute","setCanUnmuteLocalAudioCallbacks","muteAndUnmuteLocalAudioCallbacks","volumeIndicatorState","attendeeIdToExternalUserId","volumeIndicatorCallbacks","localSignalStrengthChangeCallbacks","fatalErrorCallbacks","sendDataMessageCallbacks","receiveDataMessageCallbacks","RealtimeState$1","RealtimeVolumeIndicator_1","RealtimeVolumeIndicator","RealtimeVolumeIndicator$1","DefaultRealtimeController_1","DefaultTranscriptionController_1","DefaultRealtimeController","transcriptionController","_transcriptionController","realtimeSetLocalAttendeeId","realtimeSetAttendeeIdPresence","posInFrame","onError","realtimeSetCanUnmuteLocalAudio","realtimeSubscribeToSetCanUnmuteLocalAudio","realtimeUnsubscribeToSetCanUnmuteLocalAudio","realtimeCanUnmuteLocalAudio","realtimeMuteLocalAudio","setAudioInputEnabled","realtimeUpdateVolumeIndicator","realtimeUnmuteLocalAudio","realtimeSubscribeToMuteAndUnmuteLocalAudio","realtimeUnsubscribeToMuteAndUnmuteLocalAudio","realtimeIsLocalAudioMuted","sendVolumeIndicatorChange","realtimeUnsubscribeFromVolumeIndicator","applyLocalMuteOverride","getVolumeIndicatorState","volumeUpdated","mutedUpdated","signalStrengthUpdated","sendLocalSignalStrengthChange","realtimeUnsubscribeToLocalSignalStrengthChange","realtimeSubscribeToSendDataMessage","realtimeUnsubscribeFromSendDataMessage","realtimeSendDataMessage","realtimeReceiveDataMessage","realtimeSubscribeToFatalError","realtimeUnsubscribeToFatalError","attendeeIdRemote","mutedRemote","attendeeIdLocal","mutedLocal","updateState","stateIsEmpty","eventError","consoleError","DefaultRealtimeController$1","SessionStateControllerAction","SessionStateControllerDeferPriority","SessionStateControllerState","SessionStateControllerTransitionResult","DefaultSessionStateController_1","SessionStateControllerAction_1","SessionStateControllerDeferPriority_1","SessionStateControllerState_1","SessionStateControllerTransitionResult_1","DefaultSessionStateController","currentState","NotConnected","deferredAction","deferredWork","perform","action","work","Connect","transition","Connecting","Fail","Disconnecting","FinishConnecting","Connected","Disconnect","Reconnect","Update","Updating","FinishUpdating","FinishDisconnecting","canDefer","deferAction","DeferredTransition","NoTransitionAvailable","TransitionFailed","performDeferredAction","Transitioned","newState","deferPriority","VeryHigh","High","Medium","Low","DoNotDefer","DefaultSessionStateController$1","Utils","Utils$1","getRandomValues","getFormattedOffset","getDefaultAssetSpec","toLowerCasePropertyNames","isIFramed","wait","waitTimeMs","frameElement","nodeName","parent","top","newValue","utcOffset","abs","padStart","crypto","DataView","setUint32","random","VideoQualityAdaptationPreference","WebSocketReadyState","convertServerSideNetworkAdaptionEnumToSignaled","convertServerSideNetworkAdaptionEnumFromSignaled","serverSideNetworkAdaptionIsNoneOrDefault","ServerSideNetworkAdaption","adaption","Default","DEFAULT","NONE","BANDWIDTH_PROBING","BandwidthProbing","BANDWIDTH_PROBING_AND_VIDEO_QUALITY_ADAPTION","BandwidthProbingAndRemoteVideoQualityAdaption","SignalingClientEvent_1","SignalingClientEvent","client","closeCode","closeReason","isConnectionTerminated","SignalingClientEvent$1","DefaultSignalingClient_1","Utils_1","VideoQualityAdaptationPreference_1","WebSocketReadyState_1","ServerSideNetworkAdaption_1","DefaultSignalingClient","webSocket","unloadHandler","closeEventHandler","deactivatePageUnloadHandler","resetConnection","sendEvent","code","reason","serviceConnectionRequestQueue","connectionRequestQueue","generateNewAudioSessionId","openConnection","pingPongFrame","sendMessage","joinFrame","HAS_STREAM_UPDATE","sdkClientDetails","getTimezoneOffset","applicationMetadata","CLIENT_SUPPORTS_COMPRESSION","JOIN","subscribeFrame","connectionTypeHasVideo","RX","localVideoEnabled","DUPLEX","videoStreamDescriptions","streamDescription","toStreamDescriptor","convertSignalingClientVideoSubscriptionConfiguration","SUBSCRIBE","addedOrUpdated","removed","REMOTE_VIDEO_UPDATE","config","signalConfig","Balanced","BALANCED","MaintainFramerate","MAINTAIN_FRAMERATE","MaintainResolution","MAINTAIN_RESOLUTION","LEAVE","sendClientMetrics","clientMetricFrame","CLIENT_METRIC","sendDataMessage","messageFrame","DATA_MESSAGE","readyState","Closed","isClosing","CLOSE_EVENT_TIMEOUT_MS","CloseEvent","wasClean","bubbles","Open","wasOpened","AUDIO_CONTROL","PAUSE","RESUME","prependWithFrameTypeRTC","send","WebSocketSendMessageFailure","WebSocketSentMessage","WebSocketSkippedMessage","receiveMessage","inBuffer","ProtocolDecodeFailure","stripFrameTypeRTC","frameType","FRAME_TYPE_RTC","outBuffer","shift","protocols","setUpEventListeners","WebSocketConnecting","WebSocketMessage","activatePageUnloadHandler","GlobalAny","num","Uint32Array","promoteToPrimaryMeeting","signaledCredentials","PRIMARY_MEETING_JOIN","demoteFromPrimaryMeeting","DefaultSignalingClient$1","SignalingClientVideoSubscriptionConfiguration_1","SignalingClientVideoSubscriptionConfiguration","SignalingClientVideoSubscriptionConfiguration$1","RedundantAudioRecoveryMetricReport_1","RedundantAudioRecoveryMetricReport","RedundantAudioRecoveryMetricReport$1","StreamMetricReport_1","StreamMetricReport","StreamMetricReport$1","MeetingSessionLifecycleEvent","MeetingSessionLifecycleEventCondition","StatsCollector_1","MeetingSessionLifecycleEvent_1","MeetingSessionLifecycleEventCondition_1","AudioLogEvent_1","StatsCollector","interval","redRecoveryMetricReport","lastRedRecoveryMetricReportConsumedTimestampMs","metricsAddTime","_name","_duration","_attributes","metricsLogEvent","toAttribute","toSuffix","$1","eventName","timeMs","attributes","logEventTime","logStateTimeout","stateName","logEvent","logAudioEvent","finalAttributes","call_id","meetingId","client_type","CLIENT_TYPE","metric_type","logMeetingSessionStatus","statusEventName","statusAttribute","status_code","logLifecycleEvent","lifecycleEvent","condition","lifecycle_event","lifecycle_event_code","lifecycle_event_condition","lifecycle_event_condition_code","getStatsWrapper","updateMetricValues","rawMetricReport","isStream","metricMap","rawMetric","processRawMetricReports","rawMetricReports","isStreamRawMetricReport","existingStreamMetricReport","sendVideoStreamIdFromRid","rid","streamIdForSSRC","getMediaType","getDirectionType","groupIdForSSRC","addStreamMetricDimensionFrames","streamMetricFrame","dimensionFrame","dimensionValue","addMetricFrame","sourceMetric","streamMetricFramesLength","latestStreamMetricFrame","metricFrame","addGlobalMetricsToProtobuf","addStreamMetricsToProtobuf","makeClientMetricProtobuf","sendClientMetricProtobuf","isValidStandardRawMetric","isValidSsrc","validSsrc","isValidRawMetricReport","filterRawMetricReports","filteredRawMetricReports","handleRawMetricReports","maybeAddRedRecoveryMetrics","rtcPeerConnection","report","getStats","recoveryMetricsDidReceive","StatsCollector$1","FinishGatheringICECandidatesTask_1","FinishGatheringICECandidatesTask","chromeVpnTimeoutMs","CHROME_VPN_TIMEOUT_MS","connectionTimeoutMs","startTimestampMs","localDescription","isRTPCandidate","FinishGatheringICECandidatesTask$1","MeetingSessionTURNCredentials_1","MeetingSessionTURNCredentials","MeetingSessionTURNCredentials$1","SignalingClientJoin_1","SignalingClientJoin","SignalingClientJoin$1","__createBinding","o","k2","__setModuleDefault","__importStar","JoinAndReceiveIndexTask_1","JoinAndReceiveIndexTask","handleMeetingSessionStatus","JOIN_ACK","joinAckFrame","setServerSideNetworkAdaption","uri","urlRewriter","INDEX","getServerSideNetworkAdaption","JoinAndReceiveIndexTask$1","LeaveAndReceiveLeaveAckTask_1","LeaveAndReceiveLeaveAckTask","receiveLeaveAck","LEAVE_ACK","LeaveAndReceiveLeaveAckTask$1","ListenForVolumeIndicatorsTask_1","ListenForVolumeIndicatorsTask","realtimeMuteAndUnmuteHandler","AUDIO_STREAM_ID_INFO","sendRealtimeUpdatesForAudioStreamIdInfo","AUDIO_METADATA","sendRealtimeUpdatesForAudioMetadata","ListenForVolumeIndicatorsTask$1","ReconnectionHealthPolicy_1","ReconnectionHealthPolicy","audioDelayPointsOverMaximum","CONNECTION_UNHEALTHY_THRESHOLD","CONNECTION_WAIT_TIME_MS","MISSED_PONGS_THRESHOLD","MAXIMUM_AUDIO_DELAY_MS","MAXIMUM_AUDIO_DELAY_DATA_POINTS","noPacketsReceivedRecently","missedPongsRecently","hasBadAudioDelay","ReconnectionHealthPolicy$1","SendingAudioFailureConnectionHealthPolicy_1","SendingAudioFailureConnectionHealthPolicy","coolDownTimeMs","lastWarnTimestampMs","warnCount","isSendingAudioUnhealthy","hasEnoughTimeElapsedToEvaluateStatus","areAudioPacketsNotBeingSent","didWarnRecently","SendingAudioFailureConnectionHealthPolicy$1","UnusableAudioWarningConnectionHealthPolicy_1","UnusableAudioWarningConnectionHealthPolicy","calculateFractionalLoss","samplesToConsider","totalPacketsExpected","totalPacketsReceived","UnusableAudioWarningConnectionHealthPolicy$1","MonitorTask_1","MonitorTask","connectionHealthPolicyConfiguration","initialConnectionHealthData","prevSignalStrength","currentAvailableStreamAvgBitrates","hasSignalingError","presenceHandlerCalled","isResubscribeCheckPaused","pendingMetricsReport","isMeetingConnected","checkAndSendWeakSignalEvent","isCurrentSignalBad","isPrevSignalBad","signalStrengthEventType","RedmicStartLoss","RedmicEndLoss","realtimeFatalErrorCallback","realtimeAttendeeIdPresenceHandler","presentAttendeeId","generateBaseAudioVideoEventAttributes","meetingDurationMs","generateAudioVideoEventAttributesForReceivingAudioDropped","baseAttributes","reconnectionHealthPolicy","unusableAudioWarningHealthPolicy","sendingAudioFailureHealthPolicy","pauseResubscribeCheck","resumeResubscribeCheck","checkResubscribe","needsRenegotiation","videoTileDidUpdate","_tileState","getAllVideoTiles","availableSendBandwidth","nackCountPerSecond","needResubscribe","resubscribeForDownlink","videoSubscriptionIdSet","updateConnectionMetric","uplinkKbps","resubscribeForUplink","downlinkVideoStream","setLastActiveTimestampMs","applyHealthPolicy","haveVideoTilesWithStreams","connectionDidSuggestStopVideo","connectionDidBecomePoor","connectionDidBecomeGood","audioVideoDidStart","audioVideoDidStartConnecting","reconnecting","audioVideoDidStop","sessionStatus","healthPolicy","unhealthyCallback","healthyCallback","healthValue","handleBitrateFrame","NOTIFICATION","WARNING","bitrateFrame","integrateBitratesFrame","fromSignalFrame","PRIMARY_MEETING_JOIN_ACK","MonitorTask$1","SignalingClientConnectionRequest_1","SignalingClientConnectionRequest","signalingURL","SignalingClientConnectionRequest$1","OpenSignalingConnectionTask_1","OpenSignalingConnectionTask","OpenSignalingConnectionTask$1","ParallelGroupTask_1","ParallelGroupTask","tasksToRunParallel","taskResults","failures","failureMessage","ParallelGroupTask$1","PromoteToPrimaryMeetingTask_1","__1","PromoteToPrimaryMeetingTask$1","completionCallback","receivePrimaryMeetingJoinAck","PromoteToPrimaryMeetingTask","ReceiveAudioInputTask_1","ReceiveAudioInputTask","ReceiveAudioInputTask$1","ReceiveRemoteVideoPauseResumeTask","ReceiveRemoteVideoPauseResume","serverPausedVideoTileIds","pauseResumeFrame","messageType","tiles","tileWillBePausedByDownlinkPolicy","tileWillBeUnpausedByDownlinkPolicy","ReceiveVideoInputTask_1","ReceiveVideoInputTask","checkAndApplyVideoConstraint","isContentAttendee","mediaStreamTrack","trackSettings","videoQualitySettings","meetingFeatures","contentMaxResolution","videoMaxResolution","applyConstraints","receiveEnabled","TX","chooseCaptureAndEncodeParameters","integrateUplinkPolicyDecision","stopLocalVideoTile","encodingParams","ReceiveVideoInputTask$1","ReceiveVideoStreamIndexTask_1","ReceiveVideoStreamIndexTask","isIngestionPaused","pendingIndex","handleIndexFrame","pauseIngestion","resumeIngestion","oldVideoSources","integrateIndexFrame","resubscribe","updateVideoAvailability","handleIndexVideosPausedAtSource","handleSupportedVideoReceiveCodecIntersection","newVideoSources","areVideoSourcesEqual","remoteVideoSourcesDidChange","compare","videoSourceA","videoSourceB","localeCompare","sortedOldVideoSources","sortedNewVideoSources","shouldResubscribe","videoAvailability","videoAvailabilityDidChange","newMeetingSupportedVideoSendCodecPreferences","willNeedUpdate","signaledCapability","fromSignaled","firstMatchingCodecPreference","prioritizedCapability","setMeetingSupportedVideoSendCodecs","streamsPausedAtSource","ReceiveVideoStreamIndexTask$1","SendAndReceiveDataMessagesTask_1","SendAndReceiveDataMessagesTask","sendDataMessageHandler","uint8Data","TextEncoder","validateDataMessage","TOPIC_REGEX","DATA_SIZE","SendAndReceiveDataMessagesTask$1","SerialGroupTask_1","SerialGroupTask","tasksToRunSerially","currentTask","SerialGroupTask$1","SetLocalDescriptionTask_1","SetLocalDescriptionTask","wantsVideoDependencyDescriptorRtpHeaderExtension","audioPayloadMap","setAudioPayloadTypes","setLocalDescription","SetLocalDescriptionTask$1","SetRemoteDescriptionTask_1","SetRemoteDescriptionTask","cancelICEPromise","contentHint","remoteDescription","createICEConnectionCompletedPromise","checkConnectionCompleted","setRemoteDescription","SetRemoteDescriptionTask$1","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","STORED_BLOCK","STATIC_TREES","DYN_TREES","MIN_MATCH","MAX_MATCH","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","zero$1","static_dtree","_dist_code","_length_code","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","w","pending_buf","send_bits","bi_valid","bi_buf","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","stree","extra","h","xbits","overflow","bl_count","heap","heap_max","opt_len","static_len","gen_codes","next_code","tr_static_init","init_block","dyn_ltree","dyn_dtree","bl_tree","sym_next","bi_windup","smaller","depth","_n2","_m2","pqdownheap","heap_len","compress_block","ltree","dtree","lc","sx","sym_buf","build_tree","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","send_all_trees","lcodes","dcodes","blcodes","rank","detect_data_type","block_mask","static_init_done","_tr_init","_tr_stored_block","stored_len","last","_tr_align","_tr_flush_block","opt_lenb","static_lenb","strm","data_type","strategy","_tr_tally","sym_end","trees","adler32","adler","adler32_1","makeTable","table","crcTable","crc32","crc","crc32_1","constants","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_DEFAULT_STRATEGY","Z_DEFLATED","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","GZIP_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","slide_hash","wsize","w_size","hash_size","prev","HASH_ZLIB","hash_shift","hash_mask","HASH","flush_pending","avail_out","pending_out","next_out","total_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","avail_in","next_in","wrap","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","insert","ins_h","deflate_stored","flush","left","have","min_block","pending_buf_size","used","high_water","deflate_fast","hash_head","bflush","match_length","max_lazy_match","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","configuration_table","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","lit_bufsize","deflateStateCheck","deflateResetKeep","deflateReset","ret","deflateSetHeader","deflateInit2","windowBits","memLevel","deflateInit","deflate","old_flush","header","level_flags","hcrc","comment","time","beg","gzhead_extra","bstate","deflateEnd","deflateSetDictionary","dictionary","dictLength","tmpDict","avail","deflate$3","deflateInfo","_has","common","flattenChunks","chunks","STR_APPLY_UIA_OK","__","_utf8len","strings","string2buf","m_pos","str_len","buf_len","buf2binstring","ZStream","buf2string","out","utf16buf","c_len","utf8border","zstream","zlib_deflate","utils","Deflate","chunkSize","opt","gzip","ended","dict","_dict_set","deflator","deflateRaw","Deflate$1","flush_mode","_flush_mode","onData","onEnd","deflate$4","BAD","inffast","_in","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","MAXBITS","ENOUGH_LENS","ENOUGH_DISTS","CODES","LENS","DISTS","lbase","lext","dbase","dext","inflate_table","lens","lens_index","codes","table_index","opts","incr","fill","sym","root","curr","drop","huff","offs","here_bits","here_op","here_val","inftrees","inflate_fast","HEAD","FLAGS","TIME","EXLEN","EXTRA","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","DEF_WBITS","zswap32","InflateState","havedict","check","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","inflateStateCheck","inflateResetKeep","Int32Array","inflateReset","inflateReset2","inflateInit2","inflateInit","virgin","lenfix","distfix","fixedtables","updatewindow","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","GZheader","inflate$3","inflateInfo","gzheader","zlib_inflate","Inflate","inflator","inflateRaw","Inflate$1","last_avail_out","next_out_utf8","utf8str","inflate$4","ungzip","pako$1","ZLIBTextCompressor_1","pako","ZLIBTextCompressor","compress","dictionarySize","MAX_DICTIONARY_SIZE","Z_MEM_LEVEL","decompress","compressedText","decompressedText","ex","ZLIBTextCompressor$1","SignalingClientSubscribe_1","SignalingClientSubscribe","SignalingClientSubscribe$1","VideoPreferences_1","VideoPreferences","MutableVideoPreferences","convertVideoPreferencesToSignalingClientVideoSubscriptionConfiguration","receiveGroupIds","getMidForGroupId","configurations","attendeeIdToMid","attendeeIdToGroupId","MAX_SAFE_INTEGER","targetSizeToBitrateKbps","targetSize","degradationPreference","VideoPreferences$1","ObjectSet","Symbol","iterator","first","replaceFirst","newItem","isEmpty","partialCompare","modify","SetBuilder","copied","cow","pref","newPref","highestPriority","sorted","videoPreferences","prepare","SubscribeAndReceiveSubscribeAckTask_1","SubscribeAndReceiveSubscribeAckTask","textCompressor","localSdp","maxEncodeBitrateKbps","captureFrameRate","encodeBitrates","param","maxBitrate","maxFramerate","subscribeFrameSent","fixUpSubscriptionOrder","isSendingStreams","compressedSDPOffer","localSdpOffer","prevOffer","localStreamDescriptions","getVideoPreferences","groupIdForStreamId","subscribeAckFrame","receiveSubscribeAck","integrateSubscribeAckFrame","getMidForStreamId","midsToStreamIds","newSubscriptions","SUBSCRIBE_ACK","subackFrame","SubscribeAndReceiveSubscribeAckTask$1","TimeoutTask_1","TimeoutTask","taskToRunBeforeTimeout","TimeoutTask$1","WaitForAttendeePresenceTask_1","WaitForAttendeePresenceTask","_externalUserId","_dropped","_pos","WaitForAttendeePresenceTask$1","RedundantAudioEncoder_1","RedundantAudioEncoder","maxRedPacketSizeBytes","maxAudioPayloadSizeBytes","maxRedTimestampOffset","redHeaderSizeBytes","redLastHeaderSizeBytes","redPacketizationTime","redPacketDistance","maxRedEncodings","redMaxRecoveryDistance","maxEncodingHistorySize","numRedundantEncodings","redundancyEnabled","lossReportInterval","maxOutOfOrderPacketDistance","OPUS_BAD_ARG","OPUS_INVALID_PACKET","OPUS_MAX_OPUS_FRAMES","OPUS_MAX_FRAME_SIZE_BYTES","encodingHistory","opusPayloadType","redPayloadType","initializePacketLogs","encoder","RTCRtpScriptTransformer","onrtctransform","transformer","setupSenderTransform","readable","setupReceiverTransform","setupPassthroughTransform","msgType","receive","setRedPayloadType","setOpusPayloadType","setNumRedundantEncodings","setRedundancyEnabled","shouldLog","packetLoss","recommendedRedundantEncodings","shouldTurnOffRed","pipeTo","TransformStream","senderTransform","pipeThrough","receivePacketLogTransform","enqueueAudioFrameIfPayloadSizeIsValid","controller","enqueue","getMetadata","primaryPayloadBuffer","getPrimaryPayload","encodedBuffer","primaryTimestamp","encodings","splitEncodings","getFecInfo","primarySequenceNumber","payloadSizeBytes","totalPayloadSizeBytes","totalHeaderSizeBytes","primaryPayloadSizeBytes","payloadOffset","gotLastBlock","redundantEncodingBlockLengths","redundantEncodingTimestamps","getUint8","blockLength","getUint16","redundantPayloadOffset","redundantPayloadBuffer","ArrayBuffer","isRedundant","hasFec","opusPacketHasFec","primaryPayloadOffset","seq","primaryPayload","primaryPayloadSize","headerSizeBytes","bytesAvailable","redundantEncodingPayloads","redundantTimestamp","uint32WrapAround","findTimestamp","redundantEncodingSizeBytes","redPayloadBuffer","redPayloadView","redPayloadOffset","timestampDelta","setUint8","setUint16","redPayloadArray","updateEncodingHistory","maxTimestampDelta","packet","opusPacketIsCeltOnly","opusPacketHasVoiceActivity","packetLogSize","primaryPacketLog","windowSize","redRecoveryLog","fecRecoveryLog","frameMetadata","sequenceNumber","updateLossStats","updateRedStats","updateFecStats","maybeReportLossStats","synchronizationSource","newestSequenceNumber","addTimestamp","int16","hasTimestamp","removeFromRecoveryWindows","removeTimestamp","fecTimestamp","lastLossReportTimestamp","shouldReportStats","packetLog","opusPacketGetSamplesPerFrame","sampleRateHz","numSamples","frameSizeOption","opusNumSilkFrames","frameLengthMs","opusPacketGetNumChannels","opusParseSize","byteOffset","remainingBytes","sizeBytes","opusPacketParseImpl","lenBytes","selfDelimited","tocByte","frameOffsets","frameSizes","packetLenBytes","numFrames","numBytesParsed","paddingBytes","cbr","toc","lastSizeBytes","frameCountByte","paddingCountByte","numPaddingBytes","opusPacketParse","numSilkFrames","opusFrameOffsets","opusFrameSizes","numOpusFrames","RedundantAudioEncoder$1","RedundantAudioEncoderWorkerCode_1","RedundantAudioEncoderWorkerCode","RedundantAudioEncoderWorkerCode$1","DefaultTransceiverController_1","DefaultTransceiverController","meetingSessionContext","_localCameraTransceiver","_localAudioTransceiver","defaultMediaStream","streamIdToTransceiver","groupIdToTransceiver","audioRedWorker","audioRedWorkerURL","audioMetricsHistory","redMetricsObservers","currentNumRedundantEncodings","lastRedHolddownTimerStartTimestampMs","lastHighPacketLossEventTimestampMs","lastAudioRedTurnOffTimestampMs","maxAudioMetricsHistory","audioRedPacketLossShortEvalPeriodMs","audioRedPacketLossLongEvalPeriodMs","audioRedHoldDownTimeMs","redRecoveryTimeMs","encodingParamMap","sender","newEncodingParams","oldParam","getParameters","existing","setParameters","localVideoTransceiver","setVideoSendingBitrateKbps","encodeParam","destroyAudioRedWorkerAndStates","getTransceivers","setupAudioRedWorker","replaceAudioTrack","replaceTrack","setTransceiverInput","transceivers","updateTransceivers","debugDumpTransceivers","videosRemaining","updateTransceiverWithStop","updateTransceiverWithoutStop","transceiverIsVideo","reusingTranceiver","recvStreamId","StreamIdsInSameGroup","previousTransceiver","setStreamIdForMid","newStreamId","forEachRedMetricsObserver","redMetricReport","disableAudioRedundancy","setAudioProfile","supportsRTCScriptTransform","RTCRtpScriptTransform","supportsInsertableStreams","createEncodedStreams","audioRedEnabled","receiveStreams","addRedundantAudioRecoveryMetricsObserver","trackOrKind","getConfiguration","removeRedundantAudioRecoveryMetricsObserver","receiverReportReceptionTimestampMs","currentTotalPacketsSent","currentTotalPacketsLost","totalPacketsSent","totalPacketsLost","lossPercent5sTimewindow","lossPercent","lossPercent15sTimewindow","maxLossPercent","newNumRedundantEncodings","getNumRedundantEncodingsForPacketLoss","timeSinceRedOff","timeSinceLastHighPacketLossEvent","maybeResetHoldDownTimer","shouldUpdateAudioRedWorkerEncodings","timeWindowMs","latestReceiverReportTimestampMs","DefaultTransceiverController$1","SimulcastTransceiverController_1","SimulcastTransceiverController","videoQualityControlParameterMap","NAME_ARR_ASCENDING","ridName","scaleResolutionDownBy","BITRATE_ARR_ASCENDING","LOW_LEVEL_NAME","copyEncodingParams","MID_LEVEL_NAME","HIGH_LEVEL_NAME","logVideoTransceiverParameters","_bitrateKbps","sendEncodings","fromEncodingParams","toEncodingParams","SimulcastTransceiverController$1","SimulcastContentShareTransceiverController_1","SimulcastContentShareTransceiverController","SimulcastContentShareTransceiverController$1","VideoOnlyTransceiverController_1","VideoOnlyTransceiverController","VideoOnlyTransceiverController$1","DefaultVideoCaptureAndEncodeParameter_1","DefaultVideoCaptureAndEncodeParameter","cameraWidth","cameraHeight","cameraFrameRate","isSimulcast","isSVC","checkForEqual","captureWidth","captureHeight","encodeScaleResolutionDownBy","encodeWidths","encodeHeights","isSVCEncoding","DefaultVideoCaptureAndEncodeParameter$1","TargetDisplaySize","VideoPreference_1","TargetDisplaySize_1","VideoPreference","Maximum","MAXIMUM_BITRATE_KBPS","HIGH_BITRATE_KBPS","MID_BITRATE_KBPS","LOW_BITRATE_KBPS","VideoPreference$1","VideoSource_1","VideoSource","VideoSource$1","VideoPriorityBasedPolicyConfig_1","VideoPriorityBasedPolicyConfig","networkIssueResponseDelayFactor","networkIssueRecoveryDelayFactor","currentNetworkEvent","bandwidthDecreaseTimestamp","referenceBitrate","allowSubscribe","numberOfParticipants","currentEstimated","timeBeforeAllowSubscribeMs","previousNetworkEvent","getSubscribeDelay","subscribeDelay","MINIMUM_DELAY_MS","MAXIMUM_DELAY_MS","responseFactor","VideoPriorityBasedPolicyConfig$1","UnstableNetworkPreset","StableNetworkPreset","VideoPriorityBasedPolicy_1","LinkMediaStats","bandwidthEstimateKbps","usedBandwidthKbps","rttMs","VideoPriorityBasedPolicy","videoPriorityBasedPolicyConfig","shouldPauseTiles","pausedBwAttendeeIds","wantsResubscribeObserver","allHighestPolicy","optimalReceiveStreams","optimalNonPausedReceiveStreams","subscribedReceiveStreams","defaultVideoPreferences","pausedStreamIds","videoPreferencesUpdated","logCount","startupPeriod","usingPrevTargetRate","rateProbeState","firstEstimateTimestamp","lastUpgradeRateKbps","MIN_TIME_BETWEEN_SUBSCRIBE_MS","lastProbeTimestamp","timeBeforeAllowProbeMs","MIN_TIME_BETWEEN_PROBE_MS","downlinkStats","prevDownlinkStats","probeFailed","pendingActionAfterUpdatedPreferences","setWantsResubscribeObserver","desiredVideoSources","updateDefaultVideoPreferences","prefs","numAttendees","targetDisplaySize","ssrcStr","wants","lastSubscribeTimestamp","setVideoPriorityBasedPolicyConfigs","calculateOptimalReceiveStreams","chosenStreams","lastProbeState","cleanBwPausedTiles","handleAppPausedStreams","attendeeIdToPreference","getCurrentVideoPreferences","remoteInfosWithPreference","sameStreamChoices","streamsWithPreferenceDidChange","noMajorChange","avgBitrateKbps","endsWith","streamIdsToRemove","streamsForAttendees","lastInfo","maxPixels","totalPixels","framerateExponentConstant","resolutionBaseConstant","weighByFramerate","filteredRemoteAttendeesWithPreference","rates","targetDownlinkBitrate","chosenTotalBitrate","deltaToNextUpgrade","determineTargetRate","dontAllowSubscribe","upgradeStream","priorityPolicy","subscriptionChoice","setProbeState","handleProbe","maybeOverrideOrProbe","previousStreamsWithPreference","prevTargetRateKbps","subscribedRate","calculateSubscribeRate","preProbeNonPausedReceiveStreams","preProbeReceiveStreams","processBwPausedStreams","lastNumberPaused","policyStateLogStr","targetBitrate","DEFAULT_BANDWIDTH_KBPS","STARTUP_PERIOD_MS","SPURIOUS_PACKET_LOST_THRESHOLD","USED_BANDWIDTH_OVERRIDE_BUFFER_KBPS","LARGE_RATE_CHANGE_TRIGGER_PERCENT","probePendingStartTimestamp","MAX_HOLD_BEFORE_PROBE_MS","upgradeToStream","diffRate","MAX_ALLOWED_PROBE_TIME_MS","chosenStreamsSameAsLast","sameSubscriptions","useLastSubscriptions","triggerPercent","LOW_BITRATE_THRESHOLD_KBPS","TARGET_RATE_CHANGE_TRIGGER_PERCENT","minTargetBitrateDelta","targetRateBaselineForDeltaCheckKbps","subscribeRate","remoteTiles","getAllRemoteVideoTiles","videoTiles","videoTile","unpauseVideoTile","streamExists","pauseVideoTile","newTile","nextPriority","increaseKbps","hasSimulcastStreams","canUpgrade","targetResolution","streamCount","prevInfo","lastStream","probeState","remoteInfoStr","logString","VideoPriorityBasedPolicy$1","VideoAdaptiveProbePolicy_1","VideoAdaptiveProbePolicy","newPreferences","containsContent","_preferences","VideoAdaptiveProbePolicy$1","VideoStreamDescription_1","VideoStreamDescription","timeEnabled","disabledByWebRTC","disabledByUplinkPolicy","newInfo","descriptor","VideoStreamDescription$1","DefaultVideoStreamIndex_1","DefaultVideoStreamIndex","currentIndex","indexForSubscribe","currentSubscribeAck","subscribeTrackToStreamMap","subscribeStreamToAttendeeMap","subscribeStreamToExternalUserIdMap","subscribeSsrcToStreamMap","subscribeSsrcToGroupMap","streamToAttendeeMap","groupIdToAttendeeMap","streamToExternalUserIdMap","videoStreamDescription","sendVideoStreamId","convertBpsToKbps","streamInfos","attendeeIdToMainGroupIdMap","attendeeWithMultipleGroupIdsExists","currentGroupId","subscribeAck","buildTrackToStreamMap","buildSSRCToStreamMap","buildSSRCToGroupMap","buildStreamToAttendeeMap","buildStreamExternalUserIdMap","bitrate","attendeeSet","streamSelectionUnderBandwidthConstraint","largeTileAttendeeIds","smallTileAttendeeIds","bandwidthKbps","newAttendees","attendeeToStreamDescriptorMap","buildAttendeeToSortedStreamDescriptorMapExcludingSelf","selectionMap","usage","trySelectHighBitrateForAttendees","maxes","numberOfVideoPublishingParticipantsExcludingSelf","buildGroupIdToAttendeeMap","streamId1","streamId2","ssrcId","overrideStreamIdMappings","current","_rid","trackMapping","highAttendees","currentUsage","currentSelectionRef","reverse","_attendeeId","stream1","stream2","DefaultVideoStreamIndex$1","SimulcastVideoStreamIndex_1","SimulcastVideoStreamIndex","streamIdToBitrateKbpsMap","_localStreamInfos","_sendRidToVideoStreamIdMap","clonedDescriptions","hasStreamsToReuse","localStreamIndex","targetMaxBitrateKbps","targetMaxFrameRate","stillSending","existingSet","bitrateMsg","UNSEEN_STREAM_BITRATE","RECENTLY_INACTIVE_STREAM_BITRATE","NOT_SENDING_STREAM_BITRATE","logLocalStreamDescriptions","newIndexStreamIdSet","localStreamStartIndex","allocation","SimulcastVideoStreamIndex$1","BitratesMsgFrequencyMs","DefaultDevicePixelRatioMonitor_1","DefaultDevicePixelRatioMonitor","devicePixelRatioSource","mediaQueryListener","tileObserver","mediaQueryList","matchMedia","addListener","removeListener","DefaultDevicePixelRatioMonitor$1","DevicePixelRatioWindowSource_1","DevicePixelRatioWindowSource","DevicePixelRatioWindowSource$1","DefaultVideoTileController_1","DefaultVideoTileController","tileFactory","tileMap","nextTileId","currentLocalTile","currentPausedTilesByIds","createDevicePixelRatioMonitorIfNeeded","discardDevicePixelRatioMonitorIfNotNeeded","monitor","getVideoTile","unbindVideoElement","cleanUpVideoElement","startLocalVideoTile","findOrCreateLocalVideoTile","removeLocalVideoTile","pauseReceivingStream","resumeReceivingStream","getVideoTileArea","tileHeight","tileWidth","makeTile","videoTileWasRemoved","removeVideoTilesByAttendeeId","tilesRemoved","tileIds","captureVideoTile","DefaultVideoTileController$1","DefaultVideoTileFactory_1","DefaultVideoTileFactory","DefaultVideoTileFactory$1","SimulcastLayers","DefaultSimulcastUplinkPolicy_1","SimulcastLayers_1","DefaultSimulcastUplinkPolicy","numSenders","shouldDisableSimulcast","newQualityMap","currentQualityMap","newActiveStreams","hiTargetBitrateKbps","kHiTargetBitrateKbpsHd","midTargetBitrateKbps","kMidTargetBitrateKbpsHd","lowTargetBitrateKbps","kLowTargetBitrateKbpsHd","enableFhdVideo","optimalParameters","parametersInEffect","fillEncodingParamWithBitrates","_metrics","calculateEncodingParameters","newBitrates","_i","encodingParametersEqual","getQualityMapString","chooseMediaTrackConstraints","activeStreamsToPublish","publishEncodingSimulcastLayer","numSendersChanged","newShouldDisableSimulcast","shouldDisableSimulcastChanged","maxBandwidthKbps","compareEncodingParameter","encoding1","encoding2","different","setIdealMaxBandwidthKbps","_idealMaxBandwidthKbps","setHasBandwidthPriority","_hasBandwidthPriority","setHighResolutionFeatureEnabled","kHiTargetBitrateKbpsFhd","kMidTargetBitrateKbpsFhd","kLowTargetBitrateKbpsFhd","bitratesKbps","newMap","nameArr","bitrateArr","qualityString","getEncodingSimulcastLayer","activeStreams","LowAndHigh","LowAndMedium","simulcastLayers","encodingSimulcastLayersDidChange","DefaultSimulcastUplinkPolicy$1","NScaleVideoUplinkBandwidthPolicy_1","NScaleVideoUplinkBandwidthPolicy","scaleResolution","numberOfPublishedVideoSources","idealMaxBandwidthKbps","enableHighResolutionFeature","isUsingSVCCodec","encodingMapKey","hasLocalVideo","updateOptimalParameters","getStreamCaptureSetting","getNumberOfPublishedVideoSources","rate","setSVCEnabled","updateTransceiverController","shouldUpdateEndcodingParameters","transceiverEncoding","scalabilityMode","setting","targetHeight","targetHeightArray","SVCCodecNames","NScaleVideoUplinkBandwidthPolicy$1","DefaultVolumeIndicatorAdapter_1","DefaultVolumeIndicatorAdapter","minVolumeDecibels","maxVolumeDecibels","streamIdToAttendeeId","streamIdToExternalUserId","warnedAboutMissingStreamIdMapping","attendeeIdToStreamId","sessionReconnected","onReconnect","streamIndex","hasAttendeeId","hasExternalUserId","hasMuted","hasDropped","attendeeIndex","attendeesInFrame","attendeeHasNewStreamId","otherStreamId","otherStreamIdNumber","cleanUpState","localAttendeeIds","remoteAttendeeIds","deletedAttendeeIds","deletedAttendeeId","metadata","signalStrengths","normalizedVolume","normalizedSignalStrength","applyRealtimeUpdatesForAudioMetadata","normalized","MAX_SIGNAL_STRENGTH_LEVELS","volumeUpdate","signalStrengthUpdate","IMPLICIT_VOLUME","IMPLICIT_SIGNAL_STRENGTH","DefaultAudioVideoController_1","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","ReceiveRemoteVideoPauseResumeTask_1","require$$38","require$$39","require$$40","require$$41","require$$42","require$$43","require$$44","require$$45","require$$46","require$$47","require$$48","require$$49","require$$50","require$$51","require$$52","require$$53","require$$54","require$$55","require$$56","require$$57","require$$58","require$$59","require$$60","require$$61","require$$62","require$$63","require$$64","AudioVideoControllerState_1","require$$65","DefaultAudioVideoController$1","DefaultAudioVideoController","webSocketAdapter","_audioProfile","useUpdateTransceiverControllerForUplink","totalRetryCount","mayNeedRenegotiationForSimulcastLayerChange","promotedToPrimaryMeeting","hasGetRTCPeerConnectionStatsDeprecationMessageBeenSent","receiveIndexTask","monitorTask","_logger","sessionStateController","_configuration","_webSocketAdapter","_realtimeController","_mediaStreamBroker","_reconnectController","_videoTileController","_audioMixController","_eventController","activeSpeakerDetector","_activeSpeakerDetector","handleHasBandwidthPriority","getRTCPeerConnectionStats","selector","initSignalingClient","uninstallPreStartObserver","preStartObserver","prestart","createOrReuseSignalingTask","handleClosed","signalingTask","startReturningPromise","signalingOnly","actionConnect","connectWithPromises","needsToWaitForAttendeePresence","receiveAudioInput","signaling","createPeerConnection","attachMediaInput","createSDP","ice","receivePauseResume","wrapTaskName","timeout","attendeePresenceTimeoutMs","enableSimulcastForUnifiedPlanChromiumBasedBrowsers","useAudioConnection","MIN_VOLUME_DECIBELS","MAX_VOLUME_DECIBELS","simulcastPolicy","enableUhdContent","setVideoMaxBandwidthKbps","maxUplinkBandwidthKbps","PING_PONG_INTERVAL_MS","hasStartedConnectionAttempt","startedConnectionAttempt","retryCount","actionFinishConnecting","getMeetingStatusCode","actionDisconnect","notifyStop","enforceBandwidthLimitationForSender","stopReturningPromise","cleanUpMediaStreamsAfterStop","disableReconnect","stopError","subtasks","cleanError","updateRemoteVideosFromPolicy","updateLocalVideoFromPolicy","actionFinishUpdating","actionUpdateWithRenegotiation","sendRemoteVideoUpdate","isNotAddingOrRemovingStreams","updateRemoteVideosIfNotAddingOrRemovingStreams","streamChanges","detectChangesInVideosToReceive","simulcastStreamUpdates","updatedVideoSubscriptionConfigurations","currentId","updatedConfig","foundUpdatedPreviousStreamId","idFromPrevious","stillReceiving","isUpdated","groupIdsToReceive","currentConfigs","newVideoSubscriptionConfigurationsMap","shouldIncludeInUpdate","lastConfig","removedMids","groupIdsToReceiveSet","negotiatedBitrateLayersAllocationRtpHeaderExtension","parameters","headerExtensions","extension","restartLocalVideo","restartVideo","replaceLocalVideo","replaceLocalAudio","notify","audioVideoWasDemotedFromPrimaryMeeting","meetingStatus","meetingErrorMessage","reconnect","willRetry","retryWithBackoff","actionReconnect","videoSendDidBecomeUnavailable","oldMaxBandwidth","newMaxBandwidth","setVideoCodecSendPreferences","getRemoteVideoSources","actionPromoteToPrimaryMeeting","resultingStatus","DefaultVolumeIndicatorAdapter$1","DefaultAudioVideoFacade_1","DefaultAudioVideoFacade","deviceController","contentShareController","videoElementId","subscribeToActiveSpeakerDetector","unsubscribeFromActiveSpeakerDetector","setContentAudioProfile","enableSimulcastForContentShare","enableSVCForContentShare","startContentShare","startContentShareFromScreenCapture","pauseContentShare","unpauseContentShare","stopContentShare","addContentShareObserver","removeContentShareObserver","setContentShareVideoCodecPreferences","DefaultAudioVideoFacade$1","MeetingFeatures_1","MeetingFeatures","MeetingFeatures$1","MeetingSessionCredentials_1","MeetingSessionCredentials","MeetingSessionCredentials$1","MeetingSessionURLs_1","MeetingSessionURLs","_audioHostURL","_signalingURL","_turnControlURL","_eventIngestionURL","turnControlURL","eventIngestionURL","MeetingSessionURLs$1","MeetingSessionConfiguration_1","MeetingSessionConfiguration","createMeetingResponse","createAttendeeResponse","externalMeetingId","reconnectTimeoutMs","reconnectFixedWaitMs","reconnectShortBackOffMs","reconnectLongBackOffMs","meeting","meetingid","externalmeetingid","mediaplacement","audiohosturl","signalingurl","turncontrolurl","eventingestionurl","parseVideoResolution","resolution","defaultValue","meetingfeatures","maxresolution","attendeeid","externaluserid","jointoken","MeetingSessionConfiguration$1","NoVideoDownlinkBandwidthPolicy_1","NoVideoDownlinkBandwidthPolicy","_videoIndex","NoVideoDownlinkBandwidthPolicy$1","DefaultSimulcastUplinkPolicyForContentShare_1","DefaultSimulcastUplinkPolicyForContentShare","defaultHiTargetBitrateKbps","defaultLowTargetBitrateKbps","_e","_g","_h","_j","_k","_l","_m","_observerFunc","DefaultSimulcastUplinkPolicyForContentShare$1","DefaultContentShareController_1","DefaultContentShareController","contentAudioVideo","attendeeAudioVideo","setupContentShareEvents","contentShareConfiguration","forEachContentShareObserver","contentShareDidPause","contentShareDidUnpause","_sessionStatus","contentShareTile","contentShareDidStop","isSelfAttendee","contentShareDidStart","DefaultContentShareController$1","isDestroyable","Destroyable","EventBufferConfiguration_1","EventBufferConfiguration","flushIntervalMs","flushSize","maxBufferCapacityKb","totalBufferItems","retryCountLimit","EventBufferConfiguration$1","EventIngestionConfiguration_1","EventIngestionConfiguration","eventsClientConfiguration","ingestionURL","eventBufferConfiguration","EventIngestionConfiguration$1","FullJitterBackoff_1","FullJitterBackoff","fixedWaitMs","shortBackoffMs","longBackoffMs","currentRetry","nextBackoffAmountMs","fullJitterMs","FullJitterBackoff$1","DefaultUserAgentParser_1","DefaultUserAgentParser","parserResult","browserMajorVersion","UNAVAILABLE","browserVersion","deviceName","vendor","getParserResult","osName","osVersion","DefaultUserAgentParser$1","__rest","getOwnPropertySymbols","propertyIsEnumerable","InMemoryJSONEventBuffer_1","InMemoryJSONEventBuffer","importantEvents","bufferSize","maxBufferItemCapacityBytes","ingestionEventSize","failedIngestionEvents","lock","cancellableEvents","attributesToFilter","deepCopyCurrentIngestionEvent","payloads","sendEvents","batch","getItems","body","makeRequestBody","failed","userAgentParserResult","clientMetadata","rest","authenticationToken","getAuthenticationToken","maxBufferCapacityBytes","currentIngestionEvent","initializeAndGetCurrentIngestionEvent","beaconEventListener","beaconEventHandler","addEventListeners","visibilityState","sendBeacon","removeEventListeners","addItem","ts","filteredAttributes","filterAttributes","getSize","MAX_ITEM_SIZE_BYTES_ALLOWED","sendEventImmediately","isFull","bufferItemThresholdReached","currentEvent","attributesToFilterSet","bufferItem","MAX_PAYLOAD_ITEMS","getPrimitiveSize","makeBeaconRequestBody","batchEvents","ingestionRecord","authorization","backoff","RETRY_FIXED_BACKOFF_WAIT_MS","RETRY_SHORT_BACKOFF_MS","RETRY_LONG_BACKOFF_MS","Authorization","SENDING_FAILURE_CODES","backoffTime","clearCurrenIngestionEvent","failedRecordsCopy","record","beaconData","InMemoryJSONEventBuffer$1","DefaultMeetingEventReporter_1","Destroyable_1","DefaultMeetingEventReporter","eventIngestionConfiguration","reportingEvents","eventsToIgnore","eventBuffer","DefaultMeetingEventReporter$1","MeetingEventsClientConfiguration_1","MeetingEventsClientConfiguration","MeetingEventsClientConfiguration$1","flattenEventAttributes_1","flattenEventAttributes","flattenedAttributes","flattenEventAttributes$1","DefaultEventController_1","DefaultEventController","eventReporter","meetingHistoryStates","observerSet","setupEventReporter","eventAttributes","getAttributes","eventDidReceive","_eventReporter","meetingEventsClientConfiguration","meetingHistory","DefaultEventController$1","MeetingReadinessCheckerConfiguration_1","MeetingReadinessCheckerConfiguration","waitDurationMs","audioOutputFrequency","audioOutputGain","MeetingReadinessCheckerConfiguration$1","DefaultMeetingReadinessChecker_1","CheckAudioConnectivityFeedback_1","CheckAudioInputFeedback_1","CheckAudioOutputFeedback_1","CheckCameraResolutionFeedback_1","CheckContentShareConnectivityFeedback_1","CheckNetworkTCPConnectivityFeedback_1","CheckNetworkUDPConnectivityFeedback_1","CheckVideoConnectivityFeedback_1","CheckVideoInputFeedback_1","DefaultMeetingReadinessChecker","meetingSession","checkAudioInput","audioInputDevice","audioVideo","Succeeded","PermissionDenied","Failed","checkAudioOutput","audioOutputDeviceInfo","audioOutputVerificationCallback","playTone","stopTone","maxGainValue","destinationStream","currentTime","linearRampToValueAtTime","Audio","rampSec","checkVideoInput","videoInputDevice","checkCameraResolution","videoInputDeviceId","videoConstraint","calculateVideoConstraint","ResolutionNotSupported","checkContentShareConnectivity","isContentShareStarted","isAudioVideoStarted","contentShareObserver","executeTimeoutTask","stopMeeting","TimedOut","ConnectionFailed","checkAudioConnectivity","audioPresence","audioConnectivityMetrics","checkAudioConnectivityMetricsObserver","attendeePresenceHandler","AudioInputPermissionDenied","AudioInputRequestFailed","startMeeting","isAudioConnectionSuccessful","AudioNotReceived","checkVideoConnectivity","VideoInputPermissionDenied","VideoInputRequestFailed","VideoNotSent","checkNetworkUDPConnectivity","candidatePairSucceed","originalURLRewriter","MeetingSessionURLsNotInitialized","transformedUri","ICENegotiationFailed","checkNetworkTCPConnectivity","isStarted","isStopped","conditionCheck","isSuccess","CheckForConditionTask","isCancelled","timeoutTask","DefaultMeetingReadinessChecker$1","DefaultReconnectController_1","DefaultReconnectController","backoffPolicy","shouldReconnect","onlyRestartPeerConnection","firstConnectionAttempted","firstConnectionAttemptTimestampMs","lastActiveTimestampMs","_isFirstConnection","backoffTimer","backoffCancel","timeSpentReconnectingMs","hasPastReconnectDeadline","isFirstConnection","enableRestartPeerConnection","retryFunc","cancelFunc","shouldOnlyRestartPeerConnection","DefaultReconnectController$1","DefaultWebSocketAdapter_1","DefaultWebSocketAdapter","isSignedUrl","connection","WebSocket","binaryType","eventListener","CONNECTING","OPEN","CLOSING","Closing","CLOSED","DefaultMeetingSession_1","checkBrowserSupportAndFeatureConfiguration","addLogger","register","_deviceController","contentShareMediaStreamBroker","createContentShareMeetingSessionConfigure","audioVideoFacade","contentShare","removeLogger","isSimulcastUplinkPolicy","DefaultWebSocketAdapter$1","getHttpHandlerExtensionConfiguration","runtimeConfig","httpHandler","setHttpHandler","updateHttpClientConfig","httpHandlerConfigs","resolveHttpHandlerRuntimeConfig","httpHandlerExtensionConfiguration","HttpAuthLocation","HttpApiKeyAuthLocation","EndpointURLScheme","AlgorithmId","FieldPosition","SMITHY_CONTEXT_KEY","IniSectionType","RequestHandlerProtocol","HttpRequest","hostname","port","query","protocol","fragment","req","cloneQuery","carry","paramName","HttpResponse","resp","resolveHostHeaderConfig","hostHeaderMiddleware","async","isInstance","handlerProtocol","requestHandler","host","hostHeaderMiddlewareOptions","tags","override","getHostHeaderPlugin","applyToStack","clientStack","loggerMiddleware","clientName","commandName","dynamoDbDocumentClientOptions","overrideInputFilterSensitiveLog","overrideOutputFilterSensitiveLog","inputFilterSensitiveLog","outputFilterSensitiveLog","$metadata","outputWithoutMetadata","loggerMiddlewareOptions","getLoggerPlugin","TRACE_ID_HEADER_NAME","ENV_LAMBDA_FUNCTION_NAME","ENV_TRACE_ID","recursionDetectionMiddleware","runtime","functionName","env","traceId","nonEmptyString","addRecursionDetectionMiddlewareOptions","getRecursionDetectionPlugin","memoize","provider","isExpired","requiresRefresh","resolved","hasResult","isConstant","coalesceProvider","forceRefresh","extendStatics","setPrototypeOf","__proto__","__extends","__assign","__decorate","decorators","r","getOwnPropertyDescriptor","decorate","__param","paramIndex","decorator","__metadata","metadataKey","metadataValue","__generator","g","sent","trys","ops","verb","throw","return","__exportStar","__values","__read","__spread","__spreadArrays","il","jl","__await","__asyncGenerator","asyncIterator","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","__classPrivateFieldGet","privateMap","__classPrivateFieldSet","fromUtf8","surrogatePair","toUtf8","decoded","byte","nextByte","encoded","byteValue","decodeURIComponent","textEncoderFromUtf8","jsFromUtf8","textEncoderToUtf8","jsToUtf8","convertToBuffer_1","convertToBuffer","util_utf8_browser_1","isView","BYTES_PER_ELEMENT","convertToBuffer$3","isEmptyData","isEmptyData_1","isEmptyData$4","numToUint8","numToUint8_1","numToUint8$3","uint32ArrayFrom","a_lookUpTable","return_array","a_index","uint32ArrayFrom_1","uint32ArrayFrom$3","aws_crc32","AwsCrc32","tslib_1","util_1","index_1","Crc32","digest","checksum","e_1","data_1","data_1_1","lookupTable","e_1_1","aws_crc32_1","SHORT_TO_HEX","HEX_TO_SHORT","encodedByte","fromHex","toHex","Int64","number","remaining","negate","valueOf","negative","HeaderMarshaller","format","headerName","formatHeaderValue","position","shortView","setInt16","intView","setInt32","longBytes","binView","binBytes","utf8Bytes","strView","strBytes","tsBytes","UUID_PATTERN","uuidBytes","nameLength","BOOLEAN_TAG","BYTE_TAG","getInt8","SHORT_TAG","getInt16","INT_TAG","getInt32","LONG_TAG","binaryLength","BINARY_TAG","stringLength","STRING_TAG","TIMESTAMP_TAG","UUID_TAG","HEADER_VALUE_TYPE","getSmithyContext","normalizeProvider","promisified","toUint8Array","ALGORITHM_QUERY_PARAM","CREDENTIAL_QUERY_PARAM","AMZ_DATE_QUERY_PARAM","SIGNED_HEADERS_QUERY_PARAM","EXPIRES_QUERY_PARAM","SIGNATURE_QUERY_PARAM","TOKEN_QUERY_PARAM","AUTH_HEADER","AMZ_DATE_HEADER","DATE_HEADER","GENERATED_HEADERS","SIGNATURE_HEADER","SHA256_HEADER","TOKEN_HEADER","ALWAYS_UNSIGNABLE_HEADERS","expect","pragma","referer","te","trailer","upgrade","PROXY_HEADER_PATTERN","SEC_HEADER_PATTERN","ALGORITHM_IDENTIFIER","EVENT_ALGORITHM_IDENTIFIER","UNSIGNED_PAYLOAD","MAX_CACHE_SIZE","KEY_TYPE_IDENTIFIER","MAX_PRESIGNED_TTL","signingKeyCache","cacheQueue","createScope","shortDate","region","getSigningKey","sha256Constructor","cacheKey","hmac","secretAccessKey","accessKeyId","sessionToken","signable","ctor","secret","getCanonicalHeaders","unsignableHeaders","signableHeaders","canonical","canonicalHeaderName","escapeUri","hexEncode","getCanonicalQuery","serialized","isArrayBuffer","arg","getPayloadHash","hashConstructor","hashCtor","hasHeader","soughtHeader","cloneRequest","moveHeadersToQuery","lname","unhoistableHeaders","prepareRequest","iso8601","toDate","SignatureV4","applyChecksum","sha256","uriEscapePath","headerMarshaller","regionProvider","credentialProvider","originalRequest","signingDate","expiresIn","signingRegion","signingService","validateResolvedCredentials","longDate","formatDate","canonicalHeaders","getCanonicalHeaderList","getSignature","createCanonicalRequest","toSign","signString","signEvent","signMessage","signRequest","priorSignature","hashedPayload","hashedHeaders","stringToSign","signableMessage","signature","requestToSign","payloadHash","sortedHeaders","getCanonicalPath","credentialScope","canonicalRequest","hashedRequest","normalizedPathSegments","pathSegment","normalizedPath","keyPromise","createStringToSign","CREDENTIAL_EXPIRE_WINDOW","resolveAwsAuthConfig","normalizedCreds","normalizeCredentialProvider","credentialDefaultProvider","signingEscapePath","systemClockOffset","signer","regionInfoProvider","useFipsEndpoint","useDualstackEndpoint","regionInfo","signingName","serviceId","signerConstructor","authScheme","defaultSigningName","expiration","getTime","getSkewCorrectedDate","isClockSkewed","clockTime","getUpdatedSystemClockOffset","currentSystemClockOffset","clockTimeInMs","awsAuthMiddleware","endpointV2","authSchemes","multiRegionOverride","signingRegionSet","signedRequest","signingOptions","s3ExpressIdentity","sigV4MultiRegion","signWithCredentials","serverTime","ServerTime","getDateHeader","$response","dateHeader","date","awsAuthMiddlewareOptions","relation","toMiddleware","getAwsAuthPlugin","addRelativeTo","resolveUserAgentConfig","customUserAgent","IP_V4_REGEX","isIpAddress","VALID_HOST_LABEL_REGEX","isValidHostLabel","allowSubDomains","labels","customEndpointFunctions","debugId","toDebugString","ref","argv","EndpointError","booleanEquals","value1","value2","getAttrPathList","pathList","part","squareBracketIndex","arrayIndex","getAttr","acc","not","DEFAULT_PORTS","HTTP","HTTPS","parseURL","whatwgURL","search","urlString","href","pathname","scheme","isIp","authority","stringEquals","uriEncode","endpointFunctions","evaluateTemplate","template","evaluatedTemplateArr","templateContext","endpointParams","referenceRecord","openingBraceIndex","closingBraceIndex","parameterName","refName","attrName","getReferenceValue","evaluateExpression","keyName","callFunction","evaluatedArgs","fnSegments","evaluateCondition","fnArgs","toAssign","evaluateConditions","conditions","conditionsReferenceRecord","getEndpointHeaders","headerKey","headerVal","headerValEntry","processedExpr","getEndpointProperty","propertyEntry","getEndpointProperties","propertyKey","propertyVal","getEndpointUrl","endpointUrl","expression","evaluateEndpointRule","endpointRule","endpoint","endpointRuleOptions","evaluateErrorRule","errorRule","evaluateTreeRule","treeRule","rules","evaluateRules","rule","endpointOrUndefined","resolveEndpoint","ruleSetObject","paramsWithDefault","paramKey","paramDefaultValue","requiredParams","required","requiredParam","Endpoint","givenEndpoint","isVirtualHostableS3Bucket","parseArn","segments","arn","partition","accountId","resourceId","selectedPartitionsInfo","partitionsInfo","partitions","regions","outputs","regionData","regionRegex","DEFAULT_PARTITION","awsEndpointFunctions","aws","USER_AGENT","X_AMZ_USER_AGENT","SPACE","UA_NAME_SEPARATOR","UA_NAME_ESCAPE_REGEX","UA_VALUE_ESCAPE_REGEX","UA_ESCAPE_CHAR","userAgentMiddleware","escapeUserAgent","defaultUserAgent","defaultUserAgentProvider","sdkUserAgentValue","normalUAValue","userAgentPair","prefixSeparatorIndex","uaName","getUserAgentMiddlewareOptions","getUserAgentPlugin","SelectorType","DEFAULT_USE_DUALSTACK_ENDPOINT","DEFAULT_USE_FIPS_ENDPOINT","isFipsRegion","getRealRegion","resolveRegionConfig","providedRegion","CONTENT_LENGTH_HEADER","contentLengthMiddleware","bodyLengthChecker","contentLengthMiddlewareOptions","getContentLengthPlugin","resolveParamsForS3","bucket","Bucket","isArnBucketName","ForcePathStyle","isDnsCompatibleBucketName","DisableMultiRegionAccessPoints","disableMultiRegionAccessPoints","DisableMRAP","DOMAIN_PATTERN","IP_ADDRESS_PATTERN","DOTS_PATTERN","bucketName","account","typeOrId","isArn","isValidArn","createConfigValueProvider","configKey","canonicalEndpointParamKey","configProvider","configValue","CredentialScope","getEndpointFromConfig","parseQueryString","querystring","pair","parseUrl","toEndpointV1","getEndpointFromInstructions","commandInput","instructionsSupplier","clientConfig","endpointFromConfig","resolveParams","endpointProvider","instructions","getEndpointParameterInstructions","instruction","endpointMiddleware","smithyContext","httpAuthOption","selectedHttpAuthScheme","signingProperties","signing_region","signing_service","deserializerMiddleware","deserializer","hint","serializerMiddleware","serializer","urlParser","deserializerMiddlewareOption","serializerMiddlewareOption","getSerdePlugin","commandStack","endpointMiddlewareOptions","getEndpointPlugin","resolveEndpointConfig","tls","customEndpointProvider","isCustomEndpoint","RETRY_MODES","DEFAULT_MAX_ATTEMPTS","DEFAULT_RETRY_MODE","STANDARD","THROTTLING_ERROR_CODES","TRANSIENT_ERROR_CODES","TRANSIENT_ERROR_STATUS_CODES","NODEJS_TIMEOUT_ERROR_CODES","isThrottlingError","httpStatusCode","$retryable","throttling","isTransientError","isServerError","DefaultRateLimiter","currentCapacity","lastMaxRate","measuredTxRate","requestCount","lastTimestamp","timeWindow","beta","minCapacity","minFillRate","scaleConstant","smooth","currentTimeInSeconds","getCurrentTimeInSeconds","lastThrottleTime","lastTxRateBucket","fillRate","maxCapacity","acquireTokenBucket","amount","refillTokenBucket","fillAmount","updateClientSendingRate","calculatedRate","updateMeasuredRate","rateToUse","calculateTimeWindow","cubicThrottle","enableTokenBucket","cubicSuccess","updateTokenBucketRate","getPrecise","timeBucket","currentRate","parseFloat","toFixed","DEFAULT_RETRY_DELAY_BASE","MAXIMUM_RETRY_DELAY","THROTTLING_RETRY_DELAY_BASE","INITIAL_RETRY_TOKENS","RETRY_COST","TIMEOUT_RETRY_COST","NO_RETRY_INCREMENT","INVOCATION_ID_HEADER","REQUEST_HEADER","getDefaultRetryBackoffStrategy","delayBase","computeNextBackoffDelay","attempts","setDelayBase","createDefaultRetryToken","retryDelay","retryCost","getRetryCount","getRetryDelay","getRetryCost","StandardRetryStrategy","maxAttempts","capacity","retryBackoffStrategy","maxAttemptsProvider","retryTokenScope","token","errorInfo","getMaxAttempts","shouldRetry","errorType","delayFromErrorType","retryAfterHint","capacityCost","getCapacityCost","recordSuccess","getCapacity","tokenToRenew","isRetryableError","AdaptiveRetryStrategy","ADAPTIVE","rateLimiter","standardRetryStrategy","getSendToken","acquireInitialRetryToken","refreshRetryTokenForRetry","rnds8","rng","msCrypto","REGEX","uuid","byteToHex","v4","rnds","asSdkError","resolveRetryConfig","retryStrategy","retryMode","NoOpLogger$2","getAllAliases","aliases","_aliases","alias","getMiddlewareNameWithAliases","constructStack","absoluteEntries","relativeEntries","identifyOnResolve","entriesNameSet","cloneTo","toStack","entry","middleware","expandRelativeMiddlewareList","expandedMiddlewareList","before","after","getMiddlewareList","normalizedAbsoluteEntries","normalizedRelativeEntries","normalizedEntriesNameMap","normalizedEntry","mainChain","stepWeights","priorityWeights","wholeList","toOverrideIndex","toOverride","use","plugin","toRemove","isRemoved","filterCb","removeByName","removeByReference","removeByTag","identify","mw","toggle","initialize","serialize","finalizeRequest","deserialize","normal","Client","middlewareStack","command","optionsOrCb","cb","resolveMiddleware","alphabetByEncoding","alphabetByValue","char","bitsPerLetter","bitsPerByte","maxLetterValue","fromBase64","totalByteLength","dataView","bitLength","chunkOffset","toBase64","bitClusterCount","transformToString","transformFromString","Uint8ArrayBlobAdapter","mutate","buildQueryString","iLen","qsEntry","requestTimeout","timeoutInMs","timeoutError","keepAliveSupport","Request","FetchHttpHandler","instanceOrOptions","handle","abortSignal","requestTimeoutInMs","keepAlive","aborted","abortError","queryString","auth","requestOptions","Headers","AbortController","fetchRequest","raceOfPromises","fetchHeaders","transformedHeaders","statusText","onabort","race","streamCollector","collectBlob","collectStream","readToBase64","arrayBuffer","getReader","isDone","prior","FileReader","onloadend","commaIndex","dataOffset","onerror","readAsDataURL","collectBody","streamBody","fromContext","Command","ClassBuilder","resolveMiddlewareWithContext","middlewareFn","additionalContext","CommandCtor","handlerExecutionContext","_init","_ep","_middlewareFn","_commandName","_clientName","_additionalContext","_smithyContext","_inputFilterSensitiveLog","_outputFilterSensitiveLog","_serializer","_deserializer","ep","endpointParameterInstructions","middlewareSupplier","operation","inputFilter","outputFilter","ser","de","closure","CommandRef","SENSITIVE_STRING","createAggregatedClient","commands","methodImpl","methodName","expectBoolean","stackTraceWarning","lower","expectNumber","parsed","expectNonNull","location","expectObject","receivedType","expectString","strictParseDouble","parseNumber","NUMBER_REGEX","parseEpochTimestamp","valueAsDouble","ServiceException","$fault","decorateServiceException","exception","additions","Message","throwDefaultError","parsedBody","exceptionCtor","deserializeMetadata","Code","withBaseException","ExceptionCtor","requestId","extendedRequestId","cfId","loadConfigsForDefaultMode","connectionTimeout","getChecksumConfiguration","checksumAlgorithms","algorithmId","checksumConstructor","_checksumAlgorithms","addChecksumAlgorithm","algo","resolveChecksumRuntimeConfig","checksumAlgorithm","getRetryConfiguration","_retryStrategy","setRetryStrategy","resolveRetryRuntimeConfig","retryStrategyConfiguration","getDefaultExtensionConfiguration","resolveDefaultRuntimeConfig","extendedEncodeURIComponent","StringWrapper","Class","getPrototypeOf","Function","arg0","arg1","arg2","mapWithFilter","applyInstruction","take","_instructions","targetKey","nonNullish","valueFn","pass","sourceKey","defaultFilterPassed","customFilterPassed","resolvedPath","memberName","labelValueProvider","uriLabel","isGreedyLabel","labelValue","segment","_json","isStreamingPayload","ReadableStream","retryMiddleware","isRetryStrategyV2","retry","retryToken","lastError","totalRetryDelay","isRequest","retryErrorInfo","getRetryErrorInfo","NoOpLogger","refreshError","getRetryErrorType","getRetryAfterHint","retryMiddlewareOptions","getRetryPlugin","retryAfterHeaderName","retryAfter","retryAfterSeconds","resolveClientEndpointParameters","commonParams","UseFIPS","Region","UseDualStack","EMPTY_DATA_SHA_256","SHA_256_HMAC_ALGO","SHA_256_HASH","fallbackWindow","locateWindow","ie11Sha256","Sha256","constants_1","util_locate_window_1","_this","toArrayBufferView","oncomplete","keyOperation","subtle","importKey","keyData","webCryptoSha256","typedArray","MAX_HASHABLE_LENGTH","INIT","KEY","DIGEST_LENGTH","BLOCK_SIZE","RawSha256_1","RawSha256","temp","bufferLength","bytesHashed","finished","hashBuffer","bitsHashed","bufferView","undecoratedLength","state0","state1","state2","state3","state4","state5","state6","state7","t1_1","t2_1","t1","t2","jsSha256","digestSync","outer","bufferHash","bufferFromSecret","supportsWebCrypto_1","supportsZeroByteGCM","supportsSecureRandom","supportsWebCrypto","subtleCryptoMethods","supportsSubtleCrypto","every","generateKey","encrypt","iv","additionalData","tagLength","CryptoOperation","Key","KeyOperation","MsSubtleCrypto","MsWindow","isMsWindow","msSubtleCryptoMethods","quacksLikeAnMsWindow","subtle_1","crossPlatformSha256","ie11Sha256_1","webCryptoSha256_1","sha256_js_1","supports_web_crypto_1","ie11_detection_1","WebCryptoSha256","Ie11Sha256","BROWSER_ALIASES_MAP","Bada","BlackBerry","Chrome","Chromium","Electron","Epiphany","Firefox","Focus","Generic","Googlebot","Maxthon","Opera","PhantomJS","Puffin","QupZilla","QQ","QQLite","Safari","Sailfish","SeaMonkey","Sleipnir","Swing","Tizen","Vivaldi","WeChat","Roku","BROWSER_MAP","amazon_silk","android","bada","blackberry","chromium","epiphany","focus","generic","googlebot","google_search","ie","k_meleon","maxthon","edge","mz","naver","opera_coast","phantomjs","puffin","qupzilla","qq","qqlite","sailfish","samsung_internet","seamonkey","sleipnir","swing","tizen","uc","vivaldi","webos","wechat","yandex","PLATFORMS_MAP","tablet","mobile","desktop","tv","OS_MAP","WindowsPhone","Windows","MacOS","iOS","Android","WebOS","Linux","ChromeOS","PlayStation4","ENGINE_MAP","EdgeHTML","Blink","Trident","Presto","Gecko","WebKit","regexp","_const","versionA","versionB","isLoose","versionAPrecision","getVersionPrecision","versionBPrecision","precision","lastPrecision","delta","_version","predicate","assigners","assigner","browserAlias","commonVersionIdentifier","browsersList","describe","getFirstMatch","getSecondMatch","notLikeAndroid","butAndroid","osParsersList","versionName","getWindowsVersionName","getMacOSVersionName","getAndroidVersionName","platformParsersList","iDevice","likeIDevice","getBrowserName","getOSVersion","getOSName","enginesParsersList","isGecko","likeGecko","Parser","UA","skipParsing","parsedResult","parseBrowser","browserDescriptor","browserParsersList","getBrowserVersion","parseOS","getPlatform","parsePlatform","getPlatformType","_platform","parseEngine","getEngineName","satisfies","checkTree","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","isOS","osResult","platformMatchingDefinition","isPlatform","platformResult","browserNames","matchingDefinition","isBrowser","compareVersion","includingAlias","defaultBrowserName","browserNameLower","getBrowserTypeByAlias","expectedResults","comparableVersion","currentBrowserVersion","compareVersions","platformType","isEngine","engineName","is","anything","anythings","Bowser","clientVersion","parsedUA","bowser","invalidProvider","TEXT_ENCODER","calculateBodyLength","_data","ruleSet","defaultEndpointResolver","getRuntimeConfig","apiVersion","base64Decoder","base64Encoder","disableHostPrefix","utf8Decoder","utf8Encoder","DEFAULTS_MODE_OPTIONS","resolveDefaultsModeConfig","defaultsMode","isMobileBrowser","toLocaleLowerCase","defaultConfigProvider","clientSharedValues","getSharedRuntimeConfig","packageInfo","RequestHandler","getAwsRegionExtensionConfiguration","runtimeConfigRegion","setRegion","resolveAwsRegionExtensionConfiguration","awsRegionExtensionConfiguration","asPartial","resolveRuntimeExtensions","extensionConfiguration","ChimeSDKMessagingClient","__Client","_config_0","__getRuntimeConfig","_config_1","_config_2","_config_3","_config_5","_config_7","_config_8","requestBuilder","RequestBuilder","resolvePathStack","basePath","resolvePath","hn","bp","makePagedClientRequest","createPaginator","ClientCtor","inputTokenName","outputTokenName","pageSizeTokenName","additionalArguments","page","startingToken","hasNext","pageSize","prevToken","stopOnSameToken","ChimeSDKMessagingServiceException","__ServiceException","AllowNotifications","ALL","FILTERED","ChannelMembershipType","HIDDEN","ErrorCode","AccessDenied","BadRequest","Conflict","Forbidden","NotFound","PhoneNumberAssociationsExist","PreconditionFailed","ResourceLimitExceeded","ServiceFailure","ServiceUnavailable","Throttled","Throttling","Unauthorized","Unprocessable","VoiceConnectorGroupAssociationsExist","BadRequestException","__BaseException","ConflictException","ForbiddenException","NotFoundException","ServiceFailureException","ServiceUnavailableException","ThrottledClientException","UnauthorizedClientException","ResourceLimitExceededException","ExpirationCriterion","CREATED_TIMESTAMP","LAST_MESSAGE_TIMESTAMP","ChannelMode","RESTRICTED","UNRESTRICTED","ChannelPrivacy","PRIVATE","PUBLIC","InvocationType","ASYNC","FallbackAction","ABORT","CONTINUE","PushNotificationType","VOIP","ChannelMessagePersistenceType","NON_PERSISTENT","PERSISTENT","ChannelMessageStatus","DENIED","PENDING","SENT","ChannelMessageType","CONTROL","MessagingDataType","Channel","ChannelMessage","SortOrder","ASCENDING","DESCENDING","SearchFieldKey","MEMBERS","SearchFieldOperator","EQUALS","INCLUDES","IdentityFilterSensitiveLog","Name","BatchChannelMembershipsFilterSensitiveLog","InvitedBy","Members","BatchCreateChannelMembershipResponseFilterSensitiveLog","BatchChannelMemberships","ChannelFilterSensitiveLog","Metadata","CreatedBy","ChannelAssociatedWithFlowSummaryFilterSensitiveLog","ChannelBanFilterSensitiveLog","Member","ChannelBanSummaryFilterSensitiveLog","ProcessorFilterSensitiveLog","ChannelFlowFilterSensitiveLog","Processors","MessageAttributeValueFilterSensitiveLog","StringValues","PushNotificationConfigurationFilterSensitiveLog","Title","Body","ChannelMessageCallbackFilterSensitiveLog","Content","PushNotification","MessageAttributes","ContentType","ChannelFlowCallbackRequestFilterSensitiveLog","ChannelFlowSummaryFilterSensitiveLog","ChannelMembershipFilterSensitiveLog","ChannelSummaryFilterSensitiveLog","ChannelMembershipForAppInstanceUserSummaryFilterSensitiveLog","ChannelSummary","PushNotificationPreferencesFilterSensitiveLog","FilterRule","ChannelMembershipPreferencesFilterSensitiveLog","PushNotifications","ChannelMembershipSummaryFilterSensitiveLog","ChannelMessageFilterSensitiveLog","Sender","ChannelMessageSummaryFilterSensitiveLog","ChannelModeratedByAppInstanceUserSummaryFilterSensitiveLog","ChannelModeratorFilterSensitiveLog","Moderator","ChannelModeratorSummaryFilterSensitiveLog","TagFilterSensitiveLog","Value","CreateChannelRequestFilterSensitiveLog","ClientRequestToken","Tags","ChannelId","CreateChannelBanResponseFilterSensitiveLog","CreateChannelFlowRequestFilterSensitiveLog","CreateChannelMembershipResponseFilterSensitiveLog","CreateChannelModeratorResponseFilterSensitiveLog","ChannelModerator","DescribeChannelResponseFilterSensitiveLog","DescribeChannelBanResponseFilterSensitiveLog","ChannelBan","DescribeChannelFlowResponseFilterSensitiveLog","ChannelFlow","DescribeChannelMembershipResponseFilterSensitiveLog","ChannelMembership","DescribeChannelMembershipForAppInstanceUserResponseFilterSensitiveLog","DescribeChannelModeratedByAppInstanceUserResponseFilterSensitiveLog","DescribeChannelModeratorResponseFilterSensitiveLog","GetChannelMembershipPreferencesResponseFilterSensitiveLog","Preferences","GetChannelMessageResponseFilterSensitiveLog","ListChannelBansRequestFilterSensitiveLog","NextToken","ListChannelBansResponseFilterSensitiveLog","ChannelBans","ListChannelFlowsRequestFilterSensitiveLog","ListChannelFlowsResponseFilterSensitiveLog","ChannelFlows","ListChannelMembershipsRequestFilterSensitiveLog","ListChannelMembershipsResponseFilterSensitiveLog","ChannelMemberships","ListChannelMembershipsForAppInstanceUserRequestFilterSensitiveLog","ListChannelMembershipsForAppInstanceUserResponseFilterSensitiveLog","ListChannelMessagesRequestFilterSensitiveLog","ListChannelMessagesResponseFilterSensitiveLog","ChannelMessages","ListChannelModeratorsRequestFilterSensitiveLog","ListChannelModeratorsResponseFilterSensitiveLog","ChannelModerators","ListChannelsRequestFilterSensitiveLog","ListChannelsResponseFilterSensitiveLog","Channels","ListChannelsAssociatedWithChannelFlowRequestFilterSensitiveLog","ListChannelsAssociatedWithChannelFlowResponseFilterSensitiveLog","ListChannelsModeratedByAppInstanceUserRequestFilterSensitiveLog","ListChannelsModeratedByAppInstanceUserResponseFilterSensitiveLog","ListSubChannelsRequestFilterSensitiveLog","ListSubChannelsResponseFilterSensitiveLog","ListTagsForResourceResponseFilterSensitiveLog","PutChannelMembershipPreferencesRequestFilterSensitiveLog","PutChannelMembershipPreferencesResponseFilterSensitiveLog","SearchChannelsRequestFilterSensitiveLog","SearchChannelsResponseFilterSensitiveLog","SendChannelMessageRequestFilterSensitiveLog","TagResourceRequestFilterSensitiveLog","UntagResourceRequestFilterSensitiveLog","TagKeys","UpdateChannelRequestFilterSensitiveLog","UpdateChannelFlowRequestFilterSensitiveLog","UpdateChannelMessageRequestFilterSensitiveLog","se_AssociateChannelFlowCommand","rb","isSerializableHeaderValue","_xacb","_CB","ChannelArn","ChannelFlowArn","se_BatchCreateChannelMembershipCommand","_o","MemberArns","SubChannelId","se_ChannelFlowCallbackCommand","CallbackId","generateIdempotencyToken","DeleteResource","se_CreateChannelCommand","AppInstanceArn","ElasticChannelConfiguration","ExpirationSettings","Mode","ModeratorArns","Privacy","se_CreateChannelBanCommand","MemberArn","se_CreateChannelFlowCommand","se_CreateChannelMembershipCommand","se_CreateChannelModeratorCommand","ChannelModeratorArn","se_DeleteChannelCommand","se_DeleteChannelBanCommand","se_DeleteChannelFlowCommand","se_DeleteChannelMembershipCommand","_sci","_SCI","se_DeleteChannelMessageCommand","MessageId","se_DeleteChannelModeratorCommand","se_DeleteMessagingStreamingConfigurationsCommand","se_DescribeChannelCommand","se_DescribeChannelBanCommand","se_DescribeChannelFlowCommand","se_DescribeChannelMembershipCommand","se_DescribeChannelMembershipForAppInstanceUserCommand","_s","_aiua","__expectNonNull","_AIUA","se_DescribeChannelModeratedByAppInstanceUserCommand","se_DescribeChannelModeratorCommand","se_DisassociateChannelFlowCommand","se_GetChannelMembershipPreferencesCommand","se_GetChannelMessageCommand","se_GetChannelMessageStatusCommand","se_GetMessagingSessionEndpointCommand","se_GetMessagingStreamingConfigurationsCommand","se_ListChannelBansCommand","_mr","MaxResults","_MR","_nt","_NT","se_ListChannelFlowsCommand","_aia","_AIA","se_ListChannelMembershipsCommand","_t","_T","se_ListChannelMembershipsForAppInstanceUserCommand","se_ListChannelMessagesCommand","_so","_SO","_nb","NotBefore","_NB","_na","NotAfter","_NA","se_ListChannelModeratorsCommand","se_ListChannelsCommand","_p","_P","se_ListChannelsAssociatedWithChannelFlowCommand","_cfa","_CFA","se_ListChannelsModeratedByAppInstanceUserCommand","se_ListSubChannelsCommand","se_ListTagsForResourceCommand","_RARN","se_PutChannelExpirationSettingsCommand","se_PutChannelMembershipPreferencesCommand","se_PutMessagingStreamingConfigurationsCommand","StreamingConfigurations","se_RedactChannelMessageCommand","se_SearchChannelsCommand","Fields","se_SendChannelMessageCommand","Persistence","Target","se_TagResourceCommand","ResourceARN","se_UntagResourceCommand","se_UpdateChannelCommand","se_UpdateChannelFlowCommand","se_UpdateChannelMessageCommand","se_UpdateChannelReadMarkerCommand","de_AssociateChannelFlowCommand","de_AssociateChannelFlowCommandError","contents","parsedOutput","parseErrorBody","loadRestJsonErrorCode","de_BadRequestExceptionRes","de_ConflictExceptionRes","de_ForbiddenExceptionRes","de_NotFoundExceptionRes","de_ServiceFailureExceptionRes","de_ServiceUnavailableExceptionRes","de_ThrottledClientExceptionRes","de_UnauthorizedClientExceptionRes","de_BatchCreateChannelMembershipCommand","de_BatchCreateChannelMembershipCommandError","__expectObject","parseBody","doc","Errors","de_ResourceLimitExceededExceptionRes","de_ChannelFlowCallbackCommand","de_ChannelFlowCallbackCommandError","__expectString","de_CreateChannelCommand","de_CreateChannelCommandError","de_CreateChannelBanCommand","de_CreateChannelBanCommandError","de_CreateChannelFlowCommand","de_CreateChannelFlowCommandError","de_CreateChannelMembershipCommand","de_CreateChannelMembershipCommandError","de_CreateChannelModeratorCommand","de_CreateChannelModeratorCommandError","de_DeleteChannelCommand","de_DeleteChannelCommandError","de_DeleteChannelBanCommand","de_DeleteChannelBanCommandError","de_DeleteChannelFlowCommand","de_DeleteChannelFlowCommandError","de_DeleteChannelMembershipCommand","de_DeleteChannelMembershipCommandError","de_DeleteChannelMessageCommand","de_DeleteChannelMessageCommandError","de_DeleteChannelModeratorCommand","de_DeleteChannelModeratorCommandError","de_DeleteMessagingStreamingConfigurationsCommand","de_DeleteMessagingStreamingConfigurationsCommandError","de_DescribeChannelCommand","de_DescribeChannelCommandError","de_Channel","de_DescribeChannelBanCommand","de_DescribeChannelBanCommandError","de_ChannelBan","de_DescribeChannelFlowCommand","de_DescribeChannelFlowCommandError","de_ChannelFlow","de_DescribeChannelMembershipCommand","de_DescribeChannelMembershipCommandError","de_ChannelMembership","de_DescribeChannelMembershipForAppInstanceUserCommand","de_DescribeChannelMembershipForAppInstanceUserCommandError","de_ChannelMembershipForAppInstanceUserSummary","de_DescribeChannelModeratedByAppInstanceUserCommand","de_DescribeChannelModeratedByAppInstanceUserCommandError","de_ChannelModeratedByAppInstanceUserSummary","de_DescribeChannelModeratorCommand","de_DescribeChannelModeratorCommandError","de_ChannelModerator","de_DisassociateChannelFlowCommand","de_DisassociateChannelFlowCommandError","de_GetChannelMembershipPreferencesCommand","de_GetChannelMembershipPreferencesCommandError","de_GetChannelMessageCommand","de_GetChannelMessageCommandError","de_ChannelMessage","de_GetChannelMessageStatusCommand","de_GetChannelMessageStatusCommandError","Status","de_GetMessagingSessionEndpointCommand","de_GetMessagingSessionEndpointCommandError","de_GetMessagingStreamingConfigurationsCommand","de_GetMessagingStreamingConfigurationsCommandError","de_ListChannelBansCommand","de_ListChannelBansCommandError","de_ListChannelFlowsCommand","de_ListChannelFlowsCommandError","de_ListChannelMembershipsCommand","de_ListChannelMembershipsCommandError","de_ListChannelMembershipsForAppInstanceUserCommand","de_ListChannelMembershipsForAppInstanceUserCommandError","de_ChannelMembershipForAppInstanceUserSummaryList","de_ListChannelMessagesCommand","de_ListChannelMessagesCommandError","de_ChannelMessageSummaryList","de_ListChannelModeratorsCommand","de_ListChannelModeratorsCommandError","de_ListChannelsCommand","de_ListChannelsCommandError","de_ChannelSummaryList","de_ListChannelsAssociatedWithChannelFlowCommand","de_ListChannelsAssociatedWithChannelFlowCommandError","de_ListChannelsModeratedByAppInstanceUserCommand","de_ListChannelsModeratedByAppInstanceUserCommandError","de_ChannelModeratedByAppInstanceUserSummaryList","de_ListSubChannelsCommand","de_ListSubChannelsCommandError","SubChannels","de_ListTagsForResourceCommand","de_ListTagsForResourceCommandError","de_PutChannelExpirationSettingsCommand","de_PutChannelExpirationSettingsCommandError","de_PutChannelMembershipPreferencesCommand","de_PutChannelMembershipPreferencesCommandError","de_PutMessagingStreamingConfigurationsCommand","de_PutMessagingStreamingConfigurationsCommandError","de_RedactChannelMessageCommand","de_RedactChannelMessageCommandError","de_SearchChannelsCommand","de_SearchChannelsCommandError","de_SendChannelMessageCommand","de_SendChannelMessageCommandError","de_TagResourceCommand","de_TagResourceCommandError","de_UntagResourceCommand","de_UntagResourceCommandError","de_UpdateChannelCommand","de_UpdateChannelCommandError","de_UpdateChannelFlowCommand","de_UpdateChannelFlowCommandError","de_UpdateChannelMessageCommand","de_UpdateChannelMessageCommandError","de_UpdateChannelReadMarkerCommand","de_UpdateChannelReadMarkerCommandError","__decorateServiceException","de_AppInstanceUserMembershipSummary","ReadMarkerTimestamp","__parseEpochTimestamp","__expectNumber","CreatedTimestamp","LastMessageTimestamp","LastUpdatedTimestamp","AppInstanceUserMembershipSummary","de_ChannelSummary","retVal","LastEditedTimestamp","Redacted","__expectBoolean","de_ChannelMessageSummary","collectBodyString","getOwnPropertyNames","errorBody","sanitizeErrorCode","rawValue","cleanValue","AssociateChannelFlowCommand","$Command","classBuilder","cs","BatchCreateChannelMembershipCommand","ChannelFlowCallbackCommand","CreateChannelBanCommand","CreateChannelCommand","CreateChannelFlowCommand","CreateChannelMembershipCommand","CreateChannelModeratorCommand","DeleteChannelBanCommand","DeleteChannelCommand","DeleteChannelFlowCommand","DeleteChannelMembershipCommand","DeleteChannelMessageCommand","DeleteChannelModeratorCommand","DeleteMessagingStreamingConfigurationsCommand","DescribeChannelBanCommand","DescribeChannelCommand","DescribeChannelFlowCommand","DescribeChannelMembershipCommand","DescribeChannelMembershipForAppInstanceUserCommand","DescribeChannelModeratedByAppInstanceUserCommand","DescribeChannelModeratorCommand","DisassociateChannelFlowCommand","GetChannelMembershipPreferencesCommand","GetChannelMessageCommand","GetChannelMessageStatusCommand","GetMessagingSessionEndpointCommand","GetMessagingStreamingConfigurationsCommand","ListChannelBansCommand","ListChannelFlowsCommand","ListChannelMembershipsCommand","ListChannelMembershipsForAppInstanceUserCommand","ListChannelMessagesCommand","ListChannelModeratorsCommand","ListChannelsAssociatedWithChannelFlowCommand","ListChannelsCommand","ListChannelsModeratedByAppInstanceUserCommand","ListSubChannelsCommand","ListTagsForResourceCommand","PutChannelExpirationSettingsCommand","PutChannelMembershipPreferencesCommand","PutMessagingStreamingConfigurationsCommand","RedactChannelMessageCommand","SearchChannelsCommand","SendChannelMessageCommand","TagResourceCommand","UntagResourceCommand","UpdateChannelCommand","UpdateChannelFlowCommand","UpdateChannelMessageCommand","UpdateChannelReadMarkerCommand","ChimeSDKMessaging","paginateListChannelBans","paginateListChannelFlows","paginateListChannelMembershipsForAppInstanceUser","paginateListChannelMemberships","paginateListChannelMessages","paginateListChannelModerators","paginateListChannelsAssociatedWithChannelFlow","paginateListChannelsModeratedByAppInstanceUser","paginateListChannels","paginateListSubChannels","paginateSearchChannels","Message_1","Message$1","DefaultSigV4_1","util_hex_encoding_1","DefaultSigV4","chimeClient","makeTwoDigits","getDateTimeString","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getDateString","dateTimeString","getSignatureKey","regionName","serviceName","kDate","kRegion","kService","signURL","today","encodedKey","canonicalQuerystring","hashedCanonicalRequest","signingKey","DefaultSigV4$1","PrefetchOn","PrefetchOn_1","PrefetchOn$1","DefaultMessagingSession_1","client_chime_sdk_messaging_1","DefaultMessagingSession","sigV4","reconnectShortBackoffMs","reconnectLongBackoffMs","preBootstrapMessages","isClosed","startConnecting","openEventHandler","receiveMessageHandler","startConnectingInternal","bootstrapResolved","bootstrapRejected","getMessagingSessionEndpoint","Url","closeEvent","signedUrl","prepareWebSocketUrl","messagingSessionDidStartConnecting","userArn","messagingSessionId","prefetchOn","prefetchSortBy","isSessionEstablished","jsonData","Payload","messagingSessionDidStart","preBootstrapMessageLength","iter","preBootstrapMessage","sendMessageToObserver","messagingSessionDidReceiveMessage","retryConnection","canReconnect","messagingSessionDidStop","DefaultMessagingSession$1","FullJitterLimitedBackoff_1","FullJitterLimitedBackoff","FullJitterLimitedBackoff$1","FullJitterBackoffFactory_1","FullJitterBackoffFactory","createWithLimit","FullJitterBackoffFactory$1","Log_1","Log","logLevel","Log$1","MessagingSessionConfiguration_1","MessagingSessionConfiguration","generateSessionId","MessagingSessionConfiguration$1","MultiLogger_1","MultiLogger","_loggers","memoized","OFF","MultiLogger$1","NoOpLogger_1","_msg","NoOpLogger$1","NoOpDebugLogger_1","NoOpDebugLogger","NoOpDebugLogger$1","NoOpMediaStreamBroker_1","NoOpMediaStreamBroker","NoOpAudioVideoController_1","NoOpAudioVideoController$1","emptyConfiguration","noOpLogger","NoOpAudioVideoController","NoOpMediaStreamBroker$1","NoOpDeviceController_1","NoOpDeviceControllerWithEventController","NoOpDeviceController","_options","_deviceId","_element","_trigger","_stream","_width","_height","_frameRate","NoOpDeviceController$1","NoOpEventReporter_1","NoOpEventReporter","_ts","NoOpEventReporter$1","NoOpTask_1","NoOpTask","_parentTask","NoOpTask$1","NoOpVideoElementFactory_1","NoOpVideoElementFactory","NoOpVideoElementFactory$1","NoVideoUplinkBandwidthPolicy_1","NoVideoUplinkBandwidthPolicy","_enabled","NoVideoUplinkBandwidthPolicy$1","POSTLogger_1","POSTLogger","logCapture","batchSize","BATCH_SIZE","getLogCaptureSize","logs","POSTLogger$1","PrefetchSortBy","PrefetchSortBy_1","PrefetchSortBy$1","RealtimeAttendeePositionInFrame_1","RealtimeAttendeePositionInFrame","RealtimeAttendeePositionInFrame$1","RunnableTask_1","RunnableTask","RunnableTask$1","SingleNodeAudioTransformDevice_1","SingleNodeAudioTransformDevice","_muted","createSingleAudioNode","SingleNodeAudioTransformDevice$1","TranscriptAlternative_1","TranscriptAlternative","TranscriptAlternative$1","TranscriptEntity_1","TranscriptEntity","TranscriptEntity$1","TranscriptItem_1","TranscriptItem","TranscriptItem$1","TranscriptLanguageWithScore_1","TranscriptLanguageWithScore","TranscriptLanguageWithScore$1","TranscriptResult_1","TranscriptResult","TranscriptResult$1","DeferredPromise_1","DeferredPromise","getPromise","resolvePromise","resolveParameter","resolveAndReplacePromise","rejectPromise","rejectError","rejectAndReplacePromise","DeferredPromise$1","VideoFxConstants","FXLIB_PATH","WORKER_PATH","CDN_BASE_PATH","RESOURCE_CONSTRAINTS","SEGMENTATION_MODEL","WORKER_MSG","BUILD_ENGINE_REQUEST","BUILD_ENGINE_RESPONSE","PERFORM_SEGMENTATION_REQUEST","PERFORM_SEGMENTATION_RESPONSE","PERFORM_SEGMENTATION_SAB_REQUEST","PERFORM_SEGMENTATION_SAB_RESPONSE","DESTROY_ASSETS_REQUEST","DESTROY_ASSETS_RESPONSE","CLOSE_WORKER_REQUEST","DEFAULT_STREAM_PARAMETERS","FRAMES_PER_SECOND","WIDTH_IN_PIXEL","HEIGHT_IN_PIXEL","CHANNEL_COUNT","LOAD_SUCCESS","WIDTH_IN_PIXELS","HEIGHT_IN_PIXELS","DEFAULT_PROCESSING_BUDGET_PER_FRAME","SEGMENTATION_DEFAULT_FRAMES_PER_SEGMENTATION","SEGMENTATION_SAMPLING_PERIOD_FRAME_COUNT","BLUR_DEFAULT_CYCLE_PERCENTAGE","BLUR_SAMPLING_PERIOD_FRAME_COUNT","MIN_PROCESSING_BUDGET","MAX_PROCESSING_BUDGET","MFX_ASSET_PATH","VideoFxCanvasOpsManager_1","VideoFxCanvasOpsManager","VideoFxConstants_1","streamParameters","outputCanvas","configureCanvasPipeline","getInferenceInputData","inferenceCtx","horizontalResizeScalar","verticalResizeScalar","configureForStreamParameters","backgroundReplacementCanvas","resizedCanvas","inferenceCanvas","willReadFrequently","getBackgroundReplacementCanvas","loadReplacementBackground","effectConfig","imageURL","backgroundReplacement","backgroundImageURL","defaultColor","backgroundImage","backgroundReplacementImage","resizeAndSetReplacementImage","resizeAndSetReplacementColor","resizedCtx","img","onload","VideoFxCanvasOpsManager$1","VideoFxSegmentationRateManager_1","VideoFxSegmentationRateManager","targetSegmentationCycleTime","targetSegmentationCyclePercentage","frameCountOverSamplingPeriod","totalSegmentationDurationOverSamplingPeriod","samplingPeriodStartTime","framesPerSegmentation","submitFrame","shouldApplySegmentation","startSegmentation","frameSegmentationStartTime","completeSegmentation","adjustFramesPerSegmentation","currentSegmentationCycleTime","VideoFxSegmentationRateManager$1","VideoFxProcessor_1","VideoFxProcessor","processingBudgetPerFrame","validateProcessingBudgetPerFrame","backgroundBlur","isEnabled","strength","segmentationRequestPromise","segmentationRateManager","isSharedArrayBufferSupported","sharedImageBuffer","sharedImageData","Uint8ClampedArray","canvasOpsManager","segmentationMask","fxProcess","didStreamParametersChange","adjustProcessorForNewStreamParameters","manageSegmentationMask","renderer","render","noOpProcess","fxLibScript","parentNode","removeChild","engineWorker","destroyedAssetsPromise","inferenceInputImageData","generateSegmentationMask","inferenceImageData","cloneConfigFrom","setEffectConfig","sameVideoFxConfig","newEffectConfig","validateEffectConfig","setBackgroundReplacementCanvas","publishVideoFxConfigEvent","validateReplacementConfig","testColorCtx","prevFillStyle","videoFxAssetParams","getVideoFxAssetParams","loadEngineWorker","buildEngine","loadFxLib","constructRenderer","getPathFromVideoFxAssetParams","uriEncodedKey","uriEncodedValue","engineWorkerPath","engineWorkerReceiver","buildEnginePromise","cdnBasePath","sdkVersioningParams","fxLibPath","blobURL","appendChild","getEffectConfig","settleEngineBuildPromise","settleSegmentationPromise","settleSegmentationPromiseSAB","buildStatus","transformedImageData","setToNoOpProcess","attemptAssetLoad","allCheckedPassed","checkEnv","badPromiseCondition","testFxProcessor","checkProcessor","videoFxProcessor","mediaFXEventAttibutes","firstConfig","secondConfig","VideoFxProcessor$1","decider","decideModel","measureAndDecideExecutionApproach","support_js_1","DEFAULT_EXECUTION_QUANTA","SIMD_SCORE_FIXED_POINT","WASM_SCORE_FIXED_POINT","SINGLE_INLINE_SCORE_MULTIPLIER","QUALITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER","INTERACTIVITY_MULTIPLE_QUANTA_SCORE_MULTIPLIER","WORKER_SCORE_MULTIPLIER","PERFORMANCE_THRESHOLDS","noSupport","inline","c100","c50","c20","c10","Estimator","roundtrip","toSend","expectedKey","supportsSIMD","supports","measure","budget","benchWASM","benchSIMD","measurement","inlineScoreMultiplier","executionQuanta","usagePreference","decideExecutionApproach","supportsSAB","duration","executionPreference","simdPreference","variantPreference","namePreference","executionQuantaPreference","allThresholds","useSIMD","checkScores","baseScore","thresholds","inlineScore","workerScore","unsupported","succeed","executionApproach","variant","resolveVariant","lookup","reducePreference","inlineOption","workerOption","featureCheck","forceSIMD","estimator","estimateAndFeatureCheck","estimatorBudget","knownModel","knownExecution","types","VoiceFocusAudioWorkletNode","workletInlineNode","types_js_1","CPU_WARNING_MAX_INTERVAL_MS","VoiceFocusInlineNode","cpuWarningCount","channelCountMode","modelURL","onProcessorMessage","onWorkerMessage","onModuleBufferLoaded","onModuleLoaded","disable","cpuWarningLastTriggered","onCPUWarning","workletWorkerSabNode","INDICES","STATES","disabled","stopped","VoiceFocusWorkerBufferNode","resamplerURL","supportFarendStream","approach","frames","Atomics","store","shared","workletWorkerPostMessageNode","VoiceFocusWorkerPostMessageNode","audioBufferURL","agc","voicefocus","getAudioInput","createAudioContext","decider_js_1","worklet_inline_node_js_1","worklet_worker_sab_node_js_1","worklet_worker_postMessage_node_js_1","DEFAULT_AGC_DISABLED_SETTING","useVoiceFocusAGC","useBuiltInAGC","DEFAULT_AGC_SETTING","DEFAULT_ASSET_GROUP","models","DEFAULT_CONTEXT_HINT","BASE_AUDIO_CONSTRAINTS","noiseSuppression","googTypingNoiseDetection","DEFAULT_AUDIO_CONSTRAINTS_WITH_BUILTIN_AGC","autoGainControl","DEFAULT_AUDIO_CONSTRAINTS_WITHOUT_BUILTIN_AGC","PROCESSORS","file","validateAssetSpec","mungeConstraints","defaultConstraints","urlForModel","VoiceFocus","processorURL","nodeConstructor","nodeOptions","internal","isDestroyed","assetConfig","updatedFetchBehavior","isAuto","preResolve","executionSpec","mungeExecutionPreference","executionDefinition","startingURL","preload","numberOfInputs","createNode","voiceFocusSampleRate","es","sendBufferCount","prefill","audioWorklet","addModule","applyToStream","applyToSourceNode","destination","contextHint","inputOptions","voiceFocusOptions","LoggerAdapter_1","LoggerAdapter","LoggerAdapter$1","VoiceFocusTransformDevice_1","VoiceFocusTransformDevice","voiceFocus","farEndStreamToAudioSourceNode","mixDestNode","mixSourceNode","isDefaultDevice","isUsingES","MediaStreamAudioDestinationNode","assignFarEndStreamToAudioSourceNode","createMixSourceNode","onFallback","observeMeetingAudio","addFarEndStream","unObserveMeetingAudio","removeFarendStream","activeStream","inactiveStream","streamToAdd","streamNodeToAdd","VoiceFocusTransformDevice$1","VoiceFocusTransformDeviceDelegate_1","VoiceFocusTransformDeviceDelegate","voiceFocusFellBackToInnerStream","voiceFocusInsufficientResources","VoiceFocusTransformDeviceDelegate$1","VoiceFocusDeviceTransformer_1","VoiceFocusDeviceTransformer","voicefocus_1","defaultFetchBehavior","vfLogger","augmentSpec","allowIFrame","Meeting","meetingFeaturesAllowsES","EchoReduction","forbiddenConfig","forbiddenSpec","createTransformDevice","vf","allocateVoiceFocus","currentSDKAssetGroup","pendingVoiceFocus","createVoiceFocus","majorMinorVersion","AudioVideoControllerState","DefaultTranscriptionController","DefaultMeetingSession","require$$66","require$$67","require$$68","require$$69","require$$70","require$$71","require$$72","require$$73","require$$74","require$$75","require$$76","require$$77","require$$78","require$$79","require$$80","require$$81","require$$82","require$$83","require$$84","require$$85","require$$86","require$$87","require$$88","require$$89","require$$90","require$$91","require$$92","require$$93","require$$94","require$$95","require$$96","require$$97","require$$98","require$$99","require$$100","require$$101","require$$102","require$$103","require$$104","require$$105","require$$106","require$$107","require$$108","require$$109","require$$110","require$$111","require$$112","require$$113","require$$114","require$$115","require$$116","require$$117","require$$118","require$$119","require$$120","require$$121","require$$122","require$$123","require$$124","require$$125","require$$126","require$$127","require$$128","require$$129","require$$130","require$$131","require$$132","require$$133","require$$134","require$$135","require$$136","require$$137","require$$138","require$$139","require$$140","require$$141","require$$142","require$$143","require$$144","require$$145","require$$146","require$$147","require$$148","require$$149","require$$150","require$$151","require$$152","require$$153","require$$154","require$$155","require$$156","require$$157","require$$158","require$$159","require$$160","require$$161","require$$162","require$$163","require$$164","require$$165","require$$166","require$$167","require$$168","require$$169","require$$170","require$$171","require$$172","require$$173","require$$174","require$$175","require$$176","require$$177","require$$178","require$$179","require$$180","require$$181","require$$182","require$$183","require$$184","require$$185","require$$186","require$$187","require$$188","require$$189","require$$190","require$$191","require$$192","require$$193","require$$194","require$$195","require$$196","require$$197","require$$198","require$$199","require$$200","require$$201","require$$202","require$$203","require$$204","require$$205","require$$206","require$$207","require$$208","require$$209","require$$210","VideoPreferences_2","require$$211","require$$212","require$$213","require$$214","VoiceFocusDeviceTransformer$1"],"mappings":"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"}